From 14c49c4f56792a934bcdc4efceebbd429d858571 Mon Sep 17 00:00:00 2001
From: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Date: Sun, 6 Nov 2011 15:56:37 -0600
Subject: Actually move the kde files that were renamed in the last commit

---
 kdegames.lsm                                       |   11 -
 libkdegames/Makefile.am                            |   23 -
 libkdegames/README                                 |   25 -
 libkdegames/TODO                                   |   10 -
 libkdegames/carddecks/Makefile.am                  |   24 -
 libkdegames/carddecks/README                       |   12 -
 libkdegames/carddecks/cards-aisleriot/1.png        |  Bin 1261 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/10.png       |  Bin 1933 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/11.png       |  Bin 2422 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/12.png       |  Bin 2387 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/13.png       |  Bin 1966 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/14.png       |  Bin 1794 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/15.png       |  Bin 2368 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/16.png       |  Bin 2343 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/17.png       |  Bin 2790 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/18.png       |  Bin 2092 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/19.png       |  Bin 2597 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/2.png        |  Bin 1125 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/20.png       |  Bin 2465 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/21.png       |  Bin 2503 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/22.png       |  Bin 1888 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/23.png       |  Bin 2470 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/24.png       |  Bin 2258 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/25.png       |  Bin 2063 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/26.png       |  Bin 1845 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/27.png       |  Bin 2226 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/28.png       |  Bin 2144 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/29.png       |  Bin 1980 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/3.png        |  Bin 1505 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/30.png       |  Bin 1788 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/31.png       |  Bin 2091 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/32.png       |  Bin 2097 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/33.png       |  Bin 1810 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/34.png       |  Bin 1685 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/35.png       |  Bin 1917 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/36.png       |  Bin 2006 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/37.png       |  Bin 1654 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/38.png       |  Bin 1737 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/39.png       |  Bin 2014 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/4.png        |  Bin 1559 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/40.png       |  Bin 1885 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/41.png       |  Bin 1449 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/42.png       |  Bin 1577 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/43.png       |  Bin 1798 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/44.png       |  Bin 1763 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/45.png       |  Bin 1619 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/46.png       |  Bin 1334 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/47.png       |  Bin 1768 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/48.png       |  Bin 1738 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/49.png       |  Bin 1312 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/5.png        |  Bin 2129 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/50.png       |  Bin 1126 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/51.png       |  Bin 1570 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/52.png       |  Bin 1584 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/6.png        |  Bin 1877 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/7.png        |  Bin 2403 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/8.png        |  Bin 2359 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/9.png        |  Bin 2143 -> 0 bytes
 libkdegames/carddecks/cards-aisleriot/COPYRIGHT    |   10 -
 .../carddecks/cards-aisleriot/index.desktop        |   20 -
 libkdegames/carddecks/cards-default/1.png          |  Bin 266 -> 0 bytes
 libkdegames/carddecks/cards-default/10.png         |  Bin 1002 -> 0 bytes
 libkdegames/carddecks/cards-default/11.png         |  Bin 1048 -> 0 bytes
 libkdegames/carddecks/cards-default/12.png         |  Bin 1028 -> 0 bytes
 libkdegames/carddecks/cards-default/13.png         |  Bin 952 -> 0 bytes
 libkdegames/carddecks/cards-default/14.png         |  Bin 924 -> 0 bytes
 libkdegames/carddecks/cards-default/15.png         |  Bin 940 -> 0 bytes
 libkdegames/carddecks/cards-default/16.png         |  Bin 896 -> 0 bytes
 libkdegames/carddecks/cards-default/17.png         |  Bin 415 -> 0 bytes
 libkdegames/carddecks/cards-default/18.png         |  Bin 425 -> 0 bytes
 libkdegames/carddecks/cards-default/19.png         |  Bin 451 -> 0 bytes
 libkdegames/carddecks/cards-default/2.png          |  Bin 418 -> 0 bytes
 libkdegames/carddecks/cards-default/20.png         |  Bin 415 -> 0 bytes
 libkdegames/carddecks/cards-default/21.png         |  Bin 403 -> 0 bytes
 libkdegames/carddecks/cards-default/22.png         |  Bin 410 -> 0 bytes
 libkdegames/carddecks/cards-default/23.png         |  Bin 441 -> 0 bytes
 libkdegames/carddecks/cards-default/24.png         |  Bin 400 -> 0 bytes
 libkdegames/carddecks/cards-default/25.png         |  Bin 349 -> 0 bytes
 libkdegames/carddecks/cards-default/26.png         |  Bin 367 -> 0 bytes
 libkdegames/carddecks/cards-default/27.png         |  Bin 395 -> 0 bytes
 libkdegames/carddecks/cards-default/28.png         |  Bin 395 -> 0 bytes
 libkdegames/carddecks/cards-default/29.png         |  Bin 361 -> 0 bytes
 libkdegames/carddecks/cards-default/3.png          |  Bin 303 -> 0 bytes
 libkdegames/carddecks/cards-default/30.png         |  Bin 373 -> 0 bytes
 libkdegames/carddecks/cards-default/31.png         |  Bin 414 -> 0 bytes
 libkdegames/carddecks/cards-default/32.png         |  Bin 373 -> 0 bytes
 libkdegames/carddecks/cards-default/33.png         |  Bin 336 -> 0 bytes
 libkdegames/carddecks/cards-default/34.png         |  Bin 356 -> 0 bytes
 libkdegames/carddecks/cards-default/35.png         |  Bin 388 -> 0 bytes
 libkdegames/carddecks/cards-default/36.png         |  Bin 357 -> 0 bytes
 libkdegames/carddecks/cards-default/37.png         |  Bin 347 -> 0 bytes
 libkdegames/carddecks/cards-default/38.png         |  Bin 367 -> 0 bytes
 libkdegames/carddecks/cards-default/39.png         |  Bin 395 -> 0 bytes
 libkdegames/carddecks/cards-default/4.png          |  Bin 290 -> 0 bytes
 libkdegames/carddecks/cards-default/40.png         |  Bin 368 -> 0 bytes
 libkdegames/carddecks/cards-default/41.png         |  Bin 308 -> 0 bytes
 libkdegames/carddecks/cards-default/42.png         |  Bin 321 -> 0 bytes
 libkdegames/carddecks/cards-default/43.png         |  Bin 346 -> 0 bytes
 libkdegames/carddecks/cards-default/44.png         |  Bin 332 -> 0 bytes
 libkdegames/carddecks/cards-default/45.png         |  Bin 321 -> 0 bytes
 libkdegames/carddecks/cards-default/46.png         |  Bin 326 -> 0 bytes
 libkdegames/carddecks/cards-default/47.png         |  Bin 361 -> 0 bytes
 libkdegames/carddecks/cards-default/48.png         |  Bin 342 -> 0 bytes
 libkdegames/carddecks/cards-default/49.png         |  Bin 300 -> 0 bytes
 libkdegames/carddecks/cards-default/5.png          |  Bin 890 -> 0 bytes
 libkdegames/carddecks/cards-default/50.png         |  Bin 304 -> 0 bytes
 libkdegames/carddecks/cards-default/51.png         |  Bin 333 -> 0 bytes
 libkdegames/carddecks/cards-default/52.png         |  Bin 314 -> 0 bytes
 libkdegames/carddecks/cards-default/6.png          |  Bin 911 -> 0 bytes
 libkdegames/carddecks/cards-default/7.png          |  Bin 1062 -> 0 bytes
 libkdegames/carddecks/cards-default/8.png          |  Bin 988 -> 0 bytes
 libkdegames/carddecks/cards-default/9.png          |  Bin 1064 -> 0 bytes
 libkdegames/carddecks/cards-default/index.desktop  |  115 --
 libkdegames/carddecks/cards-dondorf-whist-b/1.png  |  Bin 7122 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/10.png |  Bin 6497 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/11.png |  Bin 6381 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/12.png |  Bin 6476 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/13.png |  Bin 6642 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/14.png |  Bin 6278 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/15.png |  Bin 6542 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/16.png |  Bin 6523 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/17.png |  Bin 5118 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/18.png |  Bin 5137 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/19.png |  Bin 5239 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/2.png  |  Bin 7128 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/20.png |  Bin 4894 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/21.png |  Bin 4898 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/22.png |  Bin 4867 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/23.png |  Bin 5015 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/24.png |  Bin 4677 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/25.png |  Bin 4964 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/26.png |  Bin 5025 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/27.png |  Bin 4944 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/28.png |  Bin 4820 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/29.png |  Bin 4772 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/3.png  |  Bin 6723 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/30.png |  Bin 4844 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/31.png |  Bin 4757 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/32.png |  Bin 4662 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/33.png |  Bin 4607 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/34.png |  Bin 4670 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/35.png |  Bin 4584 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/36.png |  Bin 4501 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/37.png |  Bin 4411 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/38.png |  Bin 4481 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/39.png |  Bin 4410 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/4.png  |  Bin 6842 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/40.png |  Bin 4315 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/41.png |  Bin 4220 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/42.png |  Bin 4294 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/43.png |  Bin 4239 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/44.png |  Bin 4185 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/45.png |  Bin 4071 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/46.png |  Bin 4118 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/47.png |  Bin 4075 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/48.png |  Bin 4044 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/49.png |  Bin 3886 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/5.png  |  Bin 6779 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/50.png |  Bin 3922 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/51.png |  Bin 3892 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/52.png |  Bin 3866 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/6.png  |  Bin 6679 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/7.png  |  Bin 6638 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/8.png  |  Bin 6642 -> 0 bytes
 libkdegames/carddecks/cards-dondorf-whist-b/9.png  |  Bin 6644 -> 0 bytes
 .../carddecks/cards-dondorf-whist-b/COPYRIGHT      |   12 -
 .../carddecks/cards-dondorf-whist-b/index.desktop  |   17 -
 libkdegames/carddecks/cards-gdkcard-bonded/1.png   |  Bin 1430 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/10.png  |  Bin 4774 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/11.png  |  Bin 4670 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/12.png  |  Bin 4746 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/13.png  |  Bin 4573 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/14.png  |  Bin 4580 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/15.png  |  Bin 4546 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/16.png  |  Bin 4636 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/17.png  |  Bin 2402 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/18.png  |  Bin 2276 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/19.png  |  Bin 2614 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/2.png   |  Bin 1408 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/20.png  |  Bin 2599 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/21.png  |  Bin 2397 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/22.png  |  Bin 2293 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/23.png  |  Bin 2626 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/24.png  |  Bin 2489 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/25.png  |  Bin 2227 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/26.png  |  Bin 2126 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/27.png  |  Bin 2434 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/28.png  |  Bin 2253 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/29.png  |  Bin 2352 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/3.png   |  Bin 1765 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/30.png  |  Bin 2204 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/31.png  |  Bin 2571 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/32.png  |  Bin 2385 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/33.png  |  Bin 2152 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/34.png  |  Bin 2049 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/35.png  |  Bin 2410 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/36.png  |  Bin 2251 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/37.png  |  Bin 2076 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/38.png  |  Bin 1994 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/39.png  |  Bin 2367 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/4.png   |  Bin 1679 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/40.png  |  Bin 2256 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/41.png  |  Bin 1870 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/42.png  |  Bin 1811 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/43.png  |  Bin 2160 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/44.png  |  Bin 2131 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/45.png  |  Bin 1891 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/46.png  |  Bin 1792 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/47.png  |  Bin 2191 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/48.png  |  Bin 2122 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/49.png  |  Bin 1701 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/5.png   |  Bin 5611 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/50.png  |  Bin 1642 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/51.png  |  Bin 2007 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/52.png  |  Bin 1989 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/6.png   |  Bin 5516 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/7.png   |  Bin 5609 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/8.png   |  Bin 5592 -> 0 bytes
 libkdegames/carddecks/cards-gdkcard-bonded/9.png   |  Bin 4594 -> 0 bytes
 .../carddecks/cards-gdkcard-bonded/COPYRIGHT       |   13 -
 .../carddecks/cards-gdkcard-bonded/index.desktop   |   37 -
 libkdegames/carddecks/cards-hard-a-port/1.png      |  Bin 4371 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/10.png     |  Bin 4732 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/11.png     |  Bin 4488 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/12.png     |  Bin 4071 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/13.png     |  Bin 3948 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/14.png     |  Bin 4105 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/15.png     |  Bin 3901 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/16.png     |  Bin 3426 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/17.png     |  Bin 4134 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/18.png     |  Bin 4038 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/19.png     |  Bin 4732 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/2.png      |  Bin 4013 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/20.png     |  Bin 4147 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/21.png     |  Bin 4124 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/22.png     |  Bin 3459 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/23.png     |  Bin 4192 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/24.png     |  Bin 3610 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/25.png     |  Bin 5800 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/26.png     |  Bin 5042 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/27.png     |  Bin 4679 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/28.png     |  Bin 3785 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/29.png     |  Bin 4283 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/3.png      |  Bin 3626 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/30.png     |  Bin 4421 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/31.png     |  Bin 5930 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/32.png     |  Bin 5315 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/33.png     |  Bin 4687 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/34.png     |  Bin 4656 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/35.png     |  Bin 4573 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/36.png     |  Bin 4321 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/37.png     |  Bin 4132 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/38.png     |  Bin 3717 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/39.png     |  Bin 4222 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/4.png      |  Bin 3477 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/40.png     |  Bin 4219 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/41.png     |  Bin 3946 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/42.png     |  Bin 4477 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/43.png     |  Bin 3823 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/44.png     |  Bin 4917 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/45.png     |  Bin 3913 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/46.png     |  Bin 4945 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/47.png     |  Bin 5243 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/48.png     |  Bin 4677 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/49.png     |  Bin 5234 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/5.png      |  Bin 3864 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/50.png     |  Bin 4871 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/51.png     |  Bin 4339 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/52.png     |  Bin 3983 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/6.png      |  Bin 4269 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/7.png      |  Bin 4432 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/8.png      |  Bin 4201 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/9.png      |  Bin 5048 -> 0 bytes
 libkdegames/carddecks/cards-hard-a-port/COPYRIGHT  |   14 -
 .../carddecks/cards-hard-a-port/index.desktop      |   29 -
 libkdegames/carddecks/cards-konqi-modern/1.png     |  Bin 4366 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/10.png    |  Bin 4986 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/11.png    |  Bin 4978 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/12.png    |  Bin 4982 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/13.png    |  Bin 4420 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/14.png    |  Bin 4434 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/15.png    |  Bin 4282 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/16.png    |  Bin 4310 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/17.png    |  Bin 4112 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/18.png    |  Bin 4114 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/19.png    |  Bin 4125 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/2.png     |  Bin 4815 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/20.png    |  Bin 4116 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/21.png    |  Bin 4088 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/22.png    |  Bin 4066 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/23.png    |  Bin 4068 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/24.png    |  Bin 4081 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/25.png    |  Bin 4127 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/26.png    |  Bin 4126 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/27.png    |  Bin 4081 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/28.png    |  Bin 4153 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/29.png    |  Bin 4202 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/3.png     |  Bin 4328 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/30.png    |  Bin 4174 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/31.png    |  Bin 4193 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/32.png    |  Bin 4151 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/33.png    |  Bin 4251 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/34.png    |  Bin 4215 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/35.png    |  Bin 4256 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/36.png    |  Bin 4213 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/37.png    |  Bin 4294 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/38.png    |  Bin 4282 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/39.png    |  Bin 4275 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/4.png     |  Bin 4297 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/40.png    |  Bin 4228 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/41.png    |  Bin 4347 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/42.png    |  Bin 4329 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/43.png    |  Bin 4341 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/44.png    |  Bin 4252 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/45.png    |  Bin 4273 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/46.png    |  Bin 4228 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/47.png    |  Bin 4309 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/48.png    |  Bin 4105 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/49.png    |  Bin 4327 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/5.png     |  Bin 4959 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/50.png    |  Bin 4024 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/51.png    |  Bin 4031 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/52.png    |  Bin 3897 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/6.png     |  Bin 4973 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/7.png     |  Bin 4830 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/8.png     |  Bin 4896 -> 0 bytes
 libkdegames/carddecks/cards-konqi-modern/9.png     |  Bin 4952 -> 0 bytes
 .../carddecks/cards-konqi-modern/index.desktop     |   62 -
 libkdegames/carddecks/cards-penguins/1.png         |  Bin 1869 -> 0 bytes
 libkdegames/carddecks/cards-penguins/10.png        |  Bin 2801 -> 0 bytes
 libkdegames/carddecks/cards-penguins/11.png        |  Bin 3040 -> 0 bytes
 libkdegames/carddecks/cards-penguins/12.png        |  Bin 2981 -> 0 bytes
 libkdegames/carddecks/cards-penguins/13.png        |  Bin 2161 -> 0 bytes
 libkdegames/carddecks/cards-penguins/14.png        |  Bin 2069 -> 0 bytes
 libkdegames/carddecks/cards-penguins/15.png        |  Bin 2367 -> 0 bytes
 libkdegames/carddecks/cards-penguins/16.png        |  Bin 2274 -> 0 bytes
 libkdegames/carddecks/cards-penguins/17.png        |  Bin 2416 -> 0 bytes
 libkdegames/carddecks/cards-penguins/18.png        |  Bin 2134 -> 0 bytes
 libkdegames/carddecks/cards-penguins/19.png        |  Bin 2381 -> 0 bytes
 libkdegames/carddecks/cards-penguins/2.png         |  Bin 3191 -> 0 bytes
 libkdegames/carddecks/cards-penguins/20.png        |  Bin 2212 -> 0 bytes
 libkdegames/carddecks/cards-penguins/21.png        |  Bin 2330 -> 0 bytes
 libkdegames/carddecks/cards-penguins/22.png        |  Bin 2056 -> 0 bytes
 libkdegames/carddecks/cards-penguins/23.png        |  Bin 2254 -> 0 bytes
 libkdegames/carddecks/cards-penguins/24.png        |  Bin 2035 -> 0 bytes
 libkdegames/carddecks/cards-penguins/25.png        |  Bin 2229 -> 0 bytes
 libkdegames/carddecks/cards-penguins/26.png        |  Bin 1989 -> 0 bytes
 libkdegames/carddecks/cards-penguins/27.png        |  Bin 2140 -> 0 bytes
 libkdegames/carddecks/cards-penguins/28.png        |  Bin 2005 -> 0 bytes
 libkdegames/carddecks/cards-penguins/29.png        |  Bin 2213 -> 0 bytes
 libkdegames/carddecks/cards-penguins/3.png         |  Bin 1739 -> 0 bytes
 libkdegames/carddecks/cards-penguins/30.png        |  Bin 1977 -> 0 bytes
 libkdegames/carddecks/cards-penguins/31.png        |  Bin 2111 -> 0 bytes
 libkdegames/carddecks/cards-penguins/32.png        |  Bin 1872 -> 0 bytes
 libkdegames/carddecks/cards-penguins/33.png        |  Bin 2077 -> 0 bytes
 libkdegames/carddecks/cards-penguins/34.png        |  Bin 1889 -> 0 bytes
 libkdegames/carddecks/cards-penguins/35.png        |  Bin 1991 -> 0 bytes
 libkdegames/carddecks/cards-penguins/36.png        |  Bin 1786 -> 0 bytes
 libkdegames/carddecks/cards-penguins/37.png        |  Bin 1918 -> 0 bytes
 libkdegames/carddecks/cards-penguins/38.png        |  Bin 1762 -> 0 bytes
 libkdegames/carddecks/cards-penguins/39.png        |  Bin 1879 -> 0 bytes
 libkdegames/carddecks/cards-penguins/4.png         |  Bin 1523 -> 0 bytes
 libkdegames/carddecks/cards-penguins/40.png        |  Bin 1741 -> 0 bytes
 libkdegames/carddecks/cards-penguins/41.png        |  Bin 1668 -> 0 bytes
 libkdegames/carddecks/cards-penguins/42.png        |  Bin 1536 -> 0 bytes
 libkdegames/carddecks/cards-penguins/43.png        |  Bin 1640 -> 0 bytes
 libkdegames/carddecks/cards-penguins/44.png        |  Bin 1523 -> 0 bytes
 libkdegames/carddecks/cards-penguins/45.png        |  Bin 1672 -> 0 bytes
 libkdegames/carddecks/cards-penguins/46.png        |  Bin 1563 -> 0 bytes
 libkdegames/carddecks/cards-penguins/47.png        |  Bin 1685 -> 0 bytes
 libkdegames/carddecks/cards-penguins/48.png        |  Bin 1571 -> 0 bytes
 libkdegames/carddecks/cards-penguins/49.png        |  Bin 1432 -> 0 bytes
 libkdegames/carddecks/cards-penguins/5.png         |  Bin 2781 -> 0 bytes
 libkdegames/carddecks/cards-penguins/50.png        |  Bin 1329 -> 0 bytes
 libkdegames/carddecks/cards-penguins/51.png        |  Bin 1462 -> 0 bytes
 libkdegames/carddecks/cards-penguins/52.png        |  Bin 1390 -> 0 bytes
 libkdegames/carddecks/cards-penguins/6.png         |  Bin 2699 -> 0 bytes
 libkdegames/carddecks/cards-penguins/7.png         |  Bin 2923 -> 0 bytes
 libkdegames/carddecks/cards-penguins/8.png         |  Bin 2866 -> 0 bytes
 libkdegames/carddecks/cards-penguins/9.png         |  Bin 2894 -> 0 bytes
 libkdegames/carddecks/cards-penguins/COPYRIGHT     |   10 -
 libkdegames/carddecks/cards-penguins/index.desktop |   67 -
 libkdegames/carddecks/cards-spaced/1.png           |  Bin 5992 -> 0 bytes
 libkdegames/carddecks/cards-spaced/10.png          |  Bin 5927 -> 0 bytes
 libkdegames/carddecks/cards-spaced/11.png          |  Bin 5976 -> 0 bytes
 libkdegames/carddecks/cards-spaced/12.png          |  Bin 6113 -> 0 bytes
 libkdegames/carddecks/cards-spaced/13.png          |  Bin 5973 -> 0 bytes
 libkdegames/carddecks/cards-spaced/14.png          |  Bin 6036 -> 0 bytes
 libkdegames/carddecks/cards-spaced/15.png          |  Bin 5965 -> 0 bytes
 libkdegames/carddecks/cards-spaced/16.png          |  Bin 5621 -> 0 bytes
 libkdegames/carddecks/cards-spaced/17.png          |  Bin 6906 -> 0 bytes
 libkdegames/carddecks/cards-spaced/18.png          |  Bin 6794 -> 0 bytes
 libkdegames/carddecks/cards-spaced/19.png          |  Bin 6863 -> 0 bytes
 libkdegames/carddecks/cards-spaced/2.png           |  Bin 6041 -> 0 bytes
 libkdegames/carddecks/cards-spaced/20.png          |  Bin 6711 -> 0 bytes
 libkdegames/carddecks/cards-spaced/21.png          |  Bin 6800 -> 0 bytes
 libkdegames/carddecks/cards-spaced/22.png          |  Bin 6749 -> 0 bytes
 libkdegames/carddecks/cards-spaced/23.png          |  Bin 6883 -> 0 bytes
 libkdegames/carddecks/cards-spaced/24.png          |  Bin 6635 -> 0 bytes
 libkdegames/carddecks/cards-spaced/25.png          |  Bin 6736 -> 0 bytes
 libkdegames/carddecks/cards-spaced/26.png          |  Bin 6698 -> 0 bytes
 libkdegames/carddecks/cards-spaced/27.png          |  Bin 6778 -> 0 bytes
 libkdegames/carddecks/cards-spaced/28.png          |  Bin 6515 -> 0 bytes
 libkdegames/carddecks/cards-spaced/29.png          |  Bin 6675 -> 0 bytes
 libkdegames/carddecks/cards-spaced/3.png           |  Bin 6057 -> 0 bytes
 libkdegames/carddecks/cards-spaced/30.png          |  Bin 6594 -> 0 bytes
 libkdegames/carddecks/cards-spaced/31.png          |  Bin 6760 -> 0 bytes
 libkdegames/carddecks/cards-spaced/32.png          |  Bin 6506 -> 0 bytes
 libkdegames/carddecks/cards-spaced/33.png          |  Bin 6554 -> 0 bytes
 libkdegames/carddecks/cards-spaced/34.png          |  Bin 6520 -> 0 bytes
 libkdegames/carddecks/cards-spaced/35.png          |  Bin 6716 -> 0 bytes
 libkdegames/carddecks/cards-spaced/36.png          |  Bin 6444 -> 0 bytes
 libkdegames/carddecks/cards-spaced/37.png          |  Bin 6500 -> 0 bytes
 libkdegames/carddecks/cards-spaced/38.png          |  Bin 6448 -> 0 bytes
 libkdegames/carddecks/cards-spaced/39.png          |  Bin 6636 -> 0 bytes
 libkdegames/carddecks/cards-spaced/4.png           |  Bin 5898 -> 0 bytes
 libkdegames/carddecks/cards-spaced/40.png          |  Bin 6317 -> 0 bytes
 libkdegames/carddecks/cards-spaced/41.png          |  Bin 6381 -> 0 bytes
 libkdegames/carddecks/cards-spaced/42.png          |  Bin 6333 -> 0 bytes
 libkdegames/carddecks/cards-spaced/43.png          |  Bin 6515 -> 0 bytes
 libkdegames/carddecks/cards-spaced/44.png          |  Bin 6247 -> 0 bytes
 libkdegames/carddecks/cards-spaced/45.png          |  Bin 6281 -> 0 bytes
 libkdegames/carddecks/cards-spaced/46.png          |  Bin 6259 -> 0 bytes
 libkdegames/carddecks/cards-spaced/47.png          |  Bin 6378 -> 0 bytes
 libkdegames/carddecks/cards-spaced/48.png          |  Bin 6147 -> 0 bytes
 libkdegames/carddecks/cards-spaced/49.png          |  Bin 6156 -> 0 bytes
 libkdegames/carddecks/cards-spaced/5.png           |  Bin 5995 -> 0 bytes
 libkdegames/carddecks/cards-spaced/50.png          |  Bin 6132 -> 0 bytes
 libkdegames/carddecks/cards-spaced/51.png          |  Bin 6243 -> 0 bytes
 libkdegames/carddecks/cards-spaced/52.png          |  Bin 6043 -> 0 bytes
 libkdegames/carddecks/cards-spaced/6.png           |  Bin 6069 -> 0 bytes
 libkdegames/carddecks/cards-spaced/7.png           |  Bin 5927 -> 0 bytes
 libkdegames/carddecks/cards-spaced/8.png           |  Bin 5866 -> 0 bytes
 libkdegames/carddecks/cards-spaced/9.png           |  Bin 6014 -> 0 bytes
 libkdegames/carddecks/cards-spaced/COPYRIGHT       |   16 -
 libkdegames/carddecks/cards-spaced/index.desktop   |   46 -
 libkdegames/carddecks/cards-warwick/0.png          |  Bin 1606 -> 0 bytes
 libkdegames/carddecks/cards-warwick/1.png          |  Bin 500 -> 0 bytes
 libkdegames/carddecks/cards-warwick/10.png         |  Bin 1535 -> 0 bytes
 libkdegames/carddecks/cards-warwick/105.png        |  Bin 844 -> 0 bytes
 libkdegames/carddecks/cards-warwick/106.png        |  Bin 860 -> 0 bytes
 libkdegames/carddecks/cards-warwick/107.png        |  Bin 853 -> 0 bytes
 libkdegames/carddecks/cards-warwick/108.png        |  Bin 793 -> 0 bytes
 libkdegames/carddecks/cards-warwick/109.png        |  Bin 848 -> 0 bytes
 libkdegames/carddecks/cards-warwick/11.png         |  Bin 1553 -> 0 bytes
 libkdegames/carddecks/cards-warwick/110.png        |  Bin 868 -> 0 bytes
 libkdegames/carddecks/cards-warwick/111.png        |  Bin 856 -> 0 bytes
 libkdegames/carddecks/cards-warwick/112.png        |  Bin 773 -> 0 bytes
 libkdegames/carddecks/cards-warwick/113.png        |  Bin 746 -> 0 bytes
 libkdegames/carddecks/cards-warwick/114.png        |  Bin 778 -> 0 bytes
 libkdegames/carddecks/cards-warwick/115.png        |  Bin 771 -> 0 bytes
 libkdegames/carddecks/cards-warwick/116.png        |  Bin 663 -> 0 bytes
 libkdegames/carddecks/cards-warwick/12.png         |  Bin 1500 -> 0 bytes
 libkdegames/carddecks/cards-warwick/13.png         |  Bin 1444 -> 0 bytes
 libkdegames/carddecks/cards-warwick/14.png         |  Bin 1408 -> 0 bytes
 libkdegames/carddecks/cards-warwick/15.png         |  Bin 1452 -> 0 bytes
 libkdegames/carddecks/cards-warwick/16.png         |  Bin 1356 -> 0 bytes
 libkdegames/carddecks/cards-warwick/17.png         |  Bin 756 -> 0 bytes
 libkdegames/carddecks/cards-warwick/18.png         |  Bin 789 -> 0 bytes
 libkdegames/carddecks/cards-warwick/19.png         |  Bin 788 -> 0 bytes
 libkdegames/carddecks/cards-warwick/2.png          |  Bin 500 -> 0 bytes
 libkdegames/carddecks/cards-warwick/20.png         |  Bin 715 -> 0 bytes
 libkdegames/carddecks/cards-warwick/21.png         |  Bin 756 -> 0 bytes
 libkdegames/carddecks/cards-warwick/22.png         |  Bin 776 -> 0 bytes
 libkdegames/carddecks/cards-warwick/23.png         |  Bin 782 -> 0 bytes
 libkdegames/carddecks/cards-warwick/24.png         |  Bin 684 -> 0 bytes
 libkdegames/carddecks/cards-warwick/25.png         |  Bin 761 -> 0 bytes
 libkdegames/carddecks/cards-warwick/26.png         |  Bin 789 -> 0 bytes
 libkdegames/carddecks/cards-warwick/27.png         |  Bin 800 -> 0 bytes
 libkdegames/carddecks/cards-warwick/28.png         |  Bin 673 -> 0 bytes
 libkdegames/carddecks/cards-warwick/29.png         |  Bin 696 -> 0 bytes
 libkdegames/carddecks/cards-warwick/3.png          |  Bin 524 -> 0 bytes
 libkdegames/carddecks/cards-warwick/30.png         |  Bin 722 -> 0 bytes
 libkdegames/carddecks/cards-warwick/31.png         |  Bin 732 -> 0 bytes
 libkdegames/carddecks/cards-warwick/32.png         |  Bin 640 -> 0 bytes
 libkdegames/carddecks/cards-warwick/33.png         |  Bin 636 -> 0 bytes
 libkdegames/carddecks/cards-warwick/34.png         |  Bin 656 -> 0 bytes
 libkdegames/carddecks/cards-warwick/35.png         |  Bin 661 -> 0 bytes
 libkdegames/carddecks/cards-warwick/36.png         |  Bin 607 -> 0 bytes
 libkdegames/carddecks/cards-warwick/37.png         |  Bin 698 -> 0 bytes
 libkdegames/carddecks/cards-warwick/38.png         |  Bin 720 -> 0 bytes
 libkdegames/carddecks/cards-warwick/39.png         |  Bin 730 -> 0 bytes
 libkdegames/carddecks/cards-warwick/4.png          |  Bin 477 -> 0 bytes
 libkdegames/carddecks/cards-warwick/40.png         |  Bin 651 -> 0 bytes
 libkdegames/carddecks/cards-warwick/41.png         |  Bin 593 -> 0 bytes
 libkdegames/carddecks/cards-warwick/42.png         |  Bin 605 -> 0 bytes
 libkdegames/carddecks/cards-warwick/43.png         |  Bin 607 -> 0 bytes
 libkdegames/carddecks/cards-warwick/44.png         |  Bin 562 -> 0 bytes
 libkdegames/carddecks/cards-warwick/45.png         |  Bin 593 -> 0 bytes
 libkdegames/carddecks/cards-warwick/46.png         |  Bin 600 -> 0 bytes
 libkdegames/carddecks/cards-warwick/47.png         |  Bin 627 -> 0 bytes
 libkdegames/carddecks/cards-warwick/48.png         |  Bin 570 -> 0 bytes
 libkdegames/carddecks/cards-warwick/49.png         |  Bin 571 -> 0 bytes
 libkdegames/carddecks/cards-warwick/5.png          |  Bin 1517 -> 0 bytes
 libkdegames/carddecks/cards-warwick/50.png         |  Bin 572 -> 0 bytes
 libkdegames/carddecks/cards-warwick/51.png         |  Bin 591 -> 0 bytes
 libkdegames/carddecks/cards-warwick/52.png         |  Bin 543 -> 0 bytes
 libkdegames/carddecks/cards-warwick/6.png          |  Bin 1477 -> 0 bytes
 libkdegames/carddecks/cards-warwick/7.png          |  Bin 1536 -> 0 bytes
 libkdegames/carddecks/cards-warwick/8.png          |  Bin 1451 -> 0 bytes
 libkdegames/carddecks/cards-warwick/9.png          |  Bin 1617 -> 0 bytes
 libkdegames/carddecks/cards-warwick/index.desktop  |  126 --
 libkdegames/carddecks/cards-xskat-french/1.png     |  Bin 2525 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/10.png    |  Bin 11981 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/11.png    |  Bin 11495 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/12.png    |  Bin 11508 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/13.png    |  Bin 14544 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/14.png    |  Bin 13192 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/15.png    |  Bin 12722 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/16.png    |  Bin 12880 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/17.png    |  Bin 5891 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/18.png    |  Bin 4439 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/19.png    |  Bin 3308 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/2.png     |  Bin 2244 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/20.png    |  Bin 3016 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/21.png    |  Bin 5372 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/22.png    |  Bin 4037 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/23.png    |  Bin 3080 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/24.png    |  Bin 2786 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/25.png    |  Bin 5005 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/26.png    |  Bin 3925 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/27.png    |  Bin 2879 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/28.png    |  Bin 2777 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/29.png    |  Bin 4537 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/3.png     |  Bin 1928 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/30.png    |  Bin 3505 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/31.png    |  Bin 2647 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/32.png    |  Bin 2538 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/33.png    |  Bin 4139 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/34.png    |  Bin 3287 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/35.png    |  Bin 2402 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/36.png    |  Bin 2227 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/37.png    |  Bin 4228 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/38.png    |  Bin 3234 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/39.png    |  Bin 2528 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/4.png     |  Bin 1881 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/40.png    |  Bin 2437 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/41.png    |  Bin 3653 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/42.png    |  Bin 2841 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/43.png    |  Bin 2227 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/44.png    |  Bin 2123 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/45.png    |  Bin 3384 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/46.png    |  Bin 2888 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/47.png    |  Bin 2382 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/48.png    |  Bin 2295 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/49.png    |  Bin 2894 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/5.png     |  Bin 14410 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/50.png    |  Bin 2411 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/51.png    |  Bin 2159 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/52.png    |  Bin 2043 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/6.png     |  Bin 13796 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/7.png     |  Bin 13434 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/8.png     |  Bin 13344 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/9.png     |  Bin 12558 -> 0 bytes
 libkdegames/carddecks/cards-xskat-french/COPYRIGHT |    8 -
 .../carddecks/cards-xskat-french/index.desktop     |   55 -
 libkdegames/carddecks/cards-xskat-german/1.png     |  Bin 3915 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/10.png    |  Bin 10814 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/11.png    |  Bin 10506 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/12.png    |  Bin 11304 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/13.png    |  Bin 12477 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/14.png    |  Bin 12487 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/15.png    |  Bin 12450 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/16.png    |  Bin 12614 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/17.png    |  Bin 7191 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/18.png    |  Bin 7804 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/19.png    |  Bin 6331 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/2.png     |  Bin 3618 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/20.png    |  Bin 7794 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/21.png    |  Bin 6694 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/22.png    |  Bin 7311 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/23.png    |  Bin 5828 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/24.png    |  Bin 7572 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/25.png    |  Bin 6612 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/26.png    |  Bin 7207 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/27.png    |  Bin 5627 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/28.png    |  Bin 6886 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/29.png    |  Bin 6141 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/3.png     |  Bin 3816 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/30.png    |  Bin 6695 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/31.png    |  Bin 5139 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/32.png    |  Bin 6181 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/33.png    |  Bin 5857 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/34.png    |  Bin 6473 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/35.png    |  Bin 4789 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/36.png    |  Bin 5734 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/37.png    |  Bin 5485 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/38.png    |  Bin 6006 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/39.png    |  Bin 4422 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/4.png     |  Bin 3891 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/40.png    |  Bin 5223 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/41.png    |  Bin 5148 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/42.png    |  Bin 5651 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/43.png    |  Bin 3821 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/44.png    |  Bin 4167 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/45.png    |  Bin 4642 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/46.png    |  Bin 5223 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/47.png    |  Bin 3355 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/48.png    |  Bin 3761 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/49.png    |  Bin 4505 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/5.png     |  Bin 13831 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/50.png    |  Bin 4802 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/51.png    |  Bin 2589 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/52.png    |  Bin 2548 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/6.png     |  Bin 14126 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/7.png     |  Bin 13910 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/8.png     |  Bin 14673 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/9.png     |  Bin 10522 -> 0 bytes
 libkdegames/carddecks/cards-xskat-german/COPYRIGHT |    8 -
 .../carddecks/cards-xskat-german/index.desktop     |   55 -
 libkdegames/carddecks/convertpysols                |   69 -
 libkdegames/carddecks/decks/deck0.desktop          |  113 --
 libkdegames/carddecks/decks/deck0.png              |  Bin 4918 -> 0 bytes
 libkdegames/carddecks/decks/deck1.desktop          |   56 -
 libkdegames/carddecks/decks/deck1.png              |  Bin 4941 -> 0 bytes
 libkdegames/carddecks/decks/deck10.desktop         |   66 -
 libkdegames/carddecks/decks/deck10.png             |  Bin 950 -> 0 bytes
 libkdegames/carddecks/decks/deck11.desktop         |   66 -
 libkdegames/carddecks/decks/deck11.png             |  Bin 950 -> 0 bytes
 libkdegames/carddecks/decks/deck12.desktop         |   41 -
 libkdegames/carddecks/decks/deck12.png             |  Bin 6389 -> 0 bytes
 libkdegames/carddecks/decks/deck13.desktop         |   63 -
 libkdegames/carddecks/decks/deck13.png             |  Bin 4296 -> 0 bytes
 libkdegames/carddecks/decks/deck14.desktop         |   66 -
 libkdegames/carddecks/decks/deck14.png             |  Bin 2776 -> 0 bytes
 libkdegames/carddecks/decks/deck15.desktop         |   19 -
 libkdegames/carddecks/decks/deck15.png             |  Bin 2627 -> 0 bytes
 libkdegames/carddecks/decks/deck16.desktop         |   60 -
 libkdegames/carddecks/decks/deck16.png             |  Bin 406 -> 0 bytes
 libkdegames/carddecks/decks/deck17.desktop         |   65 -
 libkdegames/carddecks/decks/deck17.png             |  Bin 277 -> 0 bytes
 libkdegames/carddecks/decks/deck18.desktop         |   19 -
 libkdegames/carddecks/decks/deck18.png             |  Bin 5217 -> 0 bytes
 libkdegames/carddecks/decks/deck19.desktop         |   63 -
 libkdegames/carddecks/decks/deck19.png             |  Bin 5602 -> 0 bytes
 libkdegames/carddecks/decks/deck2.desktop          |   49 -
 libkdegames/carddecks/decks/deck2.png              |  Bin 5416 -> 0 bytes
 libkdegames/carddecks/decks/deck20.desktop         |   71 -
 libkdegames/carddecks/decks/deck20.png             |  Bin 6011 -> 0 bytes
 libkdegames/carddecks/decks/deck21.desktop         |   65 -
 libkdegames/carddecks/decks/deck21.png             |  Bin 6333 -> 0 bytes
 libkdegames/carddecks/decks/deck22.desktop         |   58 -
 libkdegames/carddecks/decks/deck22.png             |  Bin 6192 -> 0 bytes
 libkdegames/carddecks/decks/deck23.desktop         |   55 -
 libkdegames/carddecks/decks/deck23.png             |  Bin 5964 -> 0 bytes
 libkdegames/carddecks/decks/deck24.desktop         |   60 -
 libkdegames/carddecks/decks/deck24.png             |  Bin 4885 -> 0 bytes
 libkdegames/carddecks/decks/deck3.desktop          |   60 -
 libkdegames/carddecks/decks/deck3.png              |  Bin 6162 -> 0 bytes
 libkdegames/carddecks/decks/deck4.desktop          |   93 --
 libkdegames/carddecks/decks/deck4.png              |  Bin 6355 -> 0 bytes
 libkdegames/carddecks/decks/deck5.desktop          |   67 -
 libkdegames/carddecks/decks/deck5.png              |  Bin 4133 -> 0 bytes
 libkdegames/carddecks/decks/deck6.desktop          |   66 -
 libkdegames/carddecks/decks/deck6.png              |  Bin 4067 -> 0 bytes
 libkdegames/carddecks/decks/deck7.desktop          |   67 -
 libkdegames/carddecks/decks/deck7.png              |  Bin 3464 -> 0 bytes
 libkdegames/carddecks/decks/deck8.desktop          |   67 -
 libkdegames/carddecks/decks/deck8.png              |  Bin 3780 -> 0 bytes
 libkdegames/carddecks/decks/deck9.desktop          |    7 -
 libkdegames/carddecks/decks/deck9.png              |  Bin 1019 -> 0 bytes
 libkdegames/configure.in.in                        |   49 -
 libkdegames/highscore/INSTALL                      |   12 -
 libkdegames/highscore/Makefile.am                  |   19 -
 libkdegames/highscore/kconfigrawbackend.cpp        |   62 -
 libkdegames/highscore/kconfigrawbackend.h          |   58 -
 libkdegames/highscore/kexthighscore.cpp            |  289 ----
 libkdegames/highscore/kexthighscore.h              |  367 -----
 libkdegames/highscore/kexthighscore_gui.cpp        |  552 --------
 libkdegames/highscore/kexthighscore_gui.h          |  215 ---
 libkdegames/highscore/kexthighscore_internal.cpp   |  868 ------------
 libkdegames/highscore/kexthighscore_internal.h     |  277 ----
 libkdegames/highscore/kexthighscore_item.cpp       |  312 -----
 libkdegames/highscore/kexthighscore_item.h         |  317 -----
 libkdegames/highscore/kexthighscore_tab.cpp        |  281 ----
 libkdegames/highscore/kexthighscore_tab.h          |  121 --
 libkdegames/highscore/kfilelock.cpp                |   88 --
 libkdegames/highscore/kfilelock.h                  |   53 -
 libkdegames/highscore/khighscore.cpp               |  262 ----
 libkdegames/highscore/khighscore.h                 |  312 -----
 libkdegames/highscore/kscoredialog.cpp             |  411 ------
 libkdegames/highscore/kscoredialog.h               |  126 --
 libkdegames/kcanvasrootpixmap.cpp                  |   39 -
 libkdegames/kcanvasrootpixmap.h                    |   62 -
 libkdegames/kcarddialog.cpp                        |  808 -----------
 libkdegames/kcarddialog.h                          |  346 -----
 libkdegames/kcarddialog.png                        |  Bin 34451 -> 0 bytes
 libkdegames/kchat.cpp                              |  115 --
 libkdegames/kchat.h                                |  148 --
 libkdegames/kchatbase.cpp                          |  530 -------
 libkdegames/kchatbase.h                            |  511 -------
 libkdegames/kchatdialog.cpp                        |  253 ----
 libkdegames/kchatdialog.h                          |  120 --
 libkdegames/kgame/COMPAT                           |   55 -
 libkdegames/kgame/DESIGN                           |  407 ------
 libkdegames/kgame/Makefile.am                      |   29 -
 libkdegames/kgame/README.LIB                       |   12 -
 libkdegames/kgame/TODO                             |   41 -
 libkdegames/kgame/dialogs/Makefile.am              |   17 -
 libkdegames/kgame/dialogs/kgameconnectdialog.cpp   |  278 ----
 libkdegames/kgame/dialogs/kgameconnectdialog.h     |  171 ---
 libkdegames/kgame/dialogs/kgamedebugdialog.cpp     |  548 --------
 libkdegames/kgame/dialogs/kgamedebugdialog.h       |  150 --
 libkdegames/kgame/dialogs/kgamedialog.cpp          |  347 -----
 libkdegames/kgame/dialogs/kgamedialog.h            |  321 -----
 libkdegames/kgame/dialogs/kgamedialogconfig.cpp    |  773 ----------
 libkdegames/kgame/dialogs/kgamedialogconfig.h      |  368 -----
 libkdegames/kgame/dialogs/kgameerrordialog.cpp     |  129 --
 libkdegames/kgame/dialogs/kgameerrordialog.h       |  115 --
 libkdegames/kgame/kgame.cpp                        | 1475 --------------------
 libkdegames/kgame/kgame.h                          |  933 -------------
 libkdegames/kgame/kgamechat.cpp                    |  341 -----
 libkdegames/kgame/kgamechat.h                      |  224 ---
 libkdegames/kgame/kgameerror.cpp                   |   80 --
 libkdegames/kgame/kgameerror.h                     |   59 -
 libkdegames/kgame/kgameio.cpp                      |  539 -------
 libkdegames/kgame/kgameio.h                        |  571 --------
 libkdegames/kgame/kgamemessage.cpp                 |  156 ---
 libkdegames/kgame/kgamemessage.h                   |  173 ---
 libkdegames/kgame/kgamenetwork.cpp                 |  516 -------
 libkdegames/kgame/kgamenetwork.h                   |  432 ------
 libkdegames/kgame/kgameprocess.cpp                 |  158 ---
 libkdegames/kgame/kgameprocess.h                   |  243 ----
 libkdegames/kgame/kgameproperty.cpp                |  211 ---
 libkdegames/kgame/kgameproperty.h                  |  848 -----------
 libkdegames/kgame/kgamepropertyarray.h             |  309 ----
 libkdegames/kgame/kgamepropertyhandler.cpp         |  407 ------
 libkdegames/kgame/kgamepropertyhandler.h           |  354 -----
 libkdegames/kgame/kgamepropertylist.h              |  258 ----
 libkdegames/kgame/kgamesequence.cpp                |  125 --
 libkdegames/kgame/kgamesequence.h                  |   88 --
 libkdegames/kgame/kgameversion.h                   |   54 -
 libkdegames/kgame/kmessageclient.cpp               |  373 -----
 libkdegames/kgame/kmessageclient.h                 |  423 ------
 libkdegames/kgame/kmessageio.cpp                   |  482 -------
 libkdegames/kgame/kmessageio.h                     |  421 ------
 libkdegames/kgame/kmessageserver.cpp               |  515 -------
 libkdegames/kgame/kmessageserver.h                 |  494 -------
 libkdegames/kgame/kmessageserver.png               |  Bin 7791 -> 0 bytes
 libkdegames/kgame/kplayer.cpp                      |  446 ------
 libkdegames/kgame/kplayer.h                        |  472 -------
 libkdegames/kgame/libkdegames.html                 |  187 ---
 libkdegames/kgame/messages.txt                     |   93 --
 libkdegames/kgame/scenario0.png                    |  Bin 2413 -> 0 bytes
 libkdegames/kgame/scenario1.png                    |  Bin 8074 -> 0 bytes
 libkdegames/kgame/scenario2.png                    |  Bin 7398 -> 0 bytes
 libkdegames/kgamelcd.cpp                           |  250 ----
 libkdegames/kgamelcd.h                             |  252 ----
 libkdegames/kgamemisc.cpp                          |   62 -
 libkdegames/kgamemisc.h                            |   45 -
 libkdegames/kgameprogress.cpp                      |  345 -----
 libkdegames/kgameprogress.h                        |  256 ----
 libkdegames/kgrid2d.h                              |  520 -------
 libkdegames/kstdgameaction.cpp                     |  209 ---
 libkdegames/kstdgameaction.h                       |  261 ----
 libkdegames/pics/Makefile.am                       |    4 -
 libkdegames/pics/cr16-action-endturn.png           |  Bin 364 -> 0 bytes
 libkdegames/pics/cr16-action-highscore.png         |  Bin 493 -> 0 bytes
 libkdegames/pics/cr16-action-roll.png              |  Bin 988 -> 0 bytes
 libkdegames/pics/cr22-action-roll.png              |  Bin 1284 -> 0 bytes
 libkdegames/pics/cr32-action-endturn.png           |  Bin 751 -> 0 bytes
 libkdegames/pics/cr32-action-highscore.png         |  Bin 2440 -> 0 bytes
 libkdegames/pics/cr32-action-roll.png              |  Bin 2235 -> 0 bytes
 libkdegames/pics/star.png                          |  Bin 1103 -> 0 bytes
 libtdegames/Makefile.am                            |   23 +
 libtdegames/README                                 |   25 +
 libtdegames/TODO                                   |   10 +
 libtdegames/carddecks/Makefile.am                  |   24 +
 libtdegames/carddecks/README                       |   12 +
 libtdegames/carddecks/cards-aisleriot/1.png        |  Bin 0 -> 1261 bytes
 libtdegames/carddecks/cards-aisleriot/10.png       |  Bin 0 -> 1933 bytes
 libtdegames/carddecks/cards-aisleriot/11.png       |  Bin 0 -> 2422 bytes
 libtdegames/carddecks/cards-aisleriot/12.png       |  Bin 0 -> 2387 bytes
 libtdegames/carddecks/cards-aisleriot/13.png       |  Bin 0 -> 1966 bytes
 libtdegames/carddecks/cards-aisleriot/14.png       |  Bin 0 -> 1794 bytes
 libtdegames/carddecks/cards-aisleriot/15.png       |  Bin 0 -> 2368 bytes
 libtdegames/carddecks/cards-aisleriot/16.png       |  Bin 0 -> 2343 bytes
 libtdegames/carddecks/cards-aisleriot/17.png       |  Bin 0 -> 2790 bytes
 libtdegames/carddecks/cards-aisleriot/18.png       |  Bin 0 -> 2092 bytes
 libtdegames/carddecks/cards-aisleriot/19.png       |  Bin 0 -> 2597 bytes
 libtdegames/carddecks/cards-aisleriot/2.png        |  Bin 0 -> 1125 bytes
 libtdegames/carddecks/cards-aisleriot/20.png       |  Bin 0 -> 2465 bytes
 libtdegames/carddecks/cards-aisleriot/21.png       |  Bin 0 -> 2503 bytes
 libtdegames/carddecks/cards-aisleriot/22.png       |  Bin 0 -> 1888 bytes
 libtdegames/carddecks/cards-aisleriot/23.png       |  Bin 0 -> 2470 bytes
 libtdegames/carddecks/cards-aisleriot/24.png       |  Bin 0 -> 2258 bytes
 libtdegames/carddecks/cards-aisleriot/25.png       |  Bin 0 -> 2063 bytes
 libtdegames/carddecks/cards-aisleriot/26.png       |  Bin 0 -> 1845 bytes
 libtdegames/carddecks/cards-aisleriot/27.png       |  Bin 0 -> 2226 bytes
 libtdegames/carddecks/cards-aisleriot/28.png       |  Bin 0 -> 2144 bytes
 libtdegames/carddecks/cards-aisleriot/29.png       |  Bin 0 -> 1980 bytes
 libtdegames/carddecks/cards-aisleriot/3.png        |  Bin 0 -> 1505 bytes
 libtdegames/carddecks/cards-aisleriot/30.png       |  Bin 0 -> 1788 bytes
 libtdegames/carddecks/cards-aisleriot/31.png       |  Bin 0 -> 2091 bytes
 libtdegames/carddecks/cards-aisleriot/32.png       |  Bin 0 -> 2097 bytes
 libtdegames/carddecks/cards-aisleriot/33.png       |  Bin 0 -> 1810 bytes
 libtdegames/carddecks/cards-aisleriot/34.png       |  Bin 0 -> 1685 bytes
 libtdegames/carddecks/cards-aisleriot/35.png       |  Bin 0 -> 1917 bytes
 libtdegames/carddecks/cards-aisleriot/36.png       |  Bin 0 -> 2006 bytes
 libtdegames/carddecks/cards-aisleriot/37.png       |  Bin 0 -> 1654 bytes
 libtdegames/carddecks/cards-aisleriot/38.png       |  Bin 0 -> 1737 bytes
 libtdegames/carddecks/cards-aisleriot/39.png       |  Bin 0 -> 2014 bytes
 libtdegames/carddecks/cards-aisleriot/4.png        |  Bin 0 -> 1559 bytes
 libtdegames/carddecks/cards-aisleriot/40.png       |  Bin 0 -> 1885 bytes
 libtdegames/carddecks/cards-aisleriot/41.png       |  Bin 0 -> 1449 bytes
 libtdegames/carddecks/cards-aisleriot/42.png       |  Bin 0 -> 1577 bytes
 libtdegames/carddecks/cards-aisleriot/43.png       |  Bin 0 -> 1798 bytes
 libtdegames/carddecks/cards-aisleriot/44.png       |  Bin 0 -> 1763 bytes
 libtdegames/carddecks/cards-aisleriot/45.png       |  Bin 0 -> 1619 bytes
 libtdegames/carddecks/cards-aisleriot/46.png       |  Bin 0 -> 1334 bytes
 libtdegames/carddecks/cards-aisleriot/47.png       |  Bin 0 -> 1768 bytes
 libtdegames/carddecks/cards-aisleriot/48.png       |  Bin 0 -> 1738 bytes
 libtdegames/carddecks/cards-aisleriot/49.png       |  Bin 0 -> 1312 bytes
 libtdegames/carddecks/cards-aisleriot/5.png        |  Bin 0 -> 2129 bytes
 libtdegames/carddecks/cards-aisleriot/50.png       |  Bin 0 -> 1126 bytes
 libtdegames/carddecks/cards-aisleriot/51.png       |  Bin 0 -> 1570 bytes
 libtdegames/carddecks/cards-aisleriot/52.png       |  Bin 0 -> 1584 bytes
 libtdegames/carddecks/cards-aisleriot/6.png        |  Bin 0 -> 1877 bytes
 libtdegames/carddecks/cards-aisleriot/7.png        |  Bin 0 -> 2403 bytes
 libtdegames/carddecks/cards-aisleriot/8.png        |  Bin 0 -> 2359 bytes
 libtdegames/carddecks/cards-aisleriot/9.png        |  Bin 0 -> 2143 bytes
 libtdegames/carddecks/cards-aisleriot/COPYRIGHT    |   10 +
 .../carddecks/cards-aisleriot/index.desktop        |   20 +
 libtdegames/carddecks/cards-default/1.png          |  Bin 0 -> 266 bytes
 libtdegames/carddecks/cards-default/10.png         |  Bin 0 -> 1002 bytes
 libtdegames/carddecks/cards-default/11.png         |  Bin 0 -> 1048 bytes
 libtdegames/carddecks/cards-default/12.png         |  Bin 0 -> 1028 bytes
 libtdegames/carddecks/cards-default/13.png         |  Bin 0 -> 952 bytes
 libtdegames/carddecks/cards-default/14.png         |  Bin 0 -> 924 bytes
 libtdegames/carddecks/cards-default/15.png         |  Bin 0 -> 940 bytes
 libtdegames/carddecks/cards-default/16.png         |  Bin 0 -> 896 bytes
 libtdegames/carddecks/cards-default/17.png         |  Bin 0 -> 415 bytes
 libtdegames/carddecks/cards-default/18.png         |  Bin 0 -> 425 bytes
 libtdegames/carddecks/cards-default/19.png         |  Bin 0 -> 451 bytes
 libtdegames/carddecks/cards-default/2.png          |  Bin 0 -> 418 bytes
 libtdegames/carddecks/cards-default/20.png         |  Bin 0 -> 415 bytes
 libtdegames/carddecks/cards-default/21.png         |  Bin 0 -> 403 bytes
 libtdegames/carddecks/cards-default/22.png         |  Bin 0 -> 410 bytes
 libtdegames/carddecks/cards-default/23.png         |  Bin 0 -> 441 bytes
 libtdegames/carddecks/cards-default/24.png         |  Bin 0 -> 400 bytes
 libtdegames/carddecks/cards-default/25.png         |  Bin 0 -> 349 bytes
 libtdegames/carddecks/cards-default/26.png         |  Bin 0 -> 367 bytes
 libtdegames/carddecks/cards-default/27.png         |  Bin 0 -> 395 bytes
 libtdegames/carddecks/cards-default/28.png         |  Bin 0 -> 395 bytes
 libtdegames/carddecks/cards-default/29.png         |  Bin 0 -> 361 bytes
 libtdegames/carddecks/cards-default/3.png          |  Bin 0 -> 303 bytes
 libtdegames/carddecks/cards-default/30.png         |  Bin 0 -> 373 bytes
 libtdegames/carddecks/cards-default/31.png         |  Bin 0 -> 414 bytes
 libtdegames/carddecks/cards-default/32.png         |  Bin 0 -> 373 bytes
 libtdegames/carddecks/cards-default/33.png         |  Bin 0 -> 336 bytes
 libtdegames/carddecks/cards-default/34.png         |  Bin 0 -> 356 bytes
 libtdegames/carddecks/cards-default/35.png         |  Bin 0 -> 388 bytes
 libtdegames/carddecks/cards-default/36.png         |  Bin 0 -> 357 bytes
 libtdegames/carddecks/cards-default/37.png         |  Bin 0 -> 347 bytes
 libtdegames/carddecks/cards-default/38.png         |  Bin 0 -> 367 bytes
 libtdegames/carddecks/cards-default/39.png         |  Bin 0 -> 395 bytes
 libtdegames/carddecks/cards-default/4.png          |  Bin 0 -> 290 bytes
 libtdegames/carddecks/cards-default/40.png         |  Bin 0 -> 368 bytes
 libtdegames/carddecks/cards-default/41.png         |  Bin 0 -> 308 bytes
 libtdegames/carddecks/cards-default/42.png         |  Bin 0 -> 321 bytes
 libtdegames/carddecks/cards-default/43.png         |  Bin 0 -> 346 bytes
 libtdegames/carddecks/cards-default/44.png         |  Bin 0 -> 332 bytes
 libtdegames/carddecks/cards-default/45.png         |  Bin 0 -> 321 bytes
 libtdegames/carddecks/cards-default/46.png         |  Bin 0 -> 326 bytes
 libtdegames/carddecks/cards-default/47.png         |  Bin 0 -> 361 bytes
 libtdegames/carddecks/cards-default/48.png         |  Bin 0 -> 342 bytes
 libtdegames/carddecks/cards-default/49.png         |  Bin 0 -> 300 bytes
 libtdegames/carddecks/cards-default/5.png          |  Bin 0 -> 890 bytes
 libtdegames/carddecks/cards-default/50.png         |  Bin 0 -> 304 bytes
 libtdegames/carddecks/cards-default/51.png         |  Bin 0 -> 333 bytes
 libtdegames/carddecks/cards-default/52.png         |  Bin 0 -> 314 bytes
 libtdegames/carddecks/cards-default/6.png          |  Bin 0 -> 911 bytes
 libtdegames/carddecks/cards-default/7.png          |  Bin 0 -> 1062 bytes
 libtdegames/carddecks/cards-default/8.png          |  Bin 0 -> 988 bytes
 libtdegames/carddecks/cards-default/9.png          |  Bin 0 -> 1064 bytes
 libtdegames/carddecks/cards-default/index.desktop  |  115 ++
 libtdegames/carddecks/cards-dondorf-whist-b/1.png  |  Bin 0 -> 7122 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/10.png |  Bin 0 -> 6497 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/11.png |  Bin 0 -> 6381 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/12.png |  Bin 0 -> 6476 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/13.png |  Bin 0 -> 6642 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/14.png |  Bin 0 -> 6278 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/15.png |  Bin 0 -> 6542 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/16.png |  Bin 0 -> 6523 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/17.png |  Bin 0 -> 5118 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/18.png |  Bin 0 -> 5137 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/19.png |  Bin 0 -> 5239 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/2.png  |  Bin 0 -> 7128 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/20.png |  Bin 0 -> 4894 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/21.png |  Bin 0 -> 4898 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/22.png |  Bin 0 -> 4867 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/23.png |  Bin 0 -> 5015 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/24.png |  Bin 0 -> 4677 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/25.png |  Bin 0 -> 4964 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/26.png |  Bin 0 -> 5025 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/27.png |  Bin 0 -> 4944 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/28.png |  Bin 0 -> 4820 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/29.png |  Bin 0 -> 4772 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/3.png  |  Bin 0 -> 6723 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/30.png |  Bin 0 -> 4844 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/31.png |  Bin 0 -> 4757 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/32.png |  Bin 0 -> 4662 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/33.png |  Bin 0 -> 4607 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/34.png |  Bin 0 -> 4670 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/35.png |  Bin 0 -> 4584 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/36.png |  Bin 0 -> 4501 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/37.png |  Bin 0 -> 4411 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/38.png |  Bin 0 -> 4481 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/39.png |  Bin 0 -> 4410 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/4.png  |  Bin 0 -> 6842 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/40.png |  Bin 0 -> 4315 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/41.png |  Bin 0 -> 4220 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/42.png |  Bin 0 -> 4294 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/43.png |  Bin 0 -> 4239 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/44.png |  Bin 0 -> 4185 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/45.png |  Bin 0 -> 4071 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/46.png |  Bin 0 -> 4118 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/47.png |  Bin 0 -> 4075 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/48.png |  Bin 0 -> 4044 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/49.png |  Bin 0 -> 3886 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/5.png  |  Bin 0 -> 6779 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/50.png |  Bin 0 -> 3922 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/51.png |  Bin 0 -> 3892 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/52.png |  Bin 0 -> 3866 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/6.png  |  Bin 0 -> 6679 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/7.png  |  Bin 0 -> 6638 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/8.png  |  Bin 0 -> 6642 bytes
 libtdegames/carddecks/cards-dondorf-whist-b/9.png  |  Bin 0 -> 6644 bytes
 .../carddecks/cards-dondorf-whist-b/COPYRIGHT      |   12 +
 .../carddecks/cards-dondorf-whist-b/index.desktop  |   17 +
 libtdegames/carddecks/cards-gdkcard-bonded/1.png   |  Bin 0 -> 1430 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/10.png  |  Bin 0 -> 4774 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/11.png  |  Bin 0 -> 4670 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/12.png  |  Bin 0 -> 4746 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/13.png  |  Bin 0 -> 4573 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/14.png  |  Bin 0 -> 4580 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/15.png  |  Bin 0 -> 4546 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/16.png  |  Bin 0 -> 4636 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/17.png  |  Bin 0 -> 2402 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/18.png  |  Bin 0 -> 2276 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/19.png  |  Bin 0 -> 2614 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/2.png   |  Bin 0 -> 1408 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/20.png  |  Bin 0 -> 2599 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/21.png  |  Bin 0 -> 2397 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/22.png  |  Bin 0 -> 2293 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/23.png  |  Bin 0 -> 2626 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/24.png  |  Bin 0 -> 2489 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/25.png  |  Bin 0 -> 2227 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/26.png  |  Bin 0 -> 2126 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/27.png  |  Bin 0 -> 2434 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/28.png  |  Bin 0 -> 2253 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/29.png  |  Bin 0 -> 2352 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/3.png   |  Bin 0 -> 1765 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/30.png  |  Bin 0 -> 2204 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/31.png  |  Bin 0 -> 2571 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/32.png  |  Bin 0 -> 2385 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/33.png  |  Bin 0 -> 2152 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/34.png  |  Bin 0 -> 2049 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/35.png  |  Bin 0 -> 2410 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/36.png  |  Bin 0 -> 2251 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/37.png  |  Bin 0 -> 2076 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/38.png  |  Bin 0 -> 1994 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/39.png  |  Bin 0 -> 2367 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/4.png   |  Bin 0 -> 1679 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/40.png  |  Bin 0 -> 2256 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/41.png  |  Bin 0 -> 1870 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/42.png  |  Bin 0 -> 1811 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/43.png  |  Bin 0 -> 2160 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/44.png  |  Bin 0 -> 2131 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/45.png  |  Bin 0 -> 1891 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/46.png  |  Bin 0 -> 1792 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/47.png  |  Bin 0 -> 2191 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/48.png  |  Bin 0 -> 2122 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/49.png  |  Bin 0 -> 1701 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/5.png   |  Bin 0 -> 5611 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/50.png  |  Bin 0 -> 1642 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/51.png  |  Bin 0 -> 2007 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/52.png  |  Bin 0 -> 1989 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/6.png   |  Bin 0 -> 5516 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/7.png   |  Bin 0 -> 5609 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/8.png   |  Bin 0 -> 5592 bytes
 libtdegames/carddecks/cards-gdkcard-bonded/9.png   |  Bin 0 -> 4594 bytes
 .../carddecks/cards-gdkcard-bonded/COPYRIGHT       |   13 +
 .../carddecks/cards-gdkcard-bonded/index.desktop   |   37 +
 libtdegames/carddecks/cards-hard-a-port/1.png      |  Bin 0 -> 4371 bytes
 libtdegames/carddecks/cards-hard-a-port/10.png     |  Bin 0 -> 4732 bytes
 libtdegames/carddecks/cards-hard-a-port/11.png     |  Bin 0 -> 4488 bytes
 libtdegames/carddecks/cards-hard-a-port/12.png     |  Bin 0 -> 4071 bytes
 libtdegames/carddecks/cards-hard-a-port/13.png     |  Bin 0 -> 3948 bytes
 libtdegames/carddecks/cards-hard-a-port/14.png     |  Bin 0 -> 4105 bytes
 libtdegames/carddecks/cards-hard-a-port/15.png     |  Bin 0 -> 3901 bytes
 libtdegames/carddecks/cards-hard-a-port/16.png     |  Bin 0 -> 3426 bytes
 libtdegames/carddecks/cards-hard-a-port/17.png     |  Bin 0 -> 4134 bytes
 libtdegames/carddecks/cards-hard-a-port/18.png     |  Bin 0 -> 4038 bytes
 libtdegames/carddecks/cards-hard-a-port/19.png     |  Bin 0 -> 4732 bytes
 libtdegames/carddecks/cards-hard-a-port/2.png      |  Bin 0 -> 4013 bytes
 libtdegames/carddecks/cards-hard-a-port/20.png     |  Bin 0 -> 4147 bytes
 libtdegames/carddecks/cards-hard-a-port/21.png     |  Bin 0 -> 4124 bytes
 libtdegames/carddecks/cards-hard-a-port/22.png     |  Bin 0 -> 3459 bytes
 libtdegames/carddecks/cards-hard-a-port/23.png     |  Bin 0 -> 4192 bytes
 libtdegames/carddecks/cards-hard-a-port/24.png     |  Bin 0 -> 3610 bytes
 libtdegames/carddecks/cards-hard-a-port/25.png     |  Bin 0 -> 5800 bytes
 libtdegames/carddecks/cards-hard-a-port/26.png     |  Bin 0 -> 5042 bytes
 libtdegames/carddecks/cards-hard-a-port/27.png     |  Bin 0 -> 4679 bytes
 libtdegames/carddecks/cards-hard-a-port/28.png     |  Bin 0 -> 3785 bytes
 libtdegames/carddecks/cards-hard-a-port/29.png     |  Bin 0 -> 4283 bytes
 libtdegames/carddecks/cards-hard-a-port/3.png      |  Bin 0 -> 3626 bytes
 libtdegames/carddecks/cards-hard-a-port/30.png     |  Bin 0 -> 4421 bytes
 libtdegames/carddecks/cards-hard-a-port/31.png     |  Bin 0 -> 5930 bytes
 libtdegames/carddecks/cards-hard-a-port/32.png     |  Bin 0 -> 5315 bytes
 libtdegames/carddecks/cards-hard-a-port/33.png     |  Bin 0 -> 4687 bytes
 libtdegames/carddecks/cards-hard-a-port/34.png     |  Bin 0 -> 4656 bytes
 libtdegames/carddecks/cards-hard-a-port/35.png     |  Bin 0 -> 4573 bytes
 libtdegames/carddecks/cards-hard-a-port/36.png     |  Bin 0 -> 4321 bytes
 libtdegames/carddecks/cards-hard-a-port/37.png     |  Bin 0 -> 4132 bytes
 libtdegames/carddecks/cards-hard-a-port/38.png     |  Bin 0 -> 3717 bytes
 libtdegames/carddecks/cards-hard-a-port/39.png     |  Bin 0 -> 4222 bytes
 libtdegames/carddecks/cards-hard-a-port/4.png      |  Bin 0 -> 3477 bytes
 libtdegames/carddecks/cards-hard-a-port/40.png     |  Bin 0 -> 4219 bytes
 libtdegames/carddecks/cards-hard-a-port/41.png     |  Bin 0 -> 3946 bytes
 libtdegames/carddecks/cards-hard-a-port/42.png     |  Bin 0 -> 4477 bytes
 libtdegames/carddecks/cards-hard-a-port/43.png     |  Bin 0 -> 3823 bytes
 libtdegames/carddecks/cards-hard-a-port/44.png     |  Bin 0 -> 4917 bytes
 libtdegames/carddecks/cards-hard-a-port/45.png     |  Bin 0 -> 3913 bytes
 libtdegames/carddecks/cards-hard-a-port/46.png     |  Bin 0 -> 4945 bytes
 libtdegames/carddecks/cards-hard-a-port/47.png     |  Bin 0 -> 5243 bytes
 libtdegames/carddecks/cards-hard-a-port/48.png     |  Bin 0 -> 4677 bytes
 libtdegames/carddecks/cards-hard-a-port/49.png     |  Bin 0 -> 5234 bytes
 libtdegames/carddecks/cards-hard-a-port/5.png      |  Bin 0 -> 3864 bytes
 libtdegames/carddecks/cards-hard-a-port/50.png     |  Bin 0 -> 4871 bytes
 libtdegames/carddecks/cards-hard-a-port/51.png     |  Bin 0 -> 4339 bytes
 libtdegames/carddecks/cards-hard-a-port/52.png     |  Bin 0 -> 3983 bytes
 libtdegames/carddecks/cards-hard-a-port/6.png      |  Bin 0 -> 4269 bytes
 libtdegames/carddecks/cards-hard-a-port/7.png      |  Bin 0 -> 4432 bytes
 libtdegames/carddecks/cards-hard-a-port/8.png      |  Bin 0 -> 4201 bytes
 libtdegames/carddecks/cards-hard-a-port/9.png      |  Bin 0 -> 5048 bytes
 libtdegames/carddecks/cards-hard-a-port/COPYRIGHT  |   14 +
 .../carddecks/cards-hard-a-port/index.desktop      |   29 +
 libtdegames/carddecks/cards-konqi-modern/1.png     |  Bin 0 -> 4366 bytes
 libtdegames/carddecks/cards-konqi-modern/10.png    |  Bin 0 -> 4986 bytes
 libtdegames/carddecks/cards-konqi-modern/11.png    |  Bin 0 -> 4978 bytes
 libtdegames/carddecks/cards-konqi-modern/12.png    |  Bin 0 -> 4982 bytes
 libtdegames/carddecks/cards-konqi-modern/13.png    |  Bin 0 -> 4420 bytes
 libtdegames/carddecks/cards-konqi-modern/14.png    |  Bin 0 -> 4434 bytes
 libtdegames/carddecks/cards-konqi-modern/15.png    |  Bin 0 -> 4282 bytes
 libtdegames/carddecks/cards-konqi-modern/16.png    |  Bin 0 -> 4310 bytes
 libtdegames/carddecks/cards-konqi-modern/17.png    |  Bin 0 -> 4112 bytes
 libtdegames/carddecks/cards-konqi-modern/18.png    |  Bin 0 -> 4114 bytes
 libtdegames/carddecks/cards-konqi-modern/19.png    |  Bin 0 -> 4125 bytes
 libtdegames/carddecks/cards-konqi-modern/2.png     |  Bin 0 -> 4815 bytes
 libtdegames/carddecks/cards-konqi-modern/20.png    |  Bin 0 -> 4116 bytes
 libtdegames/carddecks/cards-konqi-modern/21.png    |  Bin 0 -> 4088 bytes
 libtdegames/carddecks/cards-konqi-modern/22.png    |  Bin 0 -> 4066 bytes
 libtdegames/carddecks/cards-konqi-modern/23.png    |  Bin 0 -> 4068 bytes
 libtdegames/carddecks/cards-konqi-modern/24.png    |  Bin 0 -> 4081 bytes
 libtdegames/carddecks/cards-konqi-modern/25.png    |  Bin 0 -> 4127 bytes
 libtdegames/carddecks/cards-konqi-modern/26.png    |  Bin 0 -> 4126 bytes
 libtdegames/carddecks/cards-konqi-modern/27.png    |  Bin 0 -> 4081 bytes
 libtdegames/carddecks/cards-konqi-modern/28.png    |  Bin 0 -> 4153 bytes
 libtdegames/carddecks/cards-konqi-modern/29.png    |  Bin 0 -> 4202 bytes
 libtdegames/carddecks/cards-konqi-modern/3.png     |  Bin 0 -> 4328 bytes
 libtdegames/carddecks/cards-konqi-modern/30.png    |  Bin 0 -> 4174 bytes
 libtdegames/carddecks/cards-konqi-modern/31.png    |  Bin 0 -> 4193 bytes
 libtdegames/carddecks/cards-konqi-modern/32.png    |  Bin 0 -> 4151 bytes
 libtdegames/carddecks/cards-konqi-modern/33.png    |  Bin 0 -> 4251 bytes
 libtdegames/carddecks/cards-konqi-modern/34.png    |  Bin 0 -> 4215 bytes
 libtdegames/carddecks/cards-konqi-modern/35.png    |  Bin 0 -> 4256 bytes
 libtdegames/carddecks/cards-konqi-modern/36.png    |  Bin 0 -> 4213 bytes
 libtdegames/carddecks/cards-konqi-modern/37.png    |  Bin 0 -> 4294 bytes
 libtdegames/carddecks/cards-konqi-modern/38.png    |  Bin 0 -> 4282 bytes
 libtdegames/carddecks/cards-konqi-modern/39.png    |  Bin 0 -> 4275 bytes
 libtdegames/carddecks/cards-konqi-modern/4.png     |  Bin 0 -> 4297 bytes
 libtdegames/carddecks/cards-konqi-modern/40.png    |  Bin 0 -> 4228 bytes
 libtdegames/carddecks/cards-konqi-modern/41.png    |  Bin 0 -> 4347 bytes
 libtdegames/carddecks/cards-konqi-modern/42.png    |  Bin 0 -> 4329 bytes
 libtdegames/carddecks/cards-konqi-modern/43.png    |  Bin 0 -> 4341 bytes
 libtdegames/carddecks/cards-konqi-modern/44.png    |  Bin 0 -> 4252 bytes
 libtdegames/carddecks/cards-konqi-modern/45.png    |  Bin 0 -> 4273 bytes
 libtdegames/carddecks/cards-konqi-modern/46.png    |  Bin 0 -> 4228 bytes
 libtdegames/carddecks/cards-konqi-modern/47.png    |  Bin 0 -> 4309 bytes
 libtdegames/carddecks/cards-konqi-modern/48.png    |  Bin 0 -> 4105 bytes
 libtdegames/carddecks/cards-konqi-modern/49.png    |  Bin 0 -> 4327 bytes
 libtdegames/carddecks/cards-konqi-modern/5.png     |  Bin 0 -> 4959 bytes
 libtdegames/carddecks/cards-konqi-modern/50.png    |  Bin 0 -> 4024 bytes
 libtdegames/carddecks/cards-konqi-modern/51.png    |  Bin 0 -> 4031 bytes
 libtdegames/carddecks/cards-konqi-modern/52.png    |  Bin 0 -> 3897 bytes
 libtdegames/carddecks/cards-konqi-modern/6.png     |  Bin 0 -> 4973 bytes
 libtdegames/carddecks/cards-konqi-modern/7.png     |  Bin 0 -> 4830 bytes
 libtdegames/carddecks/cards-konqi-modern/8.png     |  Bin 0 -> 4896 bytes
 libtdegames/carddecks/cards-konqi-modern/9.png     |  Bin 0 -> 4952 bytes
 .../carddecks/cards-konqi-modern/index.desktop     |   62 +
 libtdegames/carddecks/cards-penguins/1.png         |  Bin 0 -> 1869 bytes
 libtdegames/carddecks/cards-penguins/10.png        |  Bin 0 -> 2801 bytes
 libtdegames/carddecks/cards-penguins/11.png        |  Bin 0 -> 3040 bytes
 libtdegames/carddecks/cards-penguins/12.png        |  Bin 0 -> 2981 bytes
 libtdegames/carddecks/cards-penguins/13.png        |  Bin 0 -> 2161 bytes
 libtdegames/carddecks/cards-penguins/14.png        |  Bin 0 -> 2069 bytes
 libtdegames/carddecks/cards-penguins/15.png        |  Bin 0 -> 2367 bytes
 libtdegames/carddecks/cards-penguins/16.png        |  Bin 0 -> 2274 bytes
 libtdegames/carddecks/cards-penguins/17.png        |  Bin 0 -> 2416 bytes
 libtdegames/carddecks/cards-penguins/18.png        |  Bin 0 -> 2134 bytes
 libtdegames/carddecks/cards-penguins/19.png        |  Bin 0 -> 2381 bytes
 libtdegames/carddecks/cards-penguins/2.png         |  Bin 0 -> 3191 bytes
 libtdegames/carddecks/cards-penguins/20.png        |  Bin 0 -> 2212 bytes
 libtdegames/carddecks/cards-penguins/21.png        |  Bin 0 -> 2330 bytes
 libtdegames/carddecks/cards-penguins/22.png        |  Bin 0 -> 2056 bytes
 libtdegames/carddecks/cards-penguins/23.png        |  Bin 0 -> 2254 bytes
 libtdegames/carddecks/cards-penguins/24.png        |  Bin 0 -> 2035 bytes
 libtdegames/carddecks/cards-penguins/25.png        |  Bin 0 -> 2229 bytes
 libtdegames/carddecks/cards-penguins/26.png        |  Bin 0 -> 1989 bytes
 libtdegames/carddecks/cards-penguins/27.png        |  Bin 0 -> 2140 bytes
 libtdegames/carddecks/cards-penguins/28.png        |  Bin 0 -> 2005 bytes
 libtdegames/carddecks/cards-penguins/29.png        |  Bin 0 -> 2213 bytes
 libtdegames/carddecks/cards-penguins/3.png         |  Bin 0 -> 1739 bytes
 libtdegames/carddecks/cards-penguins/30.png        |  Bin 0 -> 1977 bytes
 libtdegames/carddecks/cards-penguins/31.png        |  Bin 0 -> 2111 bytes
 libtdegames/carddecks/cards-penguins/32.png        |  Bin 0 -> 1872 bytes
 libtdegames/carddecks/cards-penguins/33.png        |  Bin 0 -> 2077 bytes
 libtdegames/carddecks/cards-penguins/34.png        |  Bin 0 -> 1889 bytes
 libtdegames/carddecks/cards-penguins/35.png        |  Bin 0 -> 1991 bytes
 libtdegames/carddecks/cards-penguins/36.png        |  Bin 0 -> 1786 bytes
 libtdegames/carddecks/cards-penguins/37.png        |  Bin 0 -> 1918 bytes
 libtdegames/carddecks/cards-penguins/38.png        |  Bin 0 -> 1762 bytes
 libtdegames/carddecks/cards-penguins/39.png        |  Bin 0 -> 1879 bytes
 libtdegames/carddecks/cards-penguins/4.png         |  Bin 0 -> 1523 bytes
 libtdegames/carddecks/cards-penguins/40.png        |  Bin 0 -> 1741 bytes
 libtdegames/carddecks/cards-penguins/41.png        |  Bin 0 -> 1668 bytes
 libtdegames/carddecks/cards-penguins/42.png        |  Bin 0 -> 1536 bytes
 libtdegames/carddecks/cards-penguins/43.png        |  Bin 0 -> 1640 bytes
 libtdegames/carddecks/cards-penguins/44.png        |  Bin 0 -> 1523 bytes
 libtdegames/carddecks/cards-penguins/45.png        |  Bin 0 -> 1672 bytes
 libtdegames/carddecks/cards-penguins/46.png        |  Bin 0 -> 1563 bytes
 libtdegames/carddecks/cards-penguins/47.png        |  Bin 0 -> 1685 bytes
 libtdegames/carddecks/cards-penguins/48.png        |  Bin 0 -> 1571 bytes
 libtdegames/carddecks/cards-penguins/49.png        |  Bin 0 -> 1432 bytes
 libtdegames/carddecks/cards-penguins/5.png         |  Bin 0 -> 2781 bytes
 libtdegames/carddecks/cards-penguins/50.png        |  Bin 0 -> 1329 bytes
 libtdegames/carddecks/cards-penguins/51.png        |  Bin 0 -> 1462 bytes
 libtdegames/carddecks/cards-penguins/52.png        |  Bin 0 -> 1390 bytes
 libtdegames/carddecks/cards-penguins/6.png         |  Bin 0 -> 2699 bytes
 libtdegames/carddecks/cards-penguins/7.png         |  Bin 0 -> 2923 bytes
 libtdegames/carddecks/cards-penguins/8.png         |  Bin 0 -> 2866 bytes
 libtdegames/carddecks/cards-penguins/9.png         |  Bin 0 -> 2894 bytes
 libtdegames/carddecks/cards-penguins/COPYRIGHT     |   10 +
 libtdegames/carddecks/cards-penguins/index.desktop |   67 +
 libtdegames/carddecks/cards-spaced/1.png           |  Bin 0 -> 5992 bytes
 libtdegames/carddecks/cards-spaced/10.png          |  Bin 0 -> 5927 bytes
 libtdegames/carddecks/cards-spaced/11.png          |  Bin 0 -> 5976 bytes
 libtdegames/carddecks/cards-spaced/12.png          |  Bin 0 -> 6113 bytes
 libtdegames/carddecks/cards-spaced/13.png          |  Bin 0 -> 5973 bytes
 libtdegames/carddecks/cards-spaced/14.png          |  Bin 0 -> 6036 bytes
 libtdegames/carddecks/cards-spaced/15.png          |  Bin 0 -> 5965 bytes
 libtdegames/carddecks/cards-spaced/16.png          |  Bin 0 -> 5621 bytes
 libtdegames/carddecks/cards-spaced/17.png          |  Bin 0 -> 6906 bytes
 libtdegames/carddecks/cards-spaced/18.png          |  Bin 0 -> 6794 bytes
 libtdegames/carddecks/cards-spaced/19.png          |  Bin 0 -> 6863 bytes
 libtdegames/carddecks/cards-spaced/2.png           |  Bin 0 -> 6041 bytes
 libtdegames/carddecks/cards-spaced/20.png          |  Bin 0 -> 6711 bytes
 libtdegames/carddecks/cards-spaced/21.png          |  Bin 0 -> 6800 bytes
 libtdegames/carddecks/cards-spaced/22.png          |  Bin 0 -> 6749 bytes
 libtdegames/carddecks/cards-spaced/23.png          |  Bin 0 -> 6883 bytes
 libtdegames/carddecks/cards-spaced/24.png          |  Bin 0 -> 6635 bytes
 libtdegames/carddecks/cards-spaced/25.png          |  Bin 0 -> 6736 bytes
 libtdegames/carddecks/cards-spaced/26.png          |  Bin 0 -> 6698 bytes
 libtdegames/carddecks/cards-spaced/27.png          |  Bin 0 -> 6778 bytes
 libtdegames/carddecks/cards-spaced/28.png          |  Bin 0 -> 6515 bytes
 libtdegames/carddecks/cards-spaced/29.png          |  Bin 0 -> 6675 bytes
 libtdegames/carddecks/cards-spaced/3.png           |  Bin 0 -> 6057 bytes
 libtdegames/carddecks/cards-spaced/30.png          |  Bin 0 -> 6594 bytes
 libtdegames/carddecks/cards-spaced/31.png          |  Bin 0 -> 6760 bytes
 libtdegames/carddecks/cards-spaced/32.png          |  Bin 0 -> 6506 bytes
 libtdegames/carddecks/cards-spaced/33.png          |  Bin 0 -> 6554 bytes
 libtdegames/carddecks/cards-spaced/34.png          |  Bin 0 -> 6520 bytes
 libtdegames/carddecks/cards-spaced/35.png          |  Bin 0 -> 6716 bytes
 libtdegames/carddecks/cards-spaced/36.png          |  Bin 0 -> 6444 bytes
 libtdegames/carddecks/cards-spaced/37.png          |  Bin 0 -> 6500 bytes
 libtdegames/carddecks/cards-spaced/38.png          |  Bin 0 -> 6448 bytes
 libtdegames/carddecks/cards-spaced/39.png          |  Bin 0 -> 6636 bytes
 libtdegames/carddecks/cards-spaced/4.png           |  Bin 0 -> 5898 bytes
 libtdegames/carddecks/cards-spaced/40.png          |  Bin 0 -> 6317 bytes
 libtdegames/carddecks/cards-spaced/41.png          |  Bin 0 -> 6381 bytes
 libtdegames/carddecks/cards-spaced/42.png          |  Bin 0 -> 6333 bytes
 libtdegames/carddecks/cards-spaced/43.png          |  Bin 0 -> 6515 bytes
 libtdegames/carddecks/cards-spaced/44.png          |  Bin 0 -> 6247 bytes
 libtdegames/carddecks/cards-spaced/45.png          |  Bin 0 -> 6281 bytes
 libtdegames/carddecks/cards-spaced/46.png          |  Bin 0 -> 6259 bytes
 libtdegames/carddecks/cards-spaced/47.png          |  Bin 0 -> 6378 bytes
 libtdegames/carddecks/cards-spaced/48.png          |  Bin 0 -> 6147 bytes
 libtdegames/carddecks/cards-spaced/49.png          |  Bin 0 -> 6156 bytes
 libtdegames/carddecks/cards-spaced/5.png           |  Bin 0 -> 5995 bytes
 libtdegames/carddecks/cards-spaced/50.png          |  Bin 0 -> 6132 bytes
 libtdegames/carddecks/cards-spaced/51.png          |  Bin 0 -> 6243 bytes
 libtdegames/carddecks/cards-spaced/52.png          |  Bin 0 -> 6043 bytes
 libtdegames/carddecks/cards-spaced/6.png           |  Bin 0 -> 6069 bytes
 libtdegames/carddecks/cards-spaced/7.png           |  Bin 0 -> 5927 bytes
 libtdegames/carddecks/cards-spaced/8.png           |  Bin 0 -> 5866 bytes
 libtdegames/carddecks/cards-spaced/9.png           |  Bin 0 -> 6014 bytes
 libtdegames/carddecks/cards-spaced/COPYRIGHT       |   16 +
 libtdegames/carddecks/cards-spaced/index.desktop   |   46 +
 libtdegames/carddecks/cards-warwick/0.png          |  Bin 0 -> 1606 bytes
 libtdegames/carddecks/cards-warwick/1.png          |  Bin 0 -> 500 bytes
 libtdegames/carddecks/cards-warwick/10.png         |  Bin 0 -> 1535 bytes
 libtdegames/carddecks/cards-warwick/105.png        |  Bin 0 -> 844 bytes
 libtdegames/carddecks/cards-warwick/106.png        |  Bin 0 -> 860 bytes
 libtdegames/carddecks/cards-warwick/107.png        |  Bin 0 -> 853 bytes
 libtdegames/carddecks/cards-warwick/108.png        |  Bin 0 -> 793 bytes
 libtdegames/carddecks/cards-warwick/109.png        |  Bin 0 -> 848 bytes
 libtdegames/carddecks/cards-warwick/11.png         |  Bin 0 -> 1553 bytes
 libtdegames/carddecks/cards-warwick/110.png        |  Bin 0 -> 868 bytes
 libtdegames/carddecks/cards-warwick/111.png        |  Bin 0 -> 856 bytes
 libtdegames/carddecks/cards-warwick/112.png        |  Bin 0 -> 773 bytes
 libtdegames/carddecks/cards-warwick/113.png        |  Bin 0 -> 746 bytes
 libtdegames/carddecks/cards-warwick/114.png        |  Bin 0 -> 778 bytes
 libtdegames/carddecks/cards-warwick/115.png        |  Bin 0 -> 771 bytes
 libtdegames/carddecks/cards-warwick/116.png        |  Bin 0 -> 663 bytes
 libtdegames/carddecks/cards-warwick/12.png         |  Bin 0 -> 1500 bytes
 libtdegames/carddecks/cards-warwick/13.png         |  Bin 0 -> 1444 bytes
 libtdegames/carddecks/cards-warwick/14.png         |  Bin 0 -> 1408 bytes
 libtdegames/carddecks/cards-warwick/15.png         |  Bin 0 -> 1452 bytes
 libtdegames/carddecks/cards-warwick/16.png         |  Bin 0 -> 1356 bytes
 libtdegames/carddecks/cards-warwick/17.png         |  Bin 0 -> 756 bytes
 libtdegames/carddecks/cards-warwick/18.png         |  Bin 0 -> 789 bytes
 libtdegames/carddecks/cards-warwick/19.png         |  Bin 0 -> 788 bytes
 libtdegames/carddecks/cards-warwick/2.png          |  Bin 0 -> 500 bytes
 libtdegames/carddecks/cards-warwick/20.png         |  Bin 0 -> 715 bytes
 libtdegames/carddecks/cards-warwick/21.png         |  Bin 0 -> 756 bytes
 libtdegames/carddecks/cards-warwick/22.png         |  Bin 0 -> 776 bytes
 libtdegames/carddecks/cards-warwick/23.png         |  Bin 0 -> 782 bytes
 libtdegames/carddecks/cards-warwick/24.png         |  Bin 0 -> 684 bytes
 libtdegames/carddecks/cards-warwick/25.png         |  Bin 0 -> 761 bytes
 libtdegames/carddecks/cards-warwick/26.png         |  Bin 0 -> 789 bytes
 libtdegames/carddecks/cards-warwick/27.png         |  Bin 0 -> 800 bytes
 libtdegames/carddecks/cards-warwick/28.png         |  Bin 0 -> 673 bytes
 libtdegames/carddecks/cards-warwick/29.png         |  Bin 0 -> 696 bytes
 libtdegames/carddecks/cards-warwick/3.png          |  Bin 0 -> 524 bytes
 libtdegames/carddecks/cards-warwick/30.png         |  Bin 0 -> 722 bytes
 libtdegames/carddecks/cards-warwick/31.png         |  Bin 0 -> 732 bytes
 libtdegames/carddecks/cards-warwick/32.png         |  Bin 0 -> 640 bytes
 libtdegames/carddecks/cards-warwick/33.png         |  Bin 0 -> 636 bytes
 libtdegames/carddecks/cards-warwick/34.png         |  Bin 0 -> 656 bytes
 libtdegames/carddecks/cards-warwick/35.png         |  Bin 0 -> 661 bytes
 libtdegames/carddecks/cards-warwick/36.png         |  Bin 0 -> 607 bytes
 libtdegames/carddecks/cards-warwick/37.png         |  Bin 0 -> 698 bytes
 libtdegames/carddecks/cards-warwick/38.png         |  Bin 0 -> 720 bytes
 libtdegames/carddecks/cards-warwick/39.png         |  Bin 0 -> 730 bytes
 libtdegames/carddecks/cards-warwick/4.png          |  Bin 0 -> 477 bytes
 libtdegames/carddecks/cards-warwick/40.png         |  Bin 0 -> 651 bytes
 libtdegames/carddecks/cards-warwick/41.png         |  Bin 0 -> 593 bytes
 libtdegames/carddecks/cards-warwick/42.png         |  Bin 0 -> 605 bytes
 libtdegames/carddecks/cards-warwick/43.png         |  Bin 0 -> 607 bytes
 libtdegames/carddecks/cards-warwick/44.png         |  Bin 0 -> 562 bytes
 libtdegames/carddecks/cards-warwick/45.png         |  Bin 0 -> 593 bytes
 libtdegames/carddecks/cards-warwick/46.png         |  Bin 0 -> 600 bytes
 libtdegames/carddecks/cards-warwick/47.png         |  Bin 0 -> 627 bytes
 libtdegames/carddecks/cards-warwick/48.png         |  Bin 0 -> 570 bytes
 libtdegames/carddecks/cards-warwick/49.png         |  Bin 0 -> 571 bytes
 libtdegames/carddecks/cards-warwick/5.png          |  Bin 0 -> 1517 bytes
 libtdegames/carddecks/cards-warwick/50.png         |  Bin 0 -> 572 bytes
 libtdegames/carddecks/cards-warwick/51.png         |  Bin 0 -> 591 bytes
 libtdegames/carddecks/cards-warwick/52.png         |  Bin 0 -> 543 bytes
 libtdegames/carddecks/cards-warwick/6.png          |  Bin 0 -> 1477 bytes
 libtdegames/carddecks/cards-warwick/7.png          |  Bin 0 -> 1536 bytes
 libtdegames/carddecks/cards-warwick/8.png          |  Bin 0 -> 1451 bytes
 libtdegames/carddecks/cards-warwick/9.png          |  Bin 0 -> 1617 bytes
 libtdegames/carddecks/cards-warwick/index.desktop  |  126 ++
 libtdegames/carddecks/cards-xskat-french/1.png     |  Bin 0 -> 2525 bytes
 libtdegames/carddecks/cards-xskat-french/10.png    |  Bin 0 -> 11981 bytes
 libtdegames/carddecks/cards-xskat-french/11.png    |  Bin 0 -> 11495 bytes
 libtdegames/carddecks/cards-xskat-french/12.png    |  Bin 0 -> 11508 bytes
 libtdegames/carddecks/cards-xskat-french/13.png    |  Bin 0 -> 14544 bytes
 libtdegames/carddecks/cards-xskat-french/14.png    |  Bin 0 -> 13192 bytes
 libtdegames/carddecks/cards-xskat-french/15.png    |  Bin 0 -> 12722 bytes
 libtdegames/carddecks/cards-xskat-french/16.png    |  Bin 0 -> 12880 bytes
 libtdegames/carddecks/cards-xskat-french/17.png    |  Bin 0 -> 5891 bytes
 libtdegames/carddecks/cards-xskat-french/18.png    |  Bin 0 -> 4439 bytes
 libtdegames/carddecks/cards-xskat-french/19.png    |  Bin 0 -> 3308 bytes
 libtdegames/carddecks/cards-xskat-french/2.png     |  Bin 0 -> 2244 bytes
 libtdegames/carddecks/cards-xskat-french/20.png    |  Bin 0 -> 3016 bytes
 libtdegames/carddecks/cards-xskat-french/21.png    |  Bin 0 -> 5372 bytes
 libtdegames/carddecks/cards-xskat-french/22.png    |  Bin 0 -> 4037 bytes
 libtdegames/carddecks/cards-xskat-french/23.png    |  Bin 0 -> 3080 bytes
 libtdegames/carddecks/cards-xskat-french/24.png    |  Bin 0 -> 2786 bytes
 libtdegames/carddecks/cards-xskat-french/25.png    |  Bin 0 -> 5005 bytes
 libtdegames/carddecks/cards-xskat-french/26.png    |  Bin 0 -> 3925 bytes
 libtdegames/carddecks/cards-xskat-french/27.png    |  Bin 0 -> 2879 bytes
 libtdegames/carddecks/cards-xskat-french/28.png    |  Bin 0 -> 2777 bytes
 libtdegames/carddecks/cards-xskat-french/29.png    |  Bin 0 -> 4537 bytes
 libtdegames/carddecks/cards-xskat-french/3.png     |  Bin 0 -> 1928 bytes
 libtdegames/carddecks/cards-xskat-french/30.png    |  Bin 0 -> 3505 bytes
 libtdegames/carddecks/cards-xskat-french/31.png    |  Bin 0 -> 2647 bytes
 libtdegames/carddecks/cards-xskat-french/32.png    |  Bin 0 -> 2538 bytes
 libtdegames/carddecks/cards-xskat-french/33.png    |  Bin 0 -> 4139 bytes
 libtdegames/carddecks/cards-xskat-french/34.png    |  Bin 0 -> 3287 bytes
 libtdegames/carddecks/cards-xskat-french/35.png    |  Bin 0 -> 2402 bytes
 libtdegames/carddecks/cards-xskat-french/36.png    |  Bin 0 -> 2227 bytes
 libtdegames/carddecks/cards-xskat-french/37.png    |  Bin 0 -> 4228 bytes
 libtdegames/carddecks/cards-xskat-french/38.png    |  Bin 0 -> 3234 bytes
 libtdegames/carddecks/cards-xskat-french/39.png    |  Bin 0 -> 2528 bytes
 libtdegames/carddecks/cards-xskat-french/4.png     |  Bin 0 -> 1881 bytes
 libtdegames/carddecks/cards-xskat-french/40.png    |  Bin 0 -> 2437 bytes
 libtdegames/carddecks/cards-xskat-french/41.png    |  Bin 0 -> 3653 bytes
 libtdegames/carddecks/cards-xskat-french/42.png    |  Bin 0 -> 2841 bytes
 libtdegames/carddecks/cards-xskat-french/43.png    |  Bin 0 -> 2227 bytes
 libtdegames/carddecks/cards-xskat-french/44.png    |  Bin 0 -> 2123 bytes
 libtdegames/carddecks/cards-xskat-french/45.png    |  Bin 0 -> 3384 bytes
 libtdegames/carddecks/cards-xskat-french/46.png    |  Bin 0 -> 2888 bytes
 libtdegames/carddecks/cards-xskat-french/47.png    |  Bin 0 -> 2382 bytes
 libtdegames/carddecks/cards-xskat-french/48.png    |  Bin 0 -> 2295 bytes
 libtdegames/carddecks/cards-xskat-french/49.png    |  Bin 0 -> 2894 bytes
 libtdegames/carddecks/cards-xskat-french/5.png     |  Bin 0 -> 14410 bytes
 libtdegames/carddecks/cards-xskat-french/50.png    |  Bin 0 -> 2411 bytes
 libtdegames/carddecks/cards-xskat-french/51.png    |  Bin 0 -> 2159 bytes
 libtdegames/carddecks/cards-xskat-french/52.png    |  Bin 0 -> 2043 bytes
 libtdegames/carddecks/cards-xskat-french/6.png     |  Bin 0 -> 13796 bytes
 libtdegames/carddecks/cards-xskat-french/7.png     |  Bin 0 -> 13434 bytes
 libtdegames/carddecks/cards-xskat-french/8.png     |  Bin 0 -> 13344 bytes
 libtdegames/carddecks/cards-xskat-french/9.png     |  Bin 0 -> 12558 bytes
 libtdegames/carddecks/cards-xskat-french/COPYRIGHT |    8 +
 .../carddecks/cards-xskat-french/index.desktop     |   55 +
 libtdegames/carddecks/cards-xskat-german/1.png     |  Bin 0 -> 3915 bytes
 libtdegames/carddecks/cards-xskat-german/10.png    |  Bin 0 -> 10814 bytes
 libtdegames/carddecks/cards-xskat-german/11.png    |  Bin 0 -> 10506 bytes
 libtdegames/carddecks/cards-xskat-german/12.png    |  Bin 0 -> 11304 bytes
 libtdegames/carddecks/cards-xskat-german/13.png    |  Bin 0 -> 12477 bytes
 libtdegames/carddecks/cards-xskat-german/14.png    |  Bin 0 -> 12487 bytes
 libtdegames/carddecks/cards-xskat-german/15.png    |  Bin 0 -> 12450 bytes
 libtdegames/carddecks/cards-xskat-german/16.png    |  Bin 0 -> 12614 bytes
 libtdegames/carddecks/cards-xskat-german/17.png    |  Bin 0 -> 7191 bytes
 libtdegames/carddecks/cards-xskat-german/18.png    |  Bin 0 -> 7804 bytes
 libtdegames/carddecks/cards-xskat-german/19.png    |  Bin 0 -> 6331 bytes
 libtdegames/carddecks/cards-xskat-german/2.png     |  Bin 0 -> 3618 bytes
 libtdegames/carddecks/cards-xskat-german/20.png    |  Bin 0 -> 7794 bytes
 libtdegames/carddecks/cards-xskat-german/21.png    |  Bin 0 -> 6694 bytes
 libtdegames/carddecks/cards-xskat-german/22.png    |  Bin 0 -> 7311 bytes
 libtdegames/carddecks/cards-xskat-german/23.png    |  Bin 0 -> 5828 bytes
 libtdegames/carddecks/cards-xskat-german/24.png    |  Bin 0 -> 7572 bytes
 libtdegames/carddecks/cards-xskat-german/25.png    |  Bin 0 -> 6612 bytes
 libtdegames/carddecks/cards-xskat-german/26.png    |  Bin 0 -> 7207 bytes
 libtdegames/carddecks/cards-xskat-german/27.png    |  Bin 0 -> 5627 bytes
 libtdegames/carddecks/cards-xskat-german/28.png    |  Bin 0 -> 6886 bytes
 libtdegames/carddecks/cards-xskat-german/29.png    |  Bin 0 -> 6141 bytes
 libtdegames/carddecks/cards-xskat-german/3.png     |  Bin 0 -> 3816 bytes
 libtdegames/carddecks/cards-xskat-german/30.png    |  Bin 0 -> 6695 bytes
 libtdegames/carddecks/cards-xskat-german/31.png    |  Bin 0 -> 5139 bytes
 libtdegames/carddecks/cards-xskat-german/32.png    |  Bin 0 -> 6181 bytes
 libtdegames/carddecks/cards-xskat-german/33.png    |  Bin 0 -> 5857 bytes
 libtdegames/carddecks/cards-xskat-german/34.png    |  Bin 0 -> 6473 bytes
 libtdegames/carddecks/cards-xskat-german/35.png    |  Bin 0 -> 4789 bytes
 libtdegames/carddecks/cards-xskat-german/36.png    |  Bin 0 -> 5734 bytes
 libtdegames/carddecks/cards-xskat-german/37.png    |  Bin 0 -> 5485 bytes
 libtdegames/carddecks/cards-xskat-german/38.png    |  Bin 0 -> 6006 bytes
 libtdegames/carddecks/cards-xskat-german/39.png    |  Bin 0 -> 4422 bytes
 libtdegames/carddecks/cards-xskat-german/4.png     |  Bin 0 -> 3891 bytes
 libtdegames/carddecks/cards-xskat-german/40.png    |  Bin 0 -> 5223 bytes
 libtdegames/carddecks/cards-xskat-german/41.png    |  Bin 0 -> 5148 bytes
 libtdegames/carddecks/cards-xskat-german/42.png    |  Bin 0 -> 5651 bytes
 libtdegames/carddecks/cards-xskat-german/43.png    |  Bin 0 -> 3821 bytes
 libtdegames/carddecks/cards-xskat-german/44.png    |  Bin 0 -> 4167 bytes
 libtdegames/carddecks/cards-xskat-german/45.png    |  Bin 0 -> 4642 bytes
 libtdegames/carddecks/cards-xskat-german/46.png    |  Bin 0 -> 5223 bytes
 libtdegames/carddecks/cards-xskat-german/47.png    |  Bin 0 -> 3355 bytes
 libtdegames/carddecks/cards-xskat-german/48.png    |  Bin 0 -> 3761 bytes
 libtdegames/carddecks/cards-xskat-german/49.png    |  Bin 0 -> 4505 bytes
 libtdegames/carddecks/cards-xskat-german/5.png     |  Bin 0 -> 13831 bytes
 libtdegames/carddecks/cards-xskat-german/50.png    |  Bin 0 -> 4802 bytes
 libtdegames/carddecks/cards-xskat-german/51.png    |  Bin 0 -> 2589 bytes
 libtdegames/carddecks/cards-xskat-german/52.png    |  Bin 0 -> 2548 bytes
 libtdegames/carddecks/cards-xskat-german/6.png     |  Bin 0 -> 14126 bytes
 libtdegames/carddecks/cards-xskat-german/7.png     |  Bin 0 -> 13910 bytes
 libtdegames/carddecks/cards-xskat-german/8.png     |  Bin 0 -> 14673 bytes
 libtdegames/carddecks/cards-xskat-german/9.png     |  Bin 0 -> 10522 bytes
 libtdegames/carddecks/cards-xskat-german/COPYRIGHT |    8 +
 .../carddecks/cards-xskat-german/index.desktop     |   55 +
 libtdegames/carddecks/convertpysols                |   69 +
 libtdegames/carddecks/decks/deck0.desktop          |  113 ++
 libtdegames/carddecks/decks/deck0.png              |  Bin 0 -> 4918 bytes
 libtdegames/carddecks/decks/deck1.desktop          |   56 +
 libtdegames/carddecks/decks/deck1.png              |  Bin 0 -> 4941 bytes
 libtdegames/carddecks/decks/deck10.desktop         |   66 +
 libtdegames/carddecks/decks/deck10.png             |  Bin 0 -> 950 bytes
 libtdegames/carddecks/decks/deck11.desktop         |   66 +
 libtdegames/carddecks/decks/deck11.png             |  Bin 0 -> 950 bytes
 libtdegames/carddecks/decks/deck12.desktop         |   41 +
 libtdegames/carddecks/decks/deck12.png             |  Bin 0 -> 6389 bytes
 libtdegames/carddecks/decks/deck13.desktop         |   63 +
 libtdegames/carddecks/decks/deck13.png             |  Bin 0 -> 4296 bytes
 libtdegames/carddecks/decks/deck14.desktop         |   66 +
 libtdegames/carddecks/decks/deck14.png             |  Bin 0 -> 2776 bytes
 libtdegames/carddecks/decks/deck15.desktop         |   19 +
 libtdegames/carddecks/decks/deck15.png             |  Bin 0 -> 2627 bytes
 libtdegames/carddecks/decks/deck16.desktop         |   60 +
 libtdegames/carddecks/decks/deck16.png             |  Bin 0 -> 406 bytes
 libtdegames/carddecks/decks/deck17.desktop         |   65 +
 libtdegames/carddecks/decks/deck17.png             |  Bin 0 -> 277 bytes
 libtdegames/carddecks/decks/deck18.desktop         |   19 +
 libtdegames/carddecks/decks/deck18.png             |  Bin 0 -> 5217 bytes
 libtdegames/carddecks/decks/deck19.desktop         |   63 +
 libtdegames/carddecks/decks/deck19.png             |  Bin 0 -> 5602 bytes
 libtdegames/carddecks/decks/deck2.desktop          |   49 +
 libtdegames/carddecks/decks/deck2.png              |  Bin 0 -> 5416 bytes
 libtdegames/carddecks/decks/deck20.desktop         |   71 +
 libtdegames/carddecks/decks/deck20.png             |  Bin 0 -> 6011 bytes
 libtdegames/carddecks/decks/deck21.desktop         |   65 +
 libtdegames/carddecks/decks/deck21.png             |  Bin 0 -> 6333 bytes
 libtdegames/carddecks/decks/deck22.desktop         |   58 +
 libtdegames/carddecks/decks/deck22.png             |  Bin 0 -> 6192 bytes
 libtdegames/carddecks/decks/deck23.desktop         |   55 +
 libtdegames/carddecks/decks/deck23.png             |  Bin 0 -> 5964 bytes
 libtdegames/carddecks/decks/deck24.desktop         |   60 +
 libtdegames/carddecks/decks/deck24.png             |  Bin 0 -> 4885 bytes
 libtdegames/carddecks/decks/deck3.desktop          |   60 +
 libtdegames/carddecks/decks/deck3.png              |  Bin 0 -> 6162 bytes
 libtdegames/carddecks/decks/deck4.desktop          |   93 ++
 libtdegames/carddecks/decks/deck4.png              |  Bin 0 -> 6355 bytes
 libtdegames/carddecks/decks/deck5.desktop          |   67 +
 libtdegames/carddecks/decks/deck5.png              |  Bin 0 -> 4133 bytes
 libtdegames/carddecks/decks/deck6.desktop          |   66 +
 libtdegames/carddecks/decks/deck6.png              |  Bin 0 -> 4067 bytes
 libtdegames/carddecks/decks/deck7.desktop          |   67 +
 libtdegames/carddecks/decks/deck7.png              |  Bin 0 -> 3464 bytes
 libtdegames/carddecks/decks/deck8.desktop          |   67 +
 libtdegames/carddecks/decks/deck8.png              |  Bin 0 -> 3780 bytes
 libtdegames/carddecks/decks/deck9.desktop          |    7 +
 libtdegames/carddecks/decks/deck9.png              |  Bin 0 -> 1019 bytes
 libtdegames/configure.in.in                        |   49 +
 libtdegames/highscore/INSTALL                      |   12 +
 libtdegames/highscore/Makefile.am                  |   19 +
 libtdegames/highscore/kconfigrawbackend.cpp        |   62 +
 libtdegames/highscore/kconfigrawbackend.h          |   58 +
 libtdegames/highscore/kexthighscore.cpp            |  289 ++++
 libtdegames/highscore/kexthighscore.h              |  367 +++++
 libtdegames/highscore/kexthighscore_gui.cpp        |  552 ++++++++
 libtdegames/highscore/kexthighscore_gui.h          |  215 +++
 libtdegames/highscore/kexthighscore_internal.cpp   |  868 ++++++++++++
 libtdegames/highscore/kexthighscore_internal.h     |  277 ++++
 libtdegames/highscore/kexthighscore_item.cpp       |  312 +++++
 libtdegames/highscore/kexthighscore_item.h         |  317 +++++
 libtdegames/highscore/kexthighscore_tab.cpp        |  281 ++++
 libtdegames/highscore/kexthighscore_tab.h          |  121 ++
 libtdegames/highscore/kfilelock.cpp                |   88 ++
 libtdegames/highscore/kfilelock.h                  |   53 +
 libtdegames/highscore/khighscore.cpp               |  262 ++++
 libtdegames/highscore/khighscore.h                 |  312 +++++
 libtdegames/highscore/kscoredialog.cpp             |  411 ++++++
 libtdegames/highscore/kscoredialog.h               |  126 ++
 libtdegames/kcanvasrootpixmap.cpp                  |   39 +
 libtdegames/kcanvasrootpixmap.h                    |   62 +
 libtdegames/kcarddialog.cpp                        |  808 +++++++++++
 libtdegames/kcarddialog.h                          |  346 +++++
 libtdegames/kcarddialog.png                        |  Bin 0 -> 34451 bytes
 libtdegames/kchat.cpp                              |  115 ++
 libtdegames/kchat.h                                |  148 ++
 libtdegames/kchatbase.cpp                          |  530 +++++++
 libtdegames/kchatbase.h                            |  511 +++++++
 libtdegames/kchatdialog.cpp                        |  253 ++++
 libtdegames/kchatdialog.h                          |  120 ++
 libtdegames/kgame/COMPAT                           |   55 +
 libtdegames/kgame/DESIGN                           |  407 ++++++
 libtdegames/kgame/Makefile.am                      |   29 +
 libtdegames/kgame/README.LIB                       |   12 +
 libtdegames/kgame/TODO                             |   41 +
 libtdegames/kgame/dialogs/Makefile.am              |   17 +
 libtdegames/kgame/dialogs/kgameconnectdialog.cpp   |  278 ++++
 libtdegames/kgame/dialogs/kgameconnectdialog.h     |  171 +++
 libtdegames/kgame/dialogs/kgamedebugdialog.cpp     |  548 ++++++++
 libtdegames/kgame/dialogs/kgamedebugdialog.h       |  150 ++
 libtdegames/kgame/dialogs/kgamedialog.cpp          |  347 +++++
 libtdegames/kgame/dialogs/kgamedialog.h            |  321 +++++
 libtdegames/kgame/dialogs/kgamedialogconfig.cpp    |  773 ++++++++++
 libtdegames/kgame/dialogs/kgamedialogconfig.h      |  368 +++++
 libtdegames/kgame/dialogs/kgameerrordialog.cpp     |  129 ++
 libtdegames/kgame/dialogs/kgameerrordialog.h       |  115 ++
 libtdegames/kgame/kgame.cpp                        | 1475 ++++++++++++++++++++
 libtdegames/kgame/kgame.h                          |  933 +++++++++++++
 libtdegames/kgame/kgamechat.cpp                    |  341 +++++
 libtdegames/kgame/kgamechat.h                      |  224 +++
 libtdegames/kgame/kgameerror.cpp                   |   80 ++
 libtdegames/kgame/kgameerror.h                     |   59 +
 libtdegames/kgame/kgameio.cpp                      |  539 +++++++
 libtdegames/kgame/kgameio.h                        |  571 ++++++++
 libtdegames/kgame/kgamemessage.cpp                 |  156 +++
 libtdegames/kgame/kgamemessage.h                   |  173 +++
 libtdegames/kgame/kgamenetwork.cpp                 |  516 +++++++
 libtdegames/kgame/kgamenetwork.h                   |  432 ++++++
 libtdegames/kgame/kgameprocess.cpp                 |  158 +++
 libtdegames/kgame/kgameprocess.h                   |  243 ++++
 libtdegames/kgame/kgameproperty.cpp                |  211 +++
 libtdegames/kgame/kgameproperty.h                  |  848 +++++++++++
 libtdegames/kgame/kgamepropertyarray.h             |  309 ++++
 libtdegames/kgame/kgamepropertyhandler.cpp         |  407 ++++++
 libtdegames/kgame/kgamepropertyhandler.h           |  354 +++++
 libtdegames/kgame/kgamepropertylist.h              |  258 ++++
 libtdegames/kgame/kgamesequence.cpp                |  125 ++
 libtdegames/kgame/kgamesequence.h                  |   88 ++
 libtdegames/kgame/kgameversion.h                   |   54 +
 libtdegames/kgame/kmessageclient.cpp               |  373 +++++
 libtdegames/kgame/kmessageclient.h                 |  423 ++++++
 libtdegames/kgame/kmessageio.cpp                   |  482 +++++++
 libtdegames/kgame/kmessageio.h                     |  421 ++++++
 libtdegames/kgame/kmessageserver.cpp               |  515 +++++++
 libtdegames/kgame/kmessageserver.h                 |  494 +++++++
 libtdegames/kgame/kmessageserver.png               |  Bin 0 -> 7791 bytes
 libtdegames/kgame/kplayer.cpp                      |  446 ++++++
 libtdegames/kgame/kplayer.h                        |  472 +++++++
 libtdegames/kgame/libtdegames.html                 |  187 +++
 libtdegames/kgame/messages.txt                     |   93 ++
 libtdegames/kgame/scenario0.png                    |  Bin 0 -> 2413 bytes
 libtdegames/kgame/scenario1.png                    |  Bin 0 -> 8074 bytes
 libtdegames/kgame/scenario2.png                    |  Bin 0 -> 7398 bytes
 libtdegames/kgamelcd.cpp                           |  250 ++++
 libtdegames/kgamelcd.h                             |  252 ++++
 libtdegames/kgamemisc.cpp                          |   62 +
 libtdegames/kgamemisc.h                            |   45 +
 libtdegames/kgameprogress.cpp                      |  345 +++++
 libtdegames/kgameprogress.h                        |  256 ++++
 libtdegames/kgrid2d.h                              |  520 +++++++
 libtdegames/kstdgameaction.cpp                     |  209 +++
 libtdegames/kstdgameaction.h                       |  261 ++++
 libtdegames/pics/Makefile.am                       |    4 +
 libtdegames/pics/cr16-action-endturn.png           |  Bin 0 -> 364 bytes
 libtdegames/pics/cr16-action-highscore.png         |  Bin 0 -> 493 bytes
 libtdegames/pics/cr16-action-roll.png              |  Bin 0 -> 988 bytes
 libtdegames/pics/cr22-action-roll.png              |  Bin 0 -> 1284 bytes
 libtdegames/pics/cr32-action-endturn.png           |  Bin 0 -> 751 bytes
 libtdegames/pics/cr32-action-highscore.png         |  Bin 0 -> 2440 bytes
 libtdegames/pics/cr32-action-roll.png              |  Bin 0 -> 2235 bytes
 libtdegames/pics/star.png                          |  Bin 0 -> 1103 bytes
 tdegames.lsm                                       |   11 +
 1528 files changed, 28784 insertions(+), 28784 deletions(-)
 delete mode 100644 kdegames.lsm
 delete mode 100644 libkdegames/Makefile.am
 delete mode 100644 libkdegames/README
 delete mode 100644 libkdegames/TODO
 delete mode 100644 libkdegames/carddecks/Makefile.am
 delete mode 100644 libkdegames/carddecks/README
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/1.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/10.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/11.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/12.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/13.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/14.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/15.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/16.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/17.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/18.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/19.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/2.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/20.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/21.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/22.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/23.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/24.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/25.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/26.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/27.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/28.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/29.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/3.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/30.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/31.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/32.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/33.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/34.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/35.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/36.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/37.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/38.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/39.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/4.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/40.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/41.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/42.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/43.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/44.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/45.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/46.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/47.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/48.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/49.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/5.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/50.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/51.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/52.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/6.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/7.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/8.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/9.png
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-aisleriot/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-default/1.png
 delete mode 100644 libkdegames/carddecks/cards-default/10.png
 delete mode 100644 libkdegames/carddecks/cards-default/11.png
 delete mode 100644 libkdegames/carddecks/cards-default/12.png
 delete mode 100644 libkdegames/carddecks/cards-default/13.png
 delete mode 100644 libkdegames/carddecks/cards-default/14.png
 delete mode 100644 libkdegames/carddecks/cards-default/15.png
 delete mode 100644 libkdegames/carddecks/cards-default/16.png
 delete mode 100644 libkdegames/carddecks/cards-default/17.png
 delete mode 100644 libkdegames/carddecks/cards-default/18.png
 delete mode 100644 libkdegames/carddecks/cards-default/19.png
 delete mode 100644 libkdegames/carddecks/cards-default/2.png
 delete mode 100644 libkdegames/carddecks/cards-default/20.png
 delete mode 100644 libkdegames/carddecks/cards-default/21.png
 delete mode 100644 libkdegames/carddecks/cards-default/22.png
 delete mode 100644 libkdegames/carddecks/cards-default/23.png
 delete mode 100644 libkdegames/carddecks/cards-default/24.png
 delete mode 100644 libkdegames/carddecks/cards-default/25.png
 delete mode 100644 libkdegames/carddecks/cards-default/26.png
 delete mode 100644 libkdegames/carddecks/cards-default/27.png
 delete mode 100644 libkdegames/carddecks/cards-default/28.png
 delete mode 100644 libkdegames/carddecks/cards-default/29.png
 delete mode 100644 libkdegames/carddecks/cards-default/3.png
 delete mode 100644 libkdegames/carddecks/cards-default/30.png
 delete mode 100644 libkdegames/carddecks/cards-default/31.png
 delete mode 100644 libkdegames/carddecks/cards-default/32.png
 delete mode 100644 libkdegames/carddecks/cards-default/33.png
 delete mode 100644 libkdegames/carddecks/cards-default/34.png
 delete mode 100644 libkdegames/carddecks/cards-default/35.png
 delete mode 100644 libkdegames/carddecks/cards-default/36.png
 delete mode 100644 libkdegames/carddecks/cards-default/37.png
 delete mode 100644 libkdegames/carddecks/cards-default/38.png
 delete mode 100644 libkdegames/carddecks/cards-default/39.png
 delete mode 100644 libkdegames/carddecks/cards-default/4.png
 delete mode 100644 libkdegames/carddecks/cards-default/40.png
 delete mode 100644 libkdegames/carddecks/cards-default/41.png
 delete mode 100644 libkdegames/carddecks/cards-default/42.png
 delete mode 100644 libkdegames/carddecks/cards-default/43.png
 delete mode 100644 libkdegames/carddecks/cards-default/44.png
 delete mode 100644 libkdegames/carddecks/cards-default/45.png
 delete mode 100644 libkdegames/carddecks/cards-default/46.png
 delete mode 100644 libkdegames/carddecks/cards-default/47.png
 delete mode 100644 libkdegames/carddecks/cards-default/48.png
 delete mode 100644 libkdegames/carddecks/cards-default/49.png
 delete mode 100644 libkdegames/carddecks/cards-default/5.png
 delete mode 100644 libkdegames/carddecks/cards-default/50.png
 delete mode 100644 libkdegames/carddecks/cards-default/51.png
 delete mode 100644 libkdegames/carddecks/cards-default/52.png
 delete mode 100644 libkdegames/carddecks/cards-default/6.png
 delete mode 100644 libkdegames/carddecks/cards-default/7.png
 delete mode 100644 libkdegames/carddecks/cards-default/8.png
 delete mode 100644 libkdegames/carddecks/cards-default/9.png
 delete mode 100644 libkdegames/carddecks/cards-default/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/1.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/10.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/11.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/12.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/13.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/14.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/15.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/16.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/17.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/18.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/19.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/2.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/20.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/21.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/22.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/23.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/24.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/25.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/26.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/27.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/28.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/29.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/3.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/30.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/31.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/32.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/33.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/34.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/35.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/36.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/37.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/38.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/39.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/4.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/40.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/41.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/42.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/43.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/44.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/45.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/46.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/47.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/48.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/49.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/5.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/50.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/51.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/52.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/6.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/7.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/8.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/9.png
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-dondorf-whist-b/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/1.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/10.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/11.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/12.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/13.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/14.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/15.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/16.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/17.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/18.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/19.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/2.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/20.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/21.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/22.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/23.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/24.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/25.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/26.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/27.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/28.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/29.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/3.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/30.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/31.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/32.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/33.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/34.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/35.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/36.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/37.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/38.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/39.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/4.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/40.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/41.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/42.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/43.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/44.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/45.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/46.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/47.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/48.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/49.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/5.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/50.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/51.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/52.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/6.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/7.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/8.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/9.png
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-gdkcard-bonded/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/1.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/10.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/11.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/12.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/13.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/14.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/15.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/16.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/17.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/18.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/19.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/2.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/20.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/21.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/22.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/23.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/24.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/25.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/26.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/27.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/28.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/29.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/3.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/30.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/31.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/32.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/33.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/34.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/35.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/36.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/37.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/38.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/39.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/4.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/40.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/41.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/42.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/43.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/44.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/45.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/46.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/47.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/48.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/49.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/5.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/50.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/51.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/52.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/6.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/7.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/8.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/9.png
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-hard-a-port/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/1.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/10.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/11.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/12.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/13.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/14.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/15.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/16.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/17.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/18.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/19.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/2.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/20.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/21.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/22.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/23.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/24.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/25.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/26.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/27.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/28.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/29.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/3.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/30.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/31.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/32.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/33.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/34.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/35.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/36.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/37.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/38.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/39.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/4.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/40.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/41.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/42.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/43.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/44.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/45.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/46.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/47.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/48.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/49.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/5.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/50.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/51.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/52.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/6.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/7.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/8.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/9.png
 delete mode 100644 libkdegames/carddecks/cards-konqi-modern/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-penguins/1.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/10.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/11.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/12.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/13.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/14.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/15.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/16.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/17.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/18.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/19.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/2.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/20.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/21.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/22.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/23.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/24.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/25.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/26.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/27.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/28.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/29.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/3.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/30.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/31.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/32.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/33.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/34.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/35.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/36.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/37.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/38.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/39.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/4.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/40.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/41.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/42.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/43.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/44.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/45.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/46.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/47.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/48.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/49.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/5.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/50.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/51.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/52.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/6.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/7.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/8.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/9.png
 delete mode 100644 libkdegames/carddecks/cards-penguins/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-penguins/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-spaced/1.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/10.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/11.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/12.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/13.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/14.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/15.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/16.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/17.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/18.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/19.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/2.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/20.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/21.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/22.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/23.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/24.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/25.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/26.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/27.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/28.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/29.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/3.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/30.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/31.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/32.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/33.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/34.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/35.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/36.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/37.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/38.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/39.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/4.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/40.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/41.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/42.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/43.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/44.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/45.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/46.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/47.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/48.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/49.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/5.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/50.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/51.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/52.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/6.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/7.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/8.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/9.png
 delete mode 100644 libkdegames/carddecks/cards-spaced/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-spaced/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-warwick/0.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/1.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/10.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/105.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/106.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/107.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/108.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/109.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/11.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/110.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/111.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/112.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/113.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/114.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/115.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/116.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/12.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/13.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/14.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/15.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/16.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/17.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/18.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/19.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/2.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/20.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/21.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/22.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/23.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/24.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/25.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/26.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/27.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/28.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/29.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/3.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/30.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/31.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/32.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/33.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/34.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/35.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/36.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/37.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/38.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/39.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/4.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/40.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/41.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/42.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/43.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/44.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/45.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/46.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/47.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/48.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/49.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/5.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/50.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/51.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/52.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/6.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/7.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/8.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/9.png
 delete mode 100644 libkdegames/carddecks/cards-warwick/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/1.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/10.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/11.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/12.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/13.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/14.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/15.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/16.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/17.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/18.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/19.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/2.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/20.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/21.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/22.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/23.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/24.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/25.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/26.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/27.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/28.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/29.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/3.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/30.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/31.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/32.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/33.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/34.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/35.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/36.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/37.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/38.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/39.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/4.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/40.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/41.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/42.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/43.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/44.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/45.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/46.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/47.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/48.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/49.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/5.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/50.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/51.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/52.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/6.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/7.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/8.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/9.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-xskat-french/index.desktop
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/1.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/10.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/11.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/12.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/13.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/14.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/15.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/16.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/17.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/18.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/19.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/2.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/20.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/21.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/22.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/23.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/24.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/25.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/26.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/27.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/28.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/29.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/3.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/30.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/31.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/32.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/33.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/34.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/35.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/36.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/37.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/38.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/39.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/4.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/40.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/41.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/42.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/43.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/44.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/45.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/46.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/47.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/48.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/49.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/5.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/50.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/51.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/52.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/6.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/7.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/8.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/9.png
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/COPYRIGHT
 delete mode 100644 libkdegames/carddecks/cards-xskat-german/index.desktop
 delete mode 100755 libkdegames/carddecks/convertpysols
 delete mode 100644 libkdegames/carddecks/decks/deck0.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck0.png
 delete mode 100644 libkdegames/carddecks/decks/deck1.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck1.png
 delete mode 100644 libkdegames/carddecks/decks/deck10.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck10.png
 delete mode 100644 libkdegames/carddecks/decks/deck11.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck11.png
 delete mode 100644 libkdegames/carddecks/decks/deck12.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck12.png
 delete mode 100644 libkdegames/carddecks/decks/deck13.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck13.png
 delete mode 100644 libkdegames/carddecks/decks/deck14.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck14.png
 delete mode 100644 libkdegames/carddecks/decks/deck15.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck15.png
 delete mode 100644 libkdegames/carddecks/decks/deck16.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck16.png
 delete mode 100644 libkdegames/carddecks/decks/deck17.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck17.png
 delete mode 100644 libkdegames/carddecks/decks/deck18.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck18.png
 delete mode 100644 libkdegames/carddecks/decks/deck19.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck19.png
 delete mode 100644 libkdegames/carddecks/decks/deck2.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck2.png
 delete mode 100644 libkdegames/carddecks/decks/deck20.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck20.png
 delete mode 100644 libkdegames/carddecks/decks/deck21.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck21.png
 delete mode 100644 libkdegames/carddecks/decks/deck22.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck22.png
 delete mode 100644 libkdegames/carddecks/decks/deck23.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck23.png
 delete mode 100644 libkdegames/carddecks/decks/deck24.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck24.png
 delete mode 100644 libkdegames/carddecks/decks/deck3.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck3.png
 delete mode 100644 libkdegames/carddecks/decks/deck4.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck4.png
 delete mode 100644 libkdegames/carddecks/decks/deck5.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck5.png
 delete mode 100644 libkdegames/carddecks/decks/deck6.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck6.png
 delete mode 100644 libkdegames/carddecks/decks/deck7.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck7.png
 delete mode 100644 libkdegames/carddecks/decks/deck8.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck8.png
 delete mode 100644 libkdegames/carddecks/decks/deck9.desktop
 delete mode 100644 libkdegames/carddecks/decks/deck9.png
 delete mode 100644 libkdegames/configure.in.in
 delete mode 100644 libkdegames/highscore/INSTALL
 delete mode 100644 libkdegames/highscore/Makefile.am
 delete mode 100644 libkdegames/highscore/kconfigrawbackend.cpp
 delete mode 100644 libkdegames/highscore/kconfigrawbackend.h
 delete mode 100644 libkdegames/highscore/kexthighscore.cpp
 delete mode 100644 libkdegames/highscore/kexthighscore.h
 delete mode 100644 libkdegames/highscore/kexthighscore_gui.cpp
 delete mode 100644 libkdegames/highscore/kexthighscore_gui.h
 delete mode 100644 libkdegames/highscore/kexthighscore_internal.cpp
 delete mode 100644 libkdegames/highscore/kexthighscore_internal.h
 delete mode 100644 libkdegames/highscore/kexthighscore_item.cpp
 delete mode 100644 libkdegames/highscore/kexthighscore_item.h
 delete mode 100644 libkdegames/highscore/kexthighscore_tab.cpp
 delete mode 100644 libkdegames/highscore/kexthighscore_tab.h
 delete mode 100644 libkdegames/highscore/kfilelock.cpp
 delete mode 100644 libkdegames/highscore/kfilelock.h
 delete mode 100644 libkdegames/highscore/khighscore.cpp
 delete mode 100644 libkdegames/highscore/khighscore.h
 delete mode 100644 libkdegames/highscore/kscoredialog.cpp
 delete mode 100644 libkdegames/highscore/kscoredialog.h
 delete mode 100644 libkdegames/kcanvasrootpixmap.cpp
 delete mode 100644 libkdegames/kcanvasrootpixmap.h
 delete mode 100644 libkdegames/kcarddialog.cpp
 delete mode 100644 libkdegames/kcarddialog.h
 delete mode 100644 libkdegames/kcarddialog.png
 delete mode 100644 libkdegames/kchat.cpp
 delete mode 100644 libkdegames/kchat.h
 delete mode 100644 libkdegames/kchatbase.cpp
 delete mode 100644 libkdegames/kchatbase.h
 delete mode 100644 libkdegames/kchatdialog.cpp
 delete mode 100644 libkdegames/kchatdialog.h
 delete mode 100644 libkdegames/kgame/COMPAT
 delete mode 100644 libkdegames/kgame/DESIGN
 delete mode 100644 libkdegames/kgame/Makefile.am
 delete mode 100644 libkdegames/kgame/README.LIB
 delete mode 100644 libkdegames/kgame/TODO
 delete mode 100644 libkdegames/kgame/dialogs/Makefile.am
 delete mode 100644 libkdegames/kgame/dialogs/kgameconnectdialog.cpp
 delete mode 100644 libkdegames/kgame/dialogs/kgameconnectdialog.h
 delete mode 100644 libkdegames/kgame/dialogs/kgamedebugdialog.cpp
 delete mode 100644 libkdegames/kgame/dialogs/kgamedebugdialog.h
 delete mode 100644 libkdegames/kgame/dialogs/kgamedialog.cpp
 delete mode 100644 libkdegames/kgame/dialogs/kgamedialog.h
 delete mode 100644 libkdegames/kgame/dialogs/kgamedialogconfig.cpp
 delete mode 100644 libkdegames/kgame/dialogs/kgamedialogconfig.h
 delete mode 100644 libkdegames/kgame/dialogs/kgameerrordialog.cpp
 delete mode 100644 libkdegames/kgame/dialogs/kgameerrordialog.h
 delete mode 100644 libkdegames/kgame/kgame.cpp
 delete mode 100644 libkdegames/kgame/kgame.h
 delete mode 100644 libkdegames/kgame/kgamechat.cpp
 delete mode 100644 libkdegames/kgame/kgamechat.h
 delete mode 100644 libkdegames/kgame/kgameerror.cpp
 delete mode 100644 libkdegames/kgame/kgameerror.h
 delete mode 100644 libkdegames/kgame/kgameio.cpp
 delete mode 100644 libkdegames/kgame/kgameio.h
 delete mode 100644 libkdegames/kgame/kgamemessage.cpp
 delete mode 100644 libkdegames/kgame/kgamemessage.h
 delete mode 100644 libkdegames/kgame/kgamenetwork.cpp
 delete mode 100644 libkdegames/kgame/kgamenetwork.h
 delete mode 100644 libkdegames/kgame/kgameprocess.cpp
 delete mode 100644 libkdegames/kgame/kgameprocess.h
 delete mode 100644 libkdegames/kgame/kgameproperty.cpp
 delete mode 100644 libkdegames/kgame/kgameproperty.h
 delete mode 100644 libkdegames/kgame/kgamepropertyarray.h
 delete mode 100644 libkdegames/kgame/kgamepropertyhandler.cpp
 delete mode 100644 libkdegames/kgame/kgamepropertyhandler.h
 delete mode 100644 libkdegames/kgame/kgamepropertylist.h
 delete mode 100644 libkdegames/kgame/kgamesequence.cpp
 delete mode 100644 libkdegames/kgame/kgamesequence.h
 delete mode 100644 libkdegames/kgame/kgameversion.h
 delete mode 100644 libkdegames/kgame/kmessageclient.cpp
 delete mode 100644 libkdegames/kgame/kmessageclient.h
 delete mode 100644 libkdegames/kgame/kmessageio.cpp
 delete mode 100644 libkdegames/kgame/kmessageio.h
 delete mode 100644 libkdegames/kgame/kmessageserver.cpp
 delete mode 100644 libkdegames/kgame/kmessageserver.h
 delete mode 100644 libkdegames/kgame/kmessageserver.png
 delete mode 100644 libkdegames/kgame/kplayer.cpp
 delete mode 100644 libkdegames/kgame/kplayer.h
 delete mode 100644 libkdegames/kgame/libkdegames.html
 delete mode 100644 libkdegames/kgame/messages.txt
 delete mode 100644 libkdegames/kgame/scenario0.png
 delete mode 100644 libkdegames/kgame/scenario1.png
 delete mode 100644 libkdegames/kgame/scenario2.png
 delete mode 100644 libkdegames/kgamelcd.cpp
 delete mode 100644 libkdegames/kgamelcd.h
 delete mode 100644 libkdegames/kgamemisc.cpp
 delete mode 100644 libkdegames/kgamemisc.h
 delete mode 100644 libkdegames/kgameprogress.cpp
 delete mode 100644 libkdegames/kgameprogress.h
 delete mode 100644 libkdegames/kgrid2d.h
 delete mode 100644 libkdegames/kstdgameaction.cpp
 delete mode 100644 libkdegames/kstdgameaction.h
 delete mode 100644 libkdegames/pics/Makefile.am
 delete mode 100644 libkdegames/pics/cr16-action-endturn.png
 delete mode 100644 libkdegames/pics/cr16-action-highscore.png
 delete mode 100644 libkdegames/pics/cr16-action-roll.png
 delete mode 100644 libkdegames/pics/cr22-action-roll.png
 delete mode 100644 libkdegames/pics/cr32-action-endturn.png
 delete mode 100644 libkdegames/pics/cr32-action-highscore.png
 delete mode 100644 libkdegames/pics/cr32-action-roll.png
 delete mode 100644 libkdegames/pics/star.png
 create mode 100644 libtdegames/Makefile.am
 create mode 100644 libtdegames/README
 create mode 100644 libtdegames/TODO
 create mode 100644 libtdegames/carddecks/Makefile.am
 create mode 100644 libtdegames/carddecks/README
 create mode 100644 libtdegames/carddecks/cards-aisleriot/1.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/10.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/11.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/12.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/13.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/14.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/15.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/16.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/17.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/18.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/19.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/2.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/20.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/21.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/22.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/23.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/24.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/25.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/26.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/27.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/28.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/29.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/3.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/30.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/31.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/32.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/33.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/34.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/35.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/36.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/37.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/38.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/39.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/4.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/40.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/41.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/42.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/43.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/44.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/45.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/46.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/47.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/48.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/49.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/5.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/50.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/51.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/52.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/6.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/7.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/8.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/9.png
 create mode 100644 libtdegames/carddecks/cards-aisleriot/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-aisleriot/index.desktop
 create mode 100644 libtdegames/carddecks/cards-default/1.png
 create mode 100644 libtdegames/carddecks/cards-default/10.png
 create mode 100644 libtdegames/carddecks/cards-default/11.png
 create mode 100644 libtdegames/carddecks/cards-default/12.png
 create mode 100644 libtdegames/carddecks/cards-default/13.png
 create mode 100644 libtdegames/carddecks/cards-default/14.png
 create mode 100644 libtdegames/carddecks/cards-default/15.png
 create mode 100644 libtdegames/carddecks/cards-default/16.png
 create mode 100644 libtdegames/carddecks/cards-default/17.png
 create mode 100644 libtdegames/carddecks/cards-default/18.png
 create mode 100644 libtdegames/carddecks/cards-default/19.png
 create mode 100644 libtdegames/carddecks/cards-default/2.png
 create mode 100644 libtdegames/carddecks/cards-default/20.png
 create mode 100644 libtdegames/carddecks/cards-default/21.png
 create mode 100644 libtdegames/carddecks/cards-default/22.png
 create mode 100644 libtdegames/carddecks/cards-default/23.png
 create mode 100644 libtdegames/carddecks/cards-default/24.png
 create mode 100644 libtdegames/carddecks/cards-default/25.png
 create mode 100644 libtdegames/carddecks/cards-default/26.png
 create mode 100644 libtdegames/carddecks/cards-default/27.png
 create mode 100644 libtdegames/carddecks/cards-default/28.png
 create mode 100644 libtdegames/carddecks/cards-default/29.png
 create mode 100644 libtdegames/carddecks/cards-default/3.png
 create mode 100644 libtdegames/carddecks/cards-default/30.png
 create mode 100644 libtdegames/carddecks/cards-default/31.png
 create mode 100644 libtdegames/carddecks/cards-default/32.png
 create mode 100644 libtdegames/carddecks/cards-default/33.png
 create mode 100644 libtdegames/carddecks/cards-default/34.png
 create mode 100644 libtdegames/carddecks/cards-default/35.png
 create mode 100644 libtdegames/carddecks/cards-default/36.png
 create mode 100644 libtdegames/carddecks/cards-default/37.png
 create mode 100644 libtdegames/carddecks/cards-default/38.png
 create mode 100644 libtdegames/carddecks/cards-default/39.png
 create mode 100644 libtdegames/carddecks/cards-default/4.png
 create mode 100644 libtdegames/carddecks/cards-default/40.png
 create mode 100644 libtdegames/carddecks/cards-default/41.png
 create mode 100644 libtdegames/carddecks/cards-default/42.png
 create mode 100644 libtdegames/carddecks/cards-default/43.png
 create mode 100644 libtdegames/carddecks/cards-default/44.png
 create mode 100644 libtdegames/carddecks/cards-default/45.png
 create mode 100644 libtdegames/carddecks/cards-default/46.png
 create mode 100644 libtdegames/carddecks/cards-default/47.png
 create mode 100644 libtdegames/carddecks/cards-default/48.png
 create mode 100644 libtdegames/carddecks/cards-default/49.png
 create mode 100644 libtdegames/carddecks/cards-default/5.png
 create mode 100644 libtdegames/carddecks/cards-default/50.png
 create mode 100644 libtdegames/carddecks/cards-default/51.png
 create mode 100644 libtdegames/carddecks/cards-default/52.png
 create mode 100644 libtdegames/carddecks/cards-default/6.png
 create mode 100644 libtdegames/carddecks/cards-default/7.png
 create mode 100644 libtdegames/carddecks/cards-default/8.png
 create mode 100644 libtdegames/carddecks/cards-default/9.png
 create mode 100644 libtdegames/carddecks/cards-default/index.desktop
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/1.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/10.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/11.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/12.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/13.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/14.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/15.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/16.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/17.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/18.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/19.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/2.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/20.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/21.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/22.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/23.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/24.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/25.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/26.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/27.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/28.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/29.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/3.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/30.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/31.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/32.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/33.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/34.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/35.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/36.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/37.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/38.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/39.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/4.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/40.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/41.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/42.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/43.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/44.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/45.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/46.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/47.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/48.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/49.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/5.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/50.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/51.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/52.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/6.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/7.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/8.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/9.png
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-dondorf-whist-b/index.desktop
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/1.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/10.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/11.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/12.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/13.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/14.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/15.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/16.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/17.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/18.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/19.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/2.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/20.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/21.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/22.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/23.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/24.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/25.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/26.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/27.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/28.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/29.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/3.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/30.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/31.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/32.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/33.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/34.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/35.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/36.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/37.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/38.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/39.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/4.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/40.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/41.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/42.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/43.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/44.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/45.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/46.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/47.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/48.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/49.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/5.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/50.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/51.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/52.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/6.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/7.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/8.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/9.png
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-gdkcard-bonded/index.desktop
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/1.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/10.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/11.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/12.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/13.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/14.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/15.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/16.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/17.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/18.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/19.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/2.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/20.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/21.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/22.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/23.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/24.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/25.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/26.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/27.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/28.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/29.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/3.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/30.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/31.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/32.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/33.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/34.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/35.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/36.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/37.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/38.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/39.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/4.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/40.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/41.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/42.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/43.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/44.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/45.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/46.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/47.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/48.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/49.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/5.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/50.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/51.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/52.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/6.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/7.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/8.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/9.png
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-hard-a-port/index.desktop
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/1.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/10.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/11.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/12.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/13.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/14.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/15.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/16.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/17.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/18.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/19.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/2.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/20.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/21.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/22.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/23.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/24.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/25.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/26.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/27.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/28.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/29.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/3.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/30.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/31.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/32.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/33.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/34.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/35.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/36.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/37.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/38.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/39.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/4.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/40.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/41.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/42.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/43.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/44.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/45.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/46.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/47.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/48.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/49.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/5.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/50.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/51.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/52.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/6.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/7.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/8.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/9.png
 create mode 100644 libtdegames/carddecks/cards-konqi-modern/index.desktop
 create mode 100644 libtdegames/carddecks/cards-penguins/1.png
 create mode 100644 libtdegames/carddecks/cards-penguins/10.png
 create mode 100644 libtdegames/carddecks/cards-penguins/11.png
 create mode 100644 libtdegames/carddecks/cards-penguins/12.png
 create mode 100644 libtdegames/carddecks/cards-penguins/13.png
 create mode 100644 libtdegames/carddecks/cards-penguins/14.png
 create mode 100644 libtdegames/carddecks/cards-penguins/15.png
 create mode 100644 libtdegames/carddecks/cards-penguins/16.png
 create mode 100644 libtdegames/carddecks/cards-penguins/17.png
 create mode 100644 libtdegames/carddecks/cards-penguins/18.png
 create mode 100644 libtdegames/carddecks/cards-penguins/19.png
 create mode 100644 libtdegames/carddecks/cards-penguins/2.png
 create mode 100644 libtdegames/carddecks/cards-penguins/20.png
 create mode 100644 libtdegames/carddecks/cards-penguins/21.png
 create mode 100644 libtdegames/carddecks/cards-penguins/22.png
 create mode 100644 libtdegames/carddecks/cards-penguins/23.png
 create mode 100644 libtdegames/carddecks/cards-penguins/24.png
 create mode 100644 libtdegames/carddecks/cards-penguins/25.png
 create mode 100644 libtdegames/carddecks/cards-penguins/26.png
 create mode 100644 libtdegames/carddecks/cards-penguins/27.png
 create mode 100644 libtdegames/carddecks/cards-penguins/28.png
 create mode 100644 libtdegames/carddecks/cards-penguins/29.png
 create mode 100644 libtdegames/carddecks/cards-penguins/3.png
 create mode 100644 libtdegames/carddecks/cards-penguins/30.png
 create mode 100644 libtdegames/carddecks/cards-penguins/31.png
 create mode 100644 libtdegames/carddecks/cards-penguins/32.png
 create mode 100644 libtdegames/carddecks/cards-penguins/33.png
 create mode 100644 libtdegames/carddecks/cards-penguins/34.png
 create mode 100644 libtdegames/carddecks/cards-penguins/35.png
 create mode 100644 libtdegames/carddecks/cards-penguins/36.png
 create mode 100644 libtdegames/carddecks/cards-penguins/37.png
 create mode 100644 libtdegames/carddecks/cards-penguins/38.png
 create mode 100644 libtdegames/carddecks/cards-penguins/39.png
 create mode 100644 libtdegames/carddecks/cards-penguins/4.png
 create mode 100644 libtdegames/carddecks/cards-penguins/40.png
 create mode 100644 libtdegames/carddecks/cards-penguins/41.png
 create mode 100644 libtdegames/carddecks/cards-penguins/42.png
 create mode 100644 libtdegames/carddecks/cards-penguins/43.png
 create mode 100644 libtdegames/carddecks/cards-penguins/44.png
 create mode 100644 libtdegames/carddecks/cards-penguins/45.png
 create mode 100644 libtdegames/carddecks/cards-penguins/46.png
 create mode 100644 libtdegames/carddecks/cards-penguins/47.png
 create mode 100644 libtdegames/carddecks/cards-penguins/48.png
 create mode 100644 libtdegames/carddecks/cards-penguins/49.png
 create mode 100644 libtdegames/carddecks/cards-penguins/5.png
 create mode 100644 libtdegames/carddecks/cards-penguins/50.png
 create mode 100644 libtdegames/carddecks/cards-penguins/51.png
 create mode 100644 libtdegames/carddecks/cards-penguins/52.png
 create mode 100644 libtdegames/carddecks/cards-penguins/6.png
 create mode 100644 libtdegames/carddecks/cards-penguins/7.png
 create mode 100644 libtdegames/carddecks/cards-penguins/8.png
 create mode 100644 libtdegames/carddecks/cards-penguins/9.png
 create mode 100644 libtdegames/carddecks/cards-penguins/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-penguins/index.desktop
 create mode 100644 libtdegames/carddecks/cards-spaced/1.png
 create mode 100644 libtdegames/carddecks/cards-spaced/10.png
 create mode 100644 libtdegames/carddecks/cards-spaced/11.png
 create mode 100644 libtdegames/carddecks/cards-spaced/12.png
 create mode 100644 libtdegames/carddecks/cards-spaced/13.png
 create mode 100644 libtdegames/carddecks/cards-spaced/14.png
 create mode 100644 libtdegames/carddecks/cards-spaced/15.png
 create mode 100644 libtdegames/carddecks/cards-spaced/16.png
 create mode 100644 libtdegames/carddecks/cards-spaced/17.png
 create mode 100644 libtdegames/carddecks/cards-spaced/18.png
 create mode 100644 libtdegames/carddecks/cards-spaced/19.png
 create mode 100644 libtdegames/carddecks/cards-spaced/2.png
 create mode 100644 libtdegames/carddecks/cards-spaced/20.png
 create mode 100644 libtdegames/carddecks/cards-spaced/21.png
 create mode 100644 libtdegames/carddecks/cards-spaced/22.png
 create mode 100644 libtdegames/carddecks/cards-spaced/23.png
 create mode 100644 libtdegames/carddecks/cards-spaced/24.png
 create mode 100644 libtdegames/carddecks/cards-spaced/25.png
 create mode 100644 libtdegames/carddecks/cards-spaced/26.png
 create mode 100644 libtdegames/carddecks/cards-spaced/27.png
 create mode 100644 libtdegames/carddecks/cards-spaced/28.png
 create mode 100644 libtdegames/carddecks/cards-spaced/29.png
 create mode 100644 libtdegames/carddecks/cards-spaced/3.png
 create mode 100644 libtdegames/carddecks/cards-spaced/30.png
 create mode 100644 libtdegames/carddecks/cards-spaced/31.png
 create mode 100644 libtdegames/carddecks/cards-spaced/32.png
 create mode 100644 libtdegames/carddecks/cards-spaced/33.png
 create mode 100644 libtdegames/carddecks/cards-spaced/34.png
 create mode 100644 libtdegames/carddecks/cards-spaced/35.png
 create mode 100644 libtdegames/carddecks/cards-spaced/36.png
 create mode 100644 libtdegames/carddecks/cards-spaced/37.png
 create mode 100644 libtdegames/carddecks/cards-spaced/38.png
 create mode 100644 libtdegames/carddecks/cards-spaced/39.png
 create mode 100644 libtdegames/carddecks/cards-spaced/4.png
 create mode 100644 libtdegames/carddecks/cards-spaced/40.png
 create mode 100644 libtdegames/carddecks/cards-spaced/41.png
 create mode 100644 libtdegames/carddecks/cards-spaced/42.png
 create mode 100644 libtdegames/carddecks/cards-spaced/43.png
 create mode 100644 libtdegames/carddecks/cards-spaced/44.png
 create mode 100644 libtdegames/carddecks/cards-spaced/45.png
 create mode 100644 libtdegames/carddecks/cards-spaced/46.png
 create mode 100644 libtdegames/carddecks/cards-spaced/47.png
 create mode 100644 libtdegames/carddecks/cards-spaced/48.png
 create mode 100644 libtdegames/carddecks/cards-spaced/49.png
 create mode 100644 libtdegames/carddecks/cards-spaced/5.png
 create mode 100644 libtdegames/carddecks/cards-spaced/50.png
 create mode 100644 libtdegames/carddecks/cards-spaced/51.png
 create mode 100644 libtdegames/carddecks/cards-spaced/52.png
 create mode 100644 libtdegames/carddecks/cards-spaced/6.png
 create mode 100644 libtdegames/carddecks/cards-spaced/7.png
 create mode 100644 libtdegames/carddecks/cards-spaced/8.png
 create mode 100644 libtdegames/carddecks/cards-spaced/9.png
 create mode 100644 libtdegames/carddecks/cards-spaced/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-spaced/index.desktop
 create mode 100644 libtdegames/carddecks/cards-warwick/0.png
 create mode 100644 libtdegames/carddecks/cards-warwick/1.png
 create mode 100644 libtdegames/carddecks/cards-warwick/10.png
 create mode 100644 libtdegames/carddecks/cards-warwick/105.png
 create mode 100644 libtdegames/carddecks/cards-warwick/106.png
 create mode 100644 libtdegames/carddecks/cards-warwick/107.png
 create mode 100644 libtdegames/carddecks/cards-warwick/108.png
 create mode 100644 libtdegames/carddecks/cards-warwick/109.png
 create mode 100644 libtdegames/carddecks/cards-warwick/11.png
 create mode 100644 libtdegames/carddecks/cards-warwick/110.png
 create mode 100644 libtdegames/carddecks/cards-warwick/111.png
 create mode 100644 libtdegames/carddecks/cards-warwick/112.png
 create mode 100644 libtdegames/carddecks/cards-warwick/113.png
 create mode 100644 libtdegames/carddecks/cards-warwick/114.png
 create mode 100644 libtdegames/carddecks/cards-warwick/115.png
 create mode 100644 libtdegames/carddecks/cards-warwick/116.png
 create mode 100644 libtdegames/carddecks/cards-warwick/12.png
 create mode 100644 libtdegames/carddecks/cards-warwick/13.png
 create mode 100644 libtdegames/carddecks/cards-warwick/14.png
 create mode 100644 libtdegames/carddecks/cards-warwick/15.png
 create mode 100644 libtdegames/carddecks/cards-warwick/16.png
 create mode 100644 libtdegames/carddecks/cards-warwick/17.png
 create mode 100644 libtdegames/carddecks/cards-warwick/18.png
 create mode 100644 libtdegames/carddecks/cards-warwick/19.png
 create mode 100644 libtdegames/carddecks/cards-warwick/2.png
 create mode 100644 libtdegames/carddecks/cards-warwick/20.png
 create mode 100644 libtdegames/carddecks/cards-warwick/21.png
 create mode 100644 libtdegames/carddecks/cards-warwick/22.png
 create mode 100644 libtdegames/carddecks/cards-warwick/23.png
 create mode 100644 libtdegames/carddecks/cards-warwick/24.png
 create mode 100644 libtdegames/carddecks/cards-warwick/25.png
 create mode 100644 libtdegames/carddecks/cards-warwick/26.png
 create mode 100644 libtdegames/carddecks/cards-warwick/27.png
 create mode 100644 libtdegames/carddecks/cards-warwick/28.png
 create mode 100644 libtdegames/carddecks/cards-warwick/29.png
 create mode 100644 libtdegames/carddecks/cards-warwick/3.png
 create mode 100644 libtdegames/carddecks/cards-warwick/30.png
 create mode 100644 libtdegames/carddecks/cards-warwick/31.png
 create mode 100644 libtdegames/carddecks/cards-warwick/32.png
 create mode 100644 libtdegames/carddecks/cards-warwick/33.png
 create mode 100644 libtdegames/carddecks/cards-warwick/34.png
 create mode 100644 libtdegames/carddecks/cards-warwick/35.png
 create mode 100644 libtdegames/carddecks/cards-warwick/36.png
 create mode 100644 libtdegames/carddecks/cards-warwick/37.png
 create mode 100644 libtdegames/carddecks/cards-warwick/38.png
 create mode 100644 libtdegames/carddecks/cards-warwick/39.png
 create mode 100644 libtdegames/carddecks/cards-warwick/4.png
 create mode 100644 libtdegames/carddecks/cards-warwick/40.png
 create mode 100644 libtdegames/carddecks/cards-warwick/41.png
 create mode 100644 libtdegames/carddecks/cards-warwick/42.png
 create mode 100644 libtdegames/carddecks/cards-warwick/43.png
 create mode 100644 libtdegames/carddecks/cards-warwick/44.png
 create mode 100644 libtdegames/carddecks/cards-warwick/45.png
 create mode 100644 libtdegames/carddecks/cards-warwick/46.png
 create mode 100644 libtdegames/carddecks/cards-warwick/47.png
 create mode 100644 libtdegames/carddecks/cards-warwick/48.png
 create mode 100644 libtdegames/carddecks/cards-warwick/49.png
 create mode 100644 libtdegames/carddecks/cards-warwick/5.png
 create mode 100644 libtdegames/carddecks/cards-warwick/50.png
 create mode 100644 libtdegames/carddecks/cards-warwick/51.png
 create mode 100644 libtdegames/carddecks/cards-warwick/52.png
 create mode 100644 libtdegames/carddecks/cards-warwick/6.png
 create mode 100644 libtdegames/carddecks/cards-warwick/7.png
 create mode 100644 libtdegames/carddecks/cards-warwick/8.png
 create mode 100644 libtdegames/carddecks/cards-warwick/9.png
 create mode 100644 libtdegames/carddecks/cards-warwick/index.desktop
 create mode 100644 libtdegames/carddecks/cards-xskat-french/1.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/10.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/11.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/12.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/13.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/14.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/15.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/16.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/17.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/18.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/19.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/2.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/20.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/21.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/22.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/23.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/24.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/25.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/26.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/27.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/28.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/29.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/3.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/30.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/31.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/32.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/33.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/34.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/35.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/36.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/37.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/38.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/39.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/4.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/40.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/41.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/42.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/43.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/44.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/45.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/46.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/47.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/48.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/49.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/5.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/50.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/51.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/52.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/6.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/7.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/8.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/9.png
 create mode 100644 libtdegames/carddecks/cards-xskat-french/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-xskat-french/index.desktop
 create mode 100644 libtdegames/carddecks/cards-xskat-german/1.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/10.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/11.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/12.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/13.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/14.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/15.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/16.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/17.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/18.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/19.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/2.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/20.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/21.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/22.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/23.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/24.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/25.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/26.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/27.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/28.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/29.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/3.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/30.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/31.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/32.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/33.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/34.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/35.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/36.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/37.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/38.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/39.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/4.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/40.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/41.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/42.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/43.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/44.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/45.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/46.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/47.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/48.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/49.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/5.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/50.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/51.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/52.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/6.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/7.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/8.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/9.png
 create mode 100644 libtdegames/carddecks/cards-xskat-german/COPYRIGHT
 create mode 100644 libtdegames/carddecks/cards-xskat-german/index.desktop
 create mode 100755 libtdegames/carddecks/convertpysols
 create mode 100644 libtdegames/carddecks/decks/deck0.desktop
 create mode 100644 libtdegames/carddecks/decks/deck0.png
 create mode 100644 libtdegames/carddecks/decks/deck1.desktop
 create mode 100644 libtdegames/carddecks/decks/deck1.png
 create mode 100644 libtdegames/carddecks/decks/deck10.desktop
 create mode 100644 libtdegames/carddecks/decks/deck10.png
 create mode 100644 libtdegames/carddecks/decks/deck11.desktop
 create mode 100644 libtdegames/carddecks/decks/deck11.png
 create mode 100644 libtdegames/carddecks/decks/deck12.desktop
 create mode 100644 libtdegames/carddecks/decks/deck12.png
 create mode 100644 libtdegames/carddecks/decks/deck13.desktop
 create mode 100644 libtdegames/carddecks/decks/deck13.png
 create mode 100644 libtdegames/carddecks/decks/deck14.desktop
 create mode 100644 libtdegames/carddecks/decks/deck14.png
 create mode 100644 libtdegames/carddecks/decks/deck15.desktop
 create mode 100644 libtdegames/carddecks/decks/deck15.png
 create mode 100644 libtdegames/carddecks/decks/deck16.desktop
 create mode 100644 libtdegames/carddecks/decks/deck16.png
 create mode 100644 libtdegames/carddecks/decks/deck17.desktop
 create mode 100644 libtdegames/carddecks/decks/deck17.png
 create mode 100644 libtdegames/carddecks/decks/deck18.desktop
 create mode 100644 libtdegames/carddecks/decks/deck18.png
 create mode 100644 libtdegames/carddecks/decks/deck19.desktop
 create mode 100644 libtdegames/carddecks/decks/deck19.png
 create mode 100644 libtdegames/carddecks/decks/deck2.desktop
 create mode 100644 libtdegames/carddecks/decks/deck2.png
 create mode 100644 libtdegames/carddecks/decks/deck20.desktop
 create mode 100644 libtdegames/carddecks/decks/deck20.png
 create mode 100644 libtdegames/carddecks/decks/deck21.desktop
 create mode 100644 libtdegames/carddecks/decks/deck21.png
 create mode 100644 libtdegames/carddecks/decks/deck22.desktop
 create mode 100644 libtdegames/carddecks/decks/deck22.png
 create mode 100644 libtdegames/carddecks/decks/deck23.desktop
 create mode 100644 libtdegames/carddecks/decks/deck23.png
 create mode 100644 libtdegames/carddecks/decks/deck24.desktop
 create mode 100644 libtdegames/carddecks/decks/deck24.png
 create mode 100644 libtdegames/carddecks/decks/deck3.desktop
 create mode 100644 libtdegames/carddecks/decks/deck3.png
 create mode 100644 libtdegames/carddecks/decks/deck4.desktop
 create mode 100644 libtdegames/carddecks/decks/deck4.png
 create mode 100644 libtdegames/carddecks/decks/deck5.desktop
 create mode 100644 libtdegames/carddecks/decks/deck5.png
 create mode 100644 libtdegames/carddecks/decks/deck6.desktop
 create mode 100644 libtdegames/carddecks/decks/deck6.png
 create mode 100644 libtdegames/carddecks/decks/deck7.desktop
 create mode 100644 libtdegames/carddecks/decks/deck7.png
 create mode 100644 libtdegames/carddecks/decks/deck8.desktop
 create mode 100644 libtdegames/carddecks/decks/deck8.png
 create mode 100644 libtdegames/carddecks/decks/deck9.desktop
 create mode 100644 libtdegames/carddecks/decks/deck9.png
 create mode 100644 libtdegames/configure.in.in
 create mode 100644 libtdegames/highscore/INSTALL
 create mode 100644 libtdegames/highscore/Makefile.am
 create mode 100644 libtdegames/highscore/kconfigrawbackend.cpp
 create mode 100644 libtdegames/highscore/kconfigrawbackend.h
 create mode 100644 libtdegames/highscore/kexthighscore.cpp
 create mode 100644 libtdegames/highscore/kexthighscore.h
 create mode 100644 libtdegames/highscore/kexthighscore_gui.cpp
 create mode 100644 libtdegames/highscore/kexthighscore_gui.h
 create mode 100644 libtdegames/highscore/kexthighscore_internal.cpp
 create mode 100644 libtdegames/highscore/kexthighscore_internal.h
 create mode 100644 libtdegames/highscore/kexthighscore_item.cpp
 create mode 100644 libtdegames/highscore/kexthighscore_item.h
 create mode 100644 libtdegames/highscore/kexthighscore_tab.cpp
 create mode 100644 libtdegames/highscore/kexthighscore_tab.h
 create mode 100644 libtdegames/highscore/kfilelock.cpp
 create mode 100644 libtdegames/highscore/kfilelock.h
 create mode 100644 libtdegames/highscore/khighscore.cpp
 create mode 100644 libtdegames/highscore/khighscore.h
 create mode 100644 libtdegames/highscore/kscoredialog.cpp
 create mode 100644 libtdegames/highscore/kscoredialog.h
 create mode 100644 libtdegames/kcanvasrootpixmap.cpp
 create mode 100644 libtdegames/kcanvasrootpixmap.h
 create mode 100644 libtdegames/kcarddialog.cpp
 create mode 100644 libtdegames/kcarddialog.h
 create mode 100644 libtdegames/kcarddialog.png
 create mode 100644 libtdegames/kchat.cpp
 create mode 100644 libtdegames/kchat.h
 create mode 100644 libtdegames/kchatbase.cpp
 create mode 100644 libtdegames/kchatbase.h
 create mode 100644 libtdegames/kchatdialog.cpp
 create mode 100644 libtdegames/kchatdialog.h
 create mode 100644 libtdegames/kgame/COMPAT
 create mode 100644 libtdegames/kgame/DESIGN
 create mode 100644 libtdegames/kgame/Makefile.am
 create mode 100644 libtdegames/kgame/README.LIB
 create mode 100644 libtdegames/kgame/TODO
 create mode 100644 libtdegames/kgame/dialogs/Makefile.am
 create mode 100644 libtdegames/kgame/dialogs/kgameconnectdialog.cpp
 create mode 100644 libtdegames/kgame/dialogs/kgameconnectdialog.h
 create mode 100644 libtdegames/kgame/dialogs/kgamedebugdialog.cpp
 create mode 100644 libtdegames/kgame/dialogs/kgamedebugdialog.h
 create mode 100644 libtdegames/kgame/dialogs/kgamedialog.cpp
 create mode 100644 libtdegames/kgame/dialogs/kgamedialog.h
 create mode 100644 libtdegames/kgame/dialogs/kgamedialogconfig.cpp
 create mode 100644 libtdegames/kgame/dialogs/kgamedialogconfig.h
 create mode 100644 libtdegames/kgame/dialogs/kgameerrordialog.cpp
 create mode 100644 libtdegames/kgame/dialogs/kgameerrordialog.h
 create mode 100644 libtdegames/kgame/kgame.cpp
 create mode 100644 libtdegames/kgame/kgame.h
 create mode 100644 libtdegames/kgame/kgamechat.cpp
 create mode 100644 libtdegames/kgame/kgamechat.h
 create mode 100644 libtdegames/kgame/kgameerror.cpp
 create mode 100644 libtdegames/kgame/kgameerror.h
 create mode 100644 libtdegames/kgame/kgameio.cpp
 create mode 100644 libtdegames/kgame/kgameio.h
 create mode 100644 libtdegames/kgame/kgamemessage.cpp
 create mode 100644 libtdegames/kgame/kgamemessage.h
 create mode 100644 libtdegames/kgame/kgamenetwork.cpp
 create mode 100644 libtdegames/kgame/kgamenetwork.h
 create mode 100644 libtdegames/kgame/kgameprocess.cpp
 create mode 100644 libtdegames/kgame/kgameprocess.h
 create mode 100644 libtdegames/kgame/kgameproperty.cpp
 create mode 100644 libtdegames/kgame/kgameproperty.h
 create mode 100644 libtdegames/kgame/kgamepropertyarray.h
 create mode 100644 libtdegames/kgame/kgamepropertyhandler.cpp
 create mode 100644 libtdegames/kgame/kgamepropertyhandler.h
 create mode 100644 libtdegames/kgame/kgamepropertylist.h
 create mode 100644 libtdegames/kgame/kgamesequence.cpp
 create mode 100644 libtdegames/kgame/kgamesequence.h
 create mode 100644 libtdegames/kgame/kgameversion.h
 create mode 100644 libtdegames/kgame/kmessageclient.cpp
 create mode 100644 libtdegames/kgame/kmessageclient.h
 create mode 100644 libtdegames/kgame/kmessageio.cpp
 create mode 100644 libtdegames/kgame/kmessageio.h
 create mode 100644 libtdegames/kgame/kmessageserver.cpp
 create mode 100644 libtdegames/kgame/kmessageserver.h
 create mode 100644 libtdegames/kgame/kmessageserver.png
 create mode 100644 libtdegames/kgame/kplayer.cpp
 create mode 100644 libtdegames/kgame/kplayer.h
 create mode 100644 libtdegames/kgame/libtdegames.html
 create mode 100644 libtdegames/kgame/messages.txt
 create mode 100644 libtdegames/kgame/scenario0.png
 create mode 100644 libtdegames/kgame/scenario1.png
 create mode 100644 libtdegames/kgame/scenario2.png
 create mode 100644 libtdegames/kgamelcd.cpp
 create mode 100644 libtdegames/kgamelcd.h
 create mode 100644 libtdegames/kgamemisc.cpp
 create mode 100644 libtdegames/kgamemisc.h
 create mode 100644 libtdegames/kgameprogress.cpp
 create mode 100644 libtdegames/kgameprogress.h
 create mode 100644 libtdegames/kgrid2d.h
 create mode 100644 libtdegames/kstdgameaction.cpp
 create mode 100644 libtdegames/kstdgameaction.h
 create mode 100644 libtdegames/pics/Makefile.am
 create mode 100644 libtdegames/pics/cr16-action-endturn.png
 create mode 100644 libtdegames/pics/cr16-action-highscore.png
 create mode 100644 libtdegames/pics/cr16-action-roll.png
 create mode 100644 libtdegames/pics/cr22-action-roll.png
 create mode 100644 libtdegames/pics/cr32-action-endturn.png
 create mode 100644 libtdegames/pics/cr32-action-highscore.png
 create mode 100644 libtdegames/pics/cr32-action-roll.png
 create mode 100644 libtdegames/pics/star.png
 create mode 100644 tdegames.lsm

diff --git a/kdegames.lsm b/kdegames.lsm
deleted file mode 100644
index 313c0162..00000000
--- a/kdegames.lsm
+++ /dev/null
@@ -1,11 +0,0 @@
-Begin4
-Title:          tdegames
-Version:        3.5.10
-Entered-date:   2008-08-26
-Description:    Games written for the K Desktop Environment (KDE)
-Keywords:       KDE X11 desktop Qt 
-Author:         http://bugs.kde.org/ (KDE Bugtracking System)
-Primary-site:   http://www.kde.org/download/
-Platforms:      Unix, Qt
-Copying-policy: GPL, Artistic
-End
diff --git a/libkdegames/Makefile.am b/libkdegames/Makefile.am
deleted file mode 100644
index aedac6ae..00000000
--- a/libkdegames/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-
-lib_LTLIBRARIES = libtdegames.la
-libtdegames_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -no-undefined -version-info 3:0:2
-libtdegames_la_LIBADD  = highscore/libkhighscore.la kgame/libkgame.la kgame/dialogs/libkgamedialogs.la \
-		$(LIB_KSYCOCA) $(LIB_KDNSSD)
-
-libtdegames_la_SOURCES = kcarddialog.cpp kstdgameaction.cpp \
-		kgamemisc.cpp kchatbase.cpp kchat.cpp \
-		kchatdialog.cpp kgameprogress.cpp \
-        kcanvasrootpixmap.cpp kgamelcd.cpp
-include_HEADERS = kgamemisc.h kcarddialog.h kstdgameaction.h \
-		kchatbase.h kchat.h kchatdialog.h \
-        kgameprogress.h kcanvasrootpixmap.h kgamelcd.h kgrid2d.h
-
-INCLUDES = $(all_includes)
-METASOURCES = AUTO
-
-SUBDIRS = carddecks highscore kgame pics
-
-messages:
-	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
-
-include ../admin/Doxyfile.am
diff --git a/libkdegames/README b/libkdegames/README
deleted file mode 100644
index b96c1772..00000000
--- a/libkdegames/README
+++ /dev/null
@@ -1,25 +0,0 @@
-This directory contains the library for the tdegames packege.
-It is a collection of functions used by some games or which
-are useful for other games.
-
-Packagers note: it is recommended to put the directory "carddecks" into a separate
-package, as not all games using libtdegames use the carddecks as well.
-
-Contents:
-  kcarddialog: Access to carddeck selection and administration
-               for cardgames
-  kstdgameaction: just like kstdaction this provides some default action for
-                  kde games. games often use different entries than other apps
-                  (like "game" instead of "file"), so use this if possible
-  kgamemisc: some static method i didn't know a good class name for. it
-             currently features "randomName()" which will just give you a random name from
-             a list (translators note: happy translating ;) i copied kde-common/accounts
-             for this so there are nearly 300 entries...)
-  kgame: this is a complete network/game handling library. it constists of a lot
-         of classes which are explained in the kgame docu (as soon as it is
-         written)
-if you use libtdegames in your game please also add
-KGlobal::locale()->insertCatalogue("libtdegames");
-to main()
-This will add libtdegames.pot to your game and therefore all libtdegames 
-strings get translated.
diff --git a/libkdegames/TODO b/libkdegames/TODO
deleted file mode 100644
index 136c4fdd..00000000
--- a/libkdegames/TODO
+++ /dev/null
@@ -1,10 +0,0 @@
-- 17.04.2001: change version number of the kdenonbeta one
-- 10.07.2001: scaling has been added to KCard and KCardDialog. Find out if there
-  is a memory leak!!
-- 10.07.2001: better layout for the resize box
-- 10.07.2001: global decks/carddirs need extensive testing
-
--These pertain to the highscore widget
-The Ok button when adding a name should be enabled when the lineedit is filled with a QString of length() > 0
-
-The lineedit by default should come up with the user name that is loged in.
diff --git a/libkdegames/carddecks/Makefile.am b/libkdegames/carddecks/Makefile.am
deleted file mode 100644
index 8effea93..00000000
--- a/libkdegames/carddecks/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-DECKDIRS = cards-aisleriot cards-dondorf-whist-b cards-gdkcard-bonded cards-hard-a-port \
-	cards-penguins cards-spaced cards-xskat-french cards-default decks cards-konqi-modern cards-warwick cards-xskat-german
-
-deckdir = $(kde_datadir)/carddecks
-
-uninstall-local:
-	rm -rf $(DESTDIR)$(deckdir)
-
-install-data-local:
-	@$(mkinstalldirs) $(DESTDIR)$(deckdir)
-	@for i in $(DECKDIRS); do \
-		if test -d $(DESTDIR)$(deckdir)/$$i; then \
-			echo "refreshing and removing $$i" ;\
-			rm -rf $(DESTDIR)$(deckdir)/$$i;\
-		fi ;\
-		echo "installing $$i" ;\
-		mkdir $(DESTDIR)$(deckdir)/$$i ;\
-		files=`cd $(srcdir)/$$i && ls -1d *` ;\
-		for f in $$files; do \
-			if test -f $(srcdir)/$$i/$$f; then \
-				$(INSTALL_DATA) $(srcdir)/$$i/$$f $(DESTDIR)$(deckdir)/$$i/$$f ;\
-			fi \
-		done \
-	done      
diff --git a/libkdegames/carddecks/README b/libkdegames/carddecks/README
deleted file mode 100644
index bfac9f0d..00000000
--- a/libkdegames/carddecks/README
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains all carddecks for KDE cardgames.
-
-The backsides of the cards are stored as PNG images in
-the directory decks as deck0.png, deck1.png, ...
-
-The cardsets with 52 cards are stored in the directories
-cards1,cards2,cards3,... where each directory contains 52
-PNG images of the cards labels 1.png,2.png,...52.png
-
-Access to these cards works by using the kcardialog library
-in libtdegames. See for documentation there.
-
diff --git a/libkdegames/carddecks/cards-aisleriot/1.png b/libkdegames/carddecks/cards-aisleriot/1.png
deleted file mode 100644
index d08a67d8..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/10.png b/libkdegames/carddecks/cards-aisleriot/10.png
deleted file mode 100644
index f9f00749..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/11.png b/libkdegames/carddecks/cards-aisleriot/11.png
deleted file mode 100644
index 036807ec..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/12.png b/libkdegames/carddecks/cards-aisleriot/12.png
deleted file mode 100644
index 2945ea93..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/13.png b/libkdegames/carddecks/cards-aisleriot/13.png
deleted file mode 100644
index 86ac688c..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/14.png b/libkdegames/carddecks/cards-aisleriot/14.png
deleted file mode 100644
index e5b64e0f..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/15.png b/libkdegames/carddecks/cards-aisleriot/15.png
deleted file mode 100644
index 3522414c..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/16.png b/libkdegames/carddecks/cards-aisleriot/16.png
deleted file mode 100644
index 098a50f4..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/17.png b/libkdegames/carddecks/cards-aisleriot/17.png
deleted file mode 100644
index a4abb694..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/18.png b/libkdegames/carddecks/cards-aisleriot/18.png
deleted file mode 100644
index b231456b..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/19.png b/libkdegames/carddecks/cards-aisleriot/19.png
deleted file mode 100644
index d77ff9c8..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/2.png b/libkdegames/carddecks/cards-aisleriot/2.png
deleted file mode 100644
index 5d610da7..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/20.png b/libkdegames/carddecks/cards-aisleriot/20.png
deleted file mode 100644
index bf9d586f..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/21.png b/libkdegames/carddecks/cards-aisleriot/21.png
deleted file mode 100644
index 7ae9b457..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/22.png b/libkdegames/carddecks/cards-aisleriot/22.png
deleted file mode 100644
index 86dee123..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/23.png b/libkdegames/carddecks/cards-aisleriot/23.png
deleted file mode 100644
index 0f6aba24..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/24.png b/libkdegames/carddecks/cards-aisleriot/24.png
deleted file mode 100644
index 5cf8d35c..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/25.png b/libkdegames/carddecks/cards-aisleriot/25.png
deleted file mode 100644
index a46de767..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/26.png b/libkdegames/carddecks/cards-aisleriot/26.png
deleted file mode 100644
index a21f883d..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/27.png b/libkdegames/carddecks/cards-aisleriot/27.png
deleted file mode 100644
index 724146ca..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/28.png b/libkdegames/carddecks/cards-aisleriot/28.png
deleted file mode 100644
index f446432e..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/29.png b/libkdegames/carddecks/cards-aisleriot/29.png
deleted file mode 100644
index 81060669..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/3.png b/libkdegames/carddecks/cards-aisleriot/3.png
deleted file mode 100644
index 9bc9a017..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/30.png b/libkdegames/carddecks/cards-aisleriot/30.png
deleted file mode 100644
index d506216a..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/31.png b/libkdegames/carddecks/cards-aisleriot/31.png
deleted file mode 100644
index e6643631..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/32.png b/libkdegames/carddecks/cards-aisleriot/32.png
deleted file mode 100644
index 225d9c3e..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/33.png b/libkdegames/carddecks/cards-aisleriot/33.png
deleted file mode 100644
index bb5bd4ec..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/34.png b/libkdegames/carddecks/cards-aisleriot/34.png
deleted file mode 100644
index a5a0f38d..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/35.png b/libkdegames/carddecks/cards-aisleriot/35.png
deleted file mode 100644
index 72cca325..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/36.png b/libkdegames/carddecks/cards-aisleriot/36.png
deleted file mode 100644
index 8c805d93..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/37.png b/libkdegames/carddecks/cards-aisleriot/37.png
deleted file mode 100644
index 36746eee..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/38.png b/libkdegames/carddecks/cards-aisleriot/38.png
deleted file mode 100644
index 58de88ae..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/39.png b/libkdegames/carddecks/cards-aisleriot/39.png
deleted file mode 100644
index 879c0f78..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/4.png b/libkdegames/carddecks/cards-aisleriot/4.png
deleted file mode 100644
index 6b723627..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/40.png b/libkdegames/carddecks/cards-aisleriot/40.png
deleted file mode 100644
index e20553ee..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/41.png b/libkdegames/carddecks/cards-aisleriot/41.png
deleted file mode 100644
index 9a023831..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/42.png b/libkdegames/carddecks/cards-aisleriot/42.png
deleted file mode 100644
index 363e44b2..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/43.png b/libkdegames/carddecks/cards-aisleriot/43.png
deleted file mode 100644
index e2e7b08c..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/44.png b/libkdegames/carddecks/cards-aisleriot/44.png
deleted file mode 100644
index aeb617f6..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/45.png b/libkdegames/carddecks/cards-aisleriot/45.png
deleted file mode 100644
index fee4dba0..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/46.png b/libkdegames/carddecks/cards-aisleriot/46.png
deleted file mode 100644
index f5948439..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/47.png b/libkdegames/carddecks/cards-aisleriot/47.png
deleted file mode 100644
index 0079b371..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/48.png b/libkdegames/carddecks/cards-aisleriot/48.png
deleted file mode 100644
index 62a487da..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/49.png b/libkdegames/carddecks/cards-aisleriot/49.png
deleted file mode 100644
index 87ede197..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/5.png b/libkdegames/carddecks/cards-aisleriot/5.png
deleted file mode 100644
index 8c5df649..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/50.png b/libkdegames/carddecks/cards-aisleriot/50.png
deleted file mode 100644
index a8a01853..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/51.png b/libkdegames/carddecks/cards-aisleriot/51.png
deleted file mode 100644
index 9f2d83b9..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/52.png b/libkdegames/carddecks/cards-aisleriot/52.png
deleted file mode 100644
index c5c754b3..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/6.png b/libkdegames/carddecks/cards-aisleriot/6.png
deleted file mode 100644
index d399ebbb..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/7.png b/libkdegames/carddecks/cards-aisleriot/7.png
deleted file mode 100644
index 754240cd..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/8.png b/libkdegames/carddecks/cards-aisleriot/8.png
deleted file mode 100644
index 805854c0..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/9.png b/libkdegames/carddecks/cards-aisleriot/9.png
deleted file mode 100644
index 9c032e48..00000000
Binary files a/libkdegames/carddecks/cards-aisleriot/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-aisleriot/COPYRIGHT b/libkdegames/carddecks/cards-aisleriot/COPYRIGHT
deleted file mode 100644
index bfbeeca7..00000000
--- a/libkdegames/carddecks/cards-aisleriot/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-This PySol cardset was adapted from gnome-games 0.27 (aisleriot).
-http://www.gnome.org
-
-Copyright (C) 1998 Jonathan Blandford <jrb@mit.edu>
-Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-aisleriot/index.desktop b/libkdegames/carddecks/cards-aisleriot/index.desktop
deleted file mode 100644
index e70c235b..00000000
--- a/libkdegames/carddecks/cards-aisleriot/index.desktop
+++ /dev/null
@@ -1,20 +0,0 @@
-[KDE Backdeck]
-Name=AisleRiot
-Name[af]=Aisleriot
-Name[be]=Эслрыёт (пасьянсы)
-Name[bg]=Айсълриот
-Name[bn]=এইসলরায়োট
-Name[cs]=Pozdvižení v uličce
-Name[eo]=Simpla
-Name[hi]=एस्लेरियॉट
-Name[hr]=Pobuna u prolazu
-Name[ne]=आइस्ले रिओट
-Name[pa]=ਇਲਸੀਰਓਟ
-Name[ru]=ЭшлРиот (коллекция пасьянсов)
-Name[sv]=Kyrkouppror
-Name[ta]= அய்ஸில்ரியாட்
-Name[uk]=Заколот на човні
-Name[vi]= AisleRiot
-Name[zu]=I-AisleRiot
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-default/1.png b/libkdegames/carddecks/cards-default/1.png
deleted file mode 100644
index 8f5de97f..00000000
Binary files a/libkdegames/carddecks/cards-default/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/10.png b/libkdegames/carddecks/cards-default/10.png
deleted file mode 100644
index 6c7b87ea..00000000
Binary files a/libkdegames/carddecks/cards-default/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/11.png b/libkdegames/carddecks/cards-default/11.png
deleted file mode 100644
index a5938708..00000000
Binary files a/libkdegames/carddecks/cards-default/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/12.png b/libkdegames/carddecks/cards-default/12.png
deleted file mode 100644
index 4d43a730..00000000
Binary files a/libkdegames/carddecks/cards-default/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/13.png b/libkdegames/carddecks/cards-default/13.png
deleted file mode 100644
index c7d51207..00000000
Binary files a/libkdegames/carddecks/cards-default/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/14.png b/libkdegames/carddecks/cards-default/14.png
deleted file mode 100644
index 2efb9b18..00000000
Binary files a/libkdegames/carddecks/cards-default/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/15.png b/libkdegames/carddecks/cards-default/15.png
deleted file mode 100644
index 8208b271..00000000
Binary files a/libkdegames/carddecks/cards-default/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/16.png b/libkdegames/carddecks/cards-default/16.png
deleted file mode 100644
index 73c5fce5..00000000
Binary files a/libkdegames/carddecks/cards-default/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/17.png b/libkdegames/carddecks/cards-default/17.png
deleted file mode 100644
index 611b7aff..00000000
Binary files a/libkdegames/carddecks/cards-default/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/18.png b/libkdegames/carddecks/cards-default/18.png
deleted file mode 100644
index 8b7d1a1e..00000000
Binary files a/libkdegames/carddecks/cards-default/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/19.png b/libkdegames/carddecks/cards-default/19.png
deleted file mode 100644
index 0a9dac18..00000000
Binary files a/libkdegames/carddecks/cards-default/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/2.png b/libkdegames/carddecks/cards-default/2.png
deleted file mode 100644
index b0c67169..00000000
Binary files a/libkdegames/carddecks/cards-default/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/20.png b/libkdegames/carddecks/cards-default/20.png
deleted file mode 100644
index 0657a091..00000000
Binary files a/libkdegames/carddecks/cards-default/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/21.png b/libkdegames/carddecks/cards-default/21.png
deleted file mode 100644
index fe376ba1..00000000
Binary files a/libkdegames/carddecks/cards-default/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/22.png b/libkdegames/carddecks/cards-default/22.png
deleted file mode 100644
index 2a0e5d30..00000000
Binary files a/libkdegames/carddecks/cards-default/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/23.png b/libkdegames/carddecks/cards-default/23.png
deleted file mode 100644
index 52403931..00000000
Binary files a/libkdegames/carddecks/cards-default/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/24.png b/libkdegames/carddecks/cards-default/24.png
deleted file mode 100644
index 5af94ec7..00000000
Binary files a/libkdegames/carddecks/cards-default/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/25.png b/libkdegames/carddecks/cards-default/25.png
deleted file mode 100644
index cc437aea..00000000
Binary files a/libkdegames/carddecks/cards-default/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/26.png b/libkdegames/carddecks/cards-default/26.png
deleted file mode 100644
index d034f06f..00000000
Binary files a/libkdegames/carddecks/cards-default/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/27.png b/libkdegames/carddecks/cards-default/27.png
deleted file mode 100644
index a23fe6ff..00000000
Binary files a/libkdegames/carddecks/cards-default/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/28.png b/libkdegames/carddecks/cards-default/28.png
deleted file mode 100644
index dcccaac2..00000000
Binary files a/libkdegames/carddecks/cards-default/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/29.png b/libkdegames/carddecks/cards-default/29.png
deleted file mode 100644
index e19070bd..00000000
Binary files a/libkdegames/carddecks/cards-default/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/3.png b/libkdegames/carddecks/cards-default/3.png
deleted file mode 100644
index 1854faba..00000000
Binary files a/libkdegames/carddecks/cards-default/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/30.png b/libkdegames/carddecks/cards-default/30.png
deleted file mode 100644
index d9b285c0..00000000
Binary files a/libkdegames/carddecks/cards-default/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/31.png b/libkdegames/carddecks/cards-default/31.png
deleted file mode 100644
index b77a5d8d..00000000
Binary files a/libkdegames/carddecks/cards-default/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/32.png b/libkdegames/carddecks/cards-default/32.png
deleted file mode 100644
index 0e0649bf..00000000
Binary files a/libkdegames/carddecks/cards-default/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/33.png b/libkdegames/carddecks/cards-default/33.png
deleted file mode 100644
index d1344b0f..00000000
Binary files a/libkdegames/carddecks/cards-default/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/34.png b/libkdegames/carddecks/cards-default/34.png
deleted file mode 100644
index 9ff5f5aa..00000000
Binary files a/libkdegames/carddecks/cards-default/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/35.png b/libkdegames/carddecks/cards-default/35.png
deleted file mode 100644
index b247d95e..00000000
Binary files a/libkdegames/carddecks/cards-default/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/36.png b/libkdegames/carddecks/cards-default/36.png
deleted file mode 100644
index f5284e87..00000000
Binary files a/libkdegames/carddecks/cards-default/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/37.png b/libkdegames/carddecks/cards-default/37.png
deleted file mode 100644
index e4a2fa70..00000000
Binary files a/libkdegames/carddecks/cards-default/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/38.png b/libkdegames/carddecks/cards-default/38.png
deleted file mode 100644
index 859e4a52..00000000
Binary files a/libkdegames/carddecks/cards-default/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/39.png b/libkdegames/carddecks/cards-default/39.png
deleted file mode 100644
index b4392112..00000000
Binary files a/libkdegames/carddecks/cards-default/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/4.png b/libkdegames/carddecks/cards-default/4.png
deleted file mode 100644
index 136c3100..00000000
Binary files a/libkdegames/carddecks/cards-default/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/40.png b/libkdegames/carddecks/cards-default/40.png
deleted file mode 100644
index 2a30304a..00000000
Binary files a/libkdegames/carddecks/cards-default/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/41.png b/libkdegames/carddecks/cards-default/41.png
deleted file mode 100644
index 2c619dc3..00000000
Binary files a/libkdegames/carddecks/cards-default/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/42.png b/libkdegames/carddecks/cards-default/42.png
deleted file mode 100644
index 5200e878..00000000
Binary files a/libkdegames/carddecks/cards-default/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/43.png b/libkdegames/carddecks/cards-default/43.png
deleted file mode 100644
index ebd6db3f..00000000
Binary files a/libkdegames/carddecks/cards-default/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/44.png b/libkdegames/carddecks/cards-default/44.png
deleted file mode 100644
index 8cdcd68f..00000000
Binary files a/libkdegames/carddecks/cards-default/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/45.png b/libkdegames/carddecks/cards-default/45.png
deleted file mode 100644
index 9297d188..00000000
Binary files a/libkdegames/carddecks/cards-default/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/46.png b/libkdegames/carddecks/cards-default/46.png
deleted file mode 100644
index 1b47218e..00000000
Binary files a/libkdegames/carddecks/cards-default/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/47.png b/libkdegames/carddecks/cards-default/47.png
deleted file mode 100644
index 8fd3853d..00000000
Binary files a/libkdegames/carddecks/cards-default/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/48.png b/libkdegames/carddecks/cards-default/48.png
deleted file mode 100644
index 01eea71b..00000000
Binary files a/libkdegames/carddecks/cards-default/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/49.png b/libkdegames/carddecks/cards-default/49.png
deleted file mode 100644
index d6860e04..00000000
Binary files a/libkdegames/carddecks/cards-default/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/5.png b/libkdegames/carddecks/cards-default/5.png
deleted file mode 100644
index 64029ed0..00000000
Binary files a/libkdegames/carddecks/cards-default/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/50.png b/libkdegames/carddecks/cards-default/50.png
deleted file mode 100644
index 79c1ed05..00000000
Binary files a/libkdegames/carddecks/cards-default/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/51.png b/libkdegames/carddecks/cards-default/51.png
deleted file mode 100644
index f396b946..00000000
Binary files a/libkdegames/carddecks/cards-default/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/52.png b/libkdegames/carddecks/cards-default/52.png
deleted file mode 100644
index dcdc90e5..00000000
Binary files a/libkdegames/carddecks/cards-default/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/6.png b/libkdegames/carddecks/cards-default/6.png
deleted file mode 100644
index 1749b472..00000000
Binary files a/libkdegames/carddecks/cards-default/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/7.png b/libkdegames/carddecks/cards-default/7.png
deleted file mode 100644
index 2d33965c..00000000
Binary files a/libkdegames/carddecks/cards-default/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/8.png b/libkdegames/carddecks/cards-default/8.png
deleted file mode 100644
index 165bd76b..00000000
Binary files a/libkdegames/carddecks/cards-default/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/9.png b/libkdegames/carddecks/cards-default/9.png
deleted file mode 100644
index 9860c535..00000000
Binary files a/libkdegames/carddecks/cards-default/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-default/index.desktop b/libkdegames/carddecks/cards-default/index.desktop
deleted file mode 100644
index 63894a1b..00000000
--- a/libkdegames/carddecks/cards-default/index.desktop
+++ /dev/null
@@ -1,115 +0,0 @@
-[KDE Backdeck]
-Name=Standard
-Name[af]=Standaard
-Name[az]=Standart
-Name[be]=Звычайная
-Name[bg]=Стандарт
-Name[bn]=প্রমিত
-Name[br]=Reoliek
-Name[ca]=Estàndard
-Name[cs]=Standardní
-Name[cy]=Safonol
-Name[eo]=Normala
-Name[es]=Estándar
-Name[eu]=Estandarra
-Name[fa]=استاندارد
-Name[fi]=Normaali
-Name[ga]=Caighdeánach
-Name[gl]=Estándar
-Name[hi]=मानक
-Name[is]=Staðlað
-Name[ja]=標準
-Name[km]=ខ្នាត​គំរូ
-Name[ko]=표준
-Name[lt]=Standartas
-Name[lv]=Standarta
-Name[mk]=Стандард
-Name[ne]=मानक
-Name[nl]=Standaard
-Name[nso]=Lekanetse
-Name[pa]=ਮਿਆਰ
-Name[pt]=Normal
-Name[pt_BR]=Padrão
-Name[ru]=Стандарт
-Name[se]=Standárda
-Name[sk]=Štandard
-Name[sr]=Стандардни
-Name[sr@Latn]=Standardni
-Name[ta]= தரம்
-Name[tg]=Низоммеъёр
-Name[th]=มาตรฐาน
-Name[tr]=Standart
-Name[uk]=Типові
-Name[uz]=Andoza
-Name[uz@cyrillic]=Андоза
-Name[ven]=Murole
-Name[vi]=Tiêu chuẩn 
-Name[wa]=Sitandård
-Name[xh]=Umgangatho
-Name[zh_CN]=标准
-Name[zh_TW]=標準
-Name[zu]=Okulingeneyo
-Preview=11.png
-PySol=false
-Comment=Standard KDE card set\nGPL license
-Comment[af]=Standaard Kde kaart stel\nGPL lisensie
-Comment[az]=Standart KDE kart dəstəsi\nGPL license
-Comment[be]=Звычайная калода картаў KDE\nGPL license
-Comment[bg]=Стандартна колода карти KDE\nОПЛ лиценз(GPL)
-Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট\nজি.পি.এল. লাইসেন্স
-Comment[bs]=Standardni KDE špil karata\nGPL license
-Comment[ca]=Joc de cartes estàndard per al KDE sota\nLlicència GPL
-Comment[cs]=Standardní sada karet KDE\nGPL licence
-Comment[cy]=Trwydded GPL safonol\nar gyfer set cerdiau KDE
-Comment[da]=Standard KDE-kortspil\nGPL-licens
-Comment[de]=Standardmäßige KDE-Karten\nGPL-Lizenz
-Comment[el]=Προκαθορισμένο σετ καρτών του KDE\nΆδεια GPL
-Comment[en_GB]=Standard KDE card set\nGPL licence
-Comment[eo]=Normala KDEa kartaro\nGPL licenco
-Comment[es]=Juego de cartas estándar de KDE\nLicencia GPL
-Comment[et]=Standardne KDE kaardikomplekt\nGPL litsents
-Comment[eu]=KDE-ren karta-sorta estandarra\nGPL lizentzia
-Comment[fa]=مجموعه استاندارد کارت KDE\مجوز nGPL
-Comment[fi]=Normaali KDE:n korttipakka\nGPL lisenssi
-Comment[fr]=Jeu de cartes standard de KDE\nLicence GPL
-Comment[gl]=Baralla de cartas estándar de KDE\nGPL license
-Comment[he]=ערכת הקלפים הסטנדרטית של KDE\nרישיון GPL
-Comment[hi]=मानक केडीई ताश सेट\nजीपीएल अनुज्ञापत्र
-Comment[hr]=Standardni KDE komplet karata\nGPL licenca
-Comment[hu]=Standard KDE kártyacsomag\n(GPL licencű)
-Comment[is]=Venjulegi KDE spilastokkurinn\nGPL leyfi
-Comment[it]=Insieme di carte standard di KDE\nLicenza GPL
-Comment[ja]=標準 KDE カードセット\nGPL ライセンス
-Comment[km]=បណ្ដុំ​បៀ KDE ខ្នាត​គំរូ\nអជ្ញាបណ្ណ GPL
-Comment[ko]=표준 KDE 카드 모음\nGPL 라이선스
-Comment[lt]=Standartinis KDE kortų rinkinys\nGPL licencija
-Comment[lv]=Standarta KDE kāršu komplekts\n GPL licenze
-Comment[mk]=Стандарден комплет на карти во KDE\nGPL-лиценца
-Comment[mt]=Mazz karti standard KDE\nliċenzja GPL
-Comment[nb]=Standard KDE sett med kort\nGPL-lisens
-Comment[nds]=KDE-Standardkoorten\nGPL-Lizenz
-Comment[ne]=मानक केडीई कार्ड सेट\nGPL इजाजतपत्र
-Comment[nl]=Standaard KDE-kaartrug\nGPL-licentie
-Comment[nn]=Standard KDE-kortstokk\nGPL-lisens
-Comment[pl]=Standardowy zestaw kart KDE\nLicencja GPL
-Comment[pt]=Baralho de cartas normal do KDE\nLicença GPL
-Comment[pt_BR]=Jogo de cartas padrão do KDE\nLicença GPL
-Comment[ro]=Set de cărţi KDE standard\nLicenţă GPL
-Comment[ru]=Стандартная колода карт KDE\nЛицензия: GPL
-Comment[sk]=Štandardný balíček kariet KDE\nlicencia GPL
-Comment[sl]=Standardni nabor kart v KDE\nLicenca GPL
-Comment[sr]=Стандардни KDE-ов шпил карата\nGPL лиценца
-Comment[sr@Latn]=Standardni KDE-ov špil karata\nGPL licenca
-Comment[sv]=Förvald KDE-kortlek\nGPL-licens
-Comment[ta]=நிலையான கேடிஇ சீட்டு அமைப்பு \nGPL இயக்க ஆணை
-Comment[tg]=Маҷмӯи кортҳои низомии KDE\nлитсензияи GPL
-Comment[th]=ชุดของเกมไพ่ของ KDE\nลิขสิทธิ์แบบ GPL
-Comment[tr]=Standart KDE kart seti\nGPL lisansı
-Comment[uk]=Типовий набір карт KDE\nліцензія GPL
-Comment[ven]=U vhekanya ha magarata a KDE ya Murole\tendelo ya nGPL
-Comment[vi]=Thẻ KDE tiêu chuẩn đặt \nGPL license
-Comment[wa]=Cwårdjeus standård di KDE\ndizo licince GPL
-Comment[xh]=Umgangatho wekhadi le KDE iqela lekhadi \nGPL imvumelwano
-Comment[zh_CN]=标准 KDE 牌面\nGPL 授权
-Comment[zh_TW]=標準 KDE 牌局\nGPL 授權
-Comment[zu]=Iqoqo lamakhadi elilingeneyo le-KDE\n ilayisensi ye-GPL
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/1.png b/libkdegames/carddecks/cards-dondorf-whist-b/1.png
deleted file mode 100644
index 89c86909..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/10.png b/libkdegames/carddecks/cards-dondorf-whist-b/10.png
deleted file mode 100644
index 5113cad8..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/11.png b/libkdegames/carddecks/cards-dondorf-whist-b/11.png
deleted file mode 100644
index 11fc7e05..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/12.png b/libkdegames/carddecks/cards-dondorf-whist-b/12.png
deleted file mode 100644
index a2307ddc..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/13.png b/libkdegames/carddecks/cards-dondorf-whist-b/13.png
deleted file mode 100644
index 0b9e20cd..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/14.png b/libkdegames/carddecks/cards-dondorf-whist-b/14.png
deleted file mode 100644
index 1c49f750..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/15.png b/libkdegames/carddecks/cards-dondorf-whist-b/15.png
deleted file mode 100644
index ab295e25..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/16.png b/libkdegames/carddecks/cards-dondorf-whist-b/16.png
deleted file mode 100644
index d8bd8402..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/17.png b/libkdegames/carddecks/cards-dondorf-whist-b/17.png
deleted file mode 100644
index d3a3f6ed..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/18.png b/libkdegames/carddecks/cards-dondorf-whist-b/18.png
deleted file mode 100644
index 12831991..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/19.png b/libkdegames/carddecks/cards-dondorf-whist-b/19.png
deleted file mode 100644
index e7199dce..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/2.png b/libkdegames/carddecks/cards-dondorf-whist-b/2.png
deleted file mode 100644
index 93ec9944..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/20.png b/libkdegames/carddecks/cards-dondorf-whist-b/20.png
deleted file mode 100644
index 90b043f0..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/21.png b/libkdegames/carddecks/cards-dondorf-whist-b/21.png
deleted file mode 100644
index 905ccd6a..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/22.png b/libkdegames/carddecks/cards-dondorf-whist-b/22.png
deleted file mode 100644
index 2eee5bbc..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/23.png b/libkdegames/carddecks/cards-dondorf-whist-b/23.png
deleted file mode 100644
index b717110e..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/24.png b/libkdegames/carddecks/cards-dondorf-whist-b/24.png
deleted file mode 100644
index 4c05cd1d..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/25.png b/libkdegames/carddecks/cards-dondorf-whist-b/25.png
deleted file mode 100644
index c6701d0d..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/26.png b/libkdegames/carddecks/cards-dondorf-whist-b/26.png
deleted file mode 100644
index a737f469..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/27.png b/libkdegames/carddecks/cards-dondorf-whist-b/27.png
deleted file mode 100644
index c904309b..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/28.png b/libkdegames/carddecks/cards-dondorf-whist-b/28.png
deleted file mode 100644
index 8da263d7..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/29.png b/libkdegames/carddecks/cards-dondorf-whist-b/29.png
deleted file mode 100644
index 8ff7822d..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/3.png b/libkdegames/carddecks/cards-dondorf-whist-b/3.png
deleted file mode 100644
index 7f5644f8..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/30.png b/libkdegames/carddecks/cards-dondorf-whist-b/30.png
deleted file mode 100644
index c93c64dc..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/31.png b/libkdegames/carddecks/cards-dondorf-whist-b/31.png
deleted file mode 100644
index 912cbf79..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/32.png b/libkdegames/carddecks/cards-dondorf-whist-b/32.png
deleted file mode 100644
index 9b72443c..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/33.png b/libkdegames/carddecks/cards-dondorf-whist-b/33.png
deleted file mode 100644
index 20f863ac..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/34.png b/libkdegames/carddecks/cards-dondorf-whist-b/34.png
deleted file mode 100644
index 7763d965..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/35.png b/libkdegames/carddecks/cards-dondorf-whist-b/35.png
deleted file mode 100644
index 29eaef82..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/36.png b/libkdegames/carddecks/cards-dondorf-whist-b/36.png
deleted file mode 100644
index fd72b718..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/37.png b/libkdegames/carddecks/cards-dondorf-whist-b/37.png
deleted file mode 100644
index 15a2b979..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/38.png b/libkdegames/carddecks/cards-dondorf-whist-b/38.png
deleted file mode 100644
index 91551173..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/39.png b/libkdegames/carddecks/cards-dondorf-whist-b/39.png
deleted file mode 100644
index dcb66d00..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/4.png b/libkdegames/carddecks/cards-dondorf-whist-b/4.png
deleted file mode 100644
index 1033ffd0..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/40.png b/libkdegames/carddecks/cards-dondorf-whist-b/40.png
deleted file mode 100644
index a1b9b2e9..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/41.png b/libkdegames/carddecks/cards-dondorf-whist-b/41.png
deleted file mode 100644
index 8d7ca55b..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/42.png b/libkdegames/carddecks/cards-dondorf-whist-b/42.png
deleted file mode 100644
index 4570430b..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/43.png b/libkdegames/carddecks/cards-dondorf-whist-b/43.png
deleted file mode 100644
index c889b795..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/44.png b/libkdegames/carddecks/cards-dondorf-whist-b/44.png
deleted file mode 100644
index b73bd4d1..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/45.png b/libkdegames/carddecks/cards-dondorf-whist-b/45.png
deleted file mode 100644
index de6730cd..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/46.png b/libkdegames/carddecks/cards-dondorf-whist-b/46.png
deleted file mode 100644
index f20edcc9..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/47.png b/libkdegames/carddecks/cards-dondorf-whist-b/47.png
deleted file mode 100644
index 50ec6b95..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/48.png b/libkdegames/carddecks/cards-dondorf-whist-b/48.png
deleted file mode 100644
index c0bfdfbd..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/49.png b/libkdegames/carddecks/cards-dondorf-whist-b/49.png
deleted file mode 100644
index c8803ffa..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/5.png b/libkdegames/carddecks/cards-dondorf-whist-b/5.png
deleted file mode 100644
index 0fb9ffcf..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/50.png b/libkdegames/carddecks/cards-dondorf-whist-b/50.png
deleted file mode 100644
index 6d8c891e..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/51.png b/libkdegames/carddecks/cards-dondorf-whist-b/51.png
deleted file mode 100644
index fc2c76d0..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/52.png b/libkdegames/carddecks/cards-dondorf-whist-b/52.png
deleted file mode 100644
index 6aef81aa..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/6.png b/libkdegames/carddecks/cards-dondorf-whist-b/6.png
deleted file mode 100644
index f70072cf..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/7.png b/libkdegames/carddecks/cards-dondorf-whist-b/7.png
deleted file mode 100644
index 1dd352dc..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/8.png b/libkdegames/carddecks/cards-dondorf-whist-b/8.png
deleted file mode 100644
index 087906ca..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/9.png b/libkdegames/carddecks/cards-dondorf-whist-b/9.png
deleted file mode 100644
index 9bb290ee..00000000
Binary files a/libkdegames/carddecks/cards-dondorf-whist-b/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT b/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
deleted file mode 100644
index 917bc1e3..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
+++ /dev/null
@@ -1,12 +0,0 @@
-This PySol cardset was created by T. Kirk.
-
-Copyright (C) 2000 T. Kirk <grania@mailcity.com>
-
-This card set uses the court and Ace images from a deck published
-by Dondorf and Co. of Frankfurt in 1896.  The cards are double ended
-and have different images on each end.  Two card sets were produced.
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop b/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop
deleted file mode 100644
index 6626e825..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop
+++ /dev/null
@@ -1,17 +0,0 @@
-[KDE Backdeck]
-Name=Dondorf
-Name[be]=Дандорф
-Name[bg]=Дондроф
-Name[bn]=ডনডর্ফ
-Name[eo]=Bela
-Name[hi]=डॉनड्रॉफ
-Name[lv]=Dondorfa
-Name[mk]=Дондорф
-Name[ne]=डनडोर्फ
-Name[ru]=Дондорф
-Name[sr]=Дондорф
-Name[ta]=டேன்டார்ஃப்
-Name[tg]=Дондорф
-Name[zu]=I-Dondorf
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/1.png b/libkdegames/carddecks/cards-gdkcard-bonded/1.png
deleted file mode 100644
index 17c1ac79..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/10.png b/libkdegames/carddecks/cards-gdkcard-bonded/10.png
deleted file mode 100644
index f9fe505b..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/11.png b/libkdegames/carddecks/cards-gdkcard-bonded/11.png
deleted file mode 100644
index 9fa6e5ec..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/12.png b/libkdegames/carddecks/cards-gdkcard-bonded/12.png
deleted file mode 100644
index 09089e70..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/13.png b/libkdegames/carddecks/cards-gdkcard-bonded/13.png
deleted file mode 100644
index cb6b0e6f..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/14.png b/libkdegames/carddecks/cards-gdkcard-bonded/14.png
deleted file mode 100644
index 027217be..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/15.png b/libkdegames/carddecks/cards-gdkcard-bonded/15.png
deleted file mode 100644
index b9054f4f..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/16.png b/libkdegames/carddecks/cards-gdkcard-bonded/16.png
deleted file mode 100644
index 7b14d54a..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/17.png b/libkdegames/carddecks/cards-gdkcard-bonded/17.png
deleted file mode 100644
index e4d9b798..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/18.png b/libkdegames/carddecks/cards-gdkcard-bonded/18.png
deleted file mode 100644
index c0fe1954..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/19.png b/libkdegames/carddecks/cards-gdkcard-bonded/19.png
deleted file mode 100644
index 7f24d523..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/2.png b/libkdegames/carddecks/cards-gdkcard-bonded/2.png
deleted file mode 100644
index 7d8cbbcb..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/20.png b/libkdegames/carddecks/cards-gdkcard-bonded/20.png
deleted file mode 100644
index 1a6e01c9..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/21.png b/libkdegames/carddecks/cards-gdkcard-bonded/21.png
deleted file mode 100644
index c217b982..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/22.png b/libkdegames/carddecks/cards-gdkcard-bonded/22.png
deleted file mode 100644
index 82ce9196..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/23.png b/libkdegames/carddecks/cards-gdkcard-bonded/23.png
deleted file mode 100644
index 03850bef..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/24.png b/libkdegames/carddecks/cards-gdkcard-bonded/24.png
deleted file mode 100644
index 990289f6..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/25.png b/libkdegames/carddecks/cards-gdkcard-bonded/25.png
deleted file mode 100644
index 04ea602f..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/26.png b/libkdegames/carddecks/cards-gdkcard-bonded/26.png
deleted file mode 100644
index 705a22a2..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/27.png b/libkdegames/carddecks/cards-gdkcard-bonded/27.png
deleted file mode 100644
index cf5ea112..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/28.png b/libkdegames/carddecks/cards-gdkcard-bonded/28.png
deleted file mode 100644
index d613413c..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/29.png b/libkdegames/carddecks/cards-gdkcard-bonded/29.png
deleted file mode 100644
index 8838c750..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/3.png b/libkdegames/carddecks/cards-gdkcard-bonded/3.png
deleted file mode 100644
index 563a6385..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/30.png b/libkdegames/carddecks/cards-gdkcard-bonded/30.png
deleted file mode 100644
index 4fb2901b..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/31.png b/libkdegames/carddecks/cards-gdkcard-bonded/31.png
deleted file mode 100644
index 8bcd3090..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/32.png b/libkdegames/carddecks/cards-gdkcard-bonded/32.png
deleted file mode 100644
index c5fb66db..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/33.png b/libkdegames/carddecks/cards-gdkcard-bonded/33.png
deleted file mode 100644
index 43d4df04..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/34.png b/libkdegames/carddecks/cards-gdkcard-bonded/34.png
deleted file mode 100644
index 1bf6c975..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/35.png b/libkdegames/carddecks/cards-gdkcard-bonded/35.png
deleted file mode 100644
index ba85c37e..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/36.png b/libkdegames/carddecks/cards-gdkcard-bonded/36.png
deleted file mode 100644
index c45008af..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/37.png b/libkdegames/carddecks/cards-gdkcard-bonded/37.png
deleted file mode 100644
index 05cac5a9..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/38.png b/libkdegames/carddecks/cards-gdkcard-bonded/38.png
deleted file mode 100644
index 7c52ecbf..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/39.png b/libkdegames/carddecks/cards-gdkcard-bonded/39.png
deleted file mode 100644
index 1404295a..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/4.png b/libkdegames/carddecks/cards-gdkcard-bonded/4.png
deleted file mode 100644
index fbf1b7d2..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/40.png b/libkdegames/carddecks/cards-gdkcard-bonded/40.png
deleted file mode 100644
index b1c0f317..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/41.png b/libkdegames/carddecks/cards-gdkcard-bonded/41.png
deleted file mode 100644
index a59a245c..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/42.png b/libkdegames/carddecks/cards-gdkcard-bonded/42.png
deleted file mode 100644
index 104836a5..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/43.png b/libkdegames/carddecks/cards-gdkcard-bonded/43.png
deleted file mode 100644
index 90b51009..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/44.png b/libkdegames/carddecks/cards-gdkcard-bonded/44.png
deleted file mode 100644
index 66960d0d..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/45.png b/libkdegames/carddecks/cards-gdkcard-bonded/45.png
deleted file mode 100644
index 7aabe88f..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/46.png b/libkdegames/carddecks/cards-gdkcard-bonded/46.png
deleted file mode 100644
index adfb2516..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/47.png b/libkdegames/carddecks/cards-gdkcard-bonded/47.png
deleted file mode 100644
index 0f48a363..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/48.png b/libkdegames/carddecks/cards-gdkcard-bonded/48.png
deleted file mode 100644
index 368c593a..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/49.png b/libkdegames/carddecks/cards-gdkcard-bonded/49.png
deleted file mode 100644
index a783b506..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/5.png b/libkdegames/carddecks/cards-gdkcard-bonded/5.png
deleted file mode 100644
index 9f809535..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/50.png b/libkdegames/carddecks/cards-gdkcard-bonded/50.png
deleted file mode 100644
index dacc26cd..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/51.png b/libkdegames/carddecks/cards-gdkcard-bonded/51.png
deleted file mode 100644
index 13a6e924..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/52.png b/libkdegames/carddecks/cards-gdkcard-bonded/52.png
deleted file mode 100644
index cce8c9f6..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/6.png b/libkdegames/carddecks/cards-gdkcard-bonded/6.png
deleted file mode 100644
index c679e0c3..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/7.png b/libkdegames/carddecks/cards-gdkcard-bonded/7.png
deleted file mode 100644
index 53b35fbf..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/8.png b/libkdegames/carddecks/cards-gdkcard-bonded/8.png
deleted file mode 100644
index 389d0069..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/9.png b/libkdegames/carddecks/cards-gdkcard-bonded/9.png
deleted file mode 100644
index 59551a1a..00000000
Binary files a/libkdegames/carddecks/cards-gdkcard-bonded/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT b/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
deleted file mode 100644
index 36052f95..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
+++ /dev/null
@@ -1,13 +0,0 @@
-This PySol cardset was adapted from gnome-games 1.0.2 (gdk-card-image).
-http://www.gnome.org
-
-Copyright (C) 1994 Heiko Eissfeldt <heiko@colossus.escape.de>
-Copyright (C) 1994 Michael Bischoff <mbi@mo.math.nat.tu-bs.de>
-Copyright (C) 1998 Felix Bellaby <felix@pooh.u-net.com>
-Copyright (C) 1998 Ryu Changwoo <cwryu@eve.kaist.ac.kr>
-Copyright (C) 1999 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop b/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop
deleted file mode 100644
index 68f3ff21..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop
+++ /dev/null
@@ -1,37 +0,0 @@
-[KDE Backdeck]
-Name=Bonded
-Name[af]=Geheg
-Name[az]=Bağlı
-Name[be]=Перапляценні
-Name[bg]=Завързан
-Name[bn]=আবদ্ধ
-Name[ca]=Unides
-Name[cs]=Lepenka
-Name[de]=Verbunden
-Name[eo]=Benda
-Name[es]=Unidas
-Name[eu]=Estekatua
-Name[fi]=Sidottu
-Name[fr]=Compact
-Name[gl]=Unidas
-Name[hi]=बॉन्डेड
-Name[hr]=Povezano
-Name[is]=Bundið
-Name[lv]=Vienkāršs
-Name[mk]=Врзани
-Name[mt]=Mehmuż
-Name[ne]=बन्डेड
-Name[pt]=Unidos
-Name[pt_BR]=Laçado
-Name[ru]=Переплетения
-Name[sr]=Везан
-Name[sr@Latn]=Vezan
-Name[ta]=பிணைக்கப்பட்ட
-Name[tg]=Печдарпечшавӣ
-Name[tr]=Bağlı
-Name[uk]=Бони
-Name[ven]=Zwo khwathiswa
-Name[xh]=Dibeneyo
-Name[zu]=Kuxhumene
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-hard-a-port/1.png b/libkdegames/carddecks/cards-hard-a-port/1.png
deleted file mode 100644
index 05c56268..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/10.png b/libkdegames/carddecks/cards-hard-a-port/10.png
deleted file mode 100644
index ee2d2072..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/11.png b/libkdegames/carddecks/cards-hard-a-port/11.png
deleted file mode 100644
index 4fd72b89..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/12.png b/libkdegames/carddecks/cards-hard-a-port/12.png
deleted file mode 100644
index 7dd80ce7..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/13.png b/libkdegames/carddecks/cards-hard-a-port/13.png
deleted file mode 100644
index 62edf27c..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/14.png b/libkdegames/carddecks/cards-hard-a-port/14.png
deleted file mode 100644
index 5cfa05ed..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/15.png b/libkdegames/carddecks/cards-hard-a-port/15.png
deleted file mode 100644
index a950a87c..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/16.png b/libkdegames/carddecks/cards-hard-a-port/16.png
deleted file mode 100644
index 8b0d76f3..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/17.png b/libkdegames/carddecks/cards-hard-a-port/17.png
deleted file mode 100644
index 9625563e..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/18.png b/libkdegames/carddecks/cards-hard-a-port/18.png
deleted file mode 100644
index 715c8443..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/19.png b/libkdegames/carddecks/cards-hard-a-port/19.png
deleted file mode 100644
index 7a3cf664..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/2.png b/libkdegames/carddecks/cards-hard-a-port/2.png
deleted file mode 100644
index bf4d601f..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/20.png b/libkdegames/carddecks/cards-hard-a-port/20.png
deleted file mode 100644
index 331abc3b..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/21.png b/libkdegames/carddecks/cards-hard-a-port/21.png
deleted file mode 100644
index 59adfb08..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/22.png b/libkdegames/carddecks/cards-hard-a-port/22.png
deleted file mode 100644
index a1ca8484..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/23.png b/libkdegames/carddecks/cards-hard-a-port/23.png
deleted file mode 100644
index d97de844..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/24.png b/libkdegames/carddecks/cards-hard-a-port/24.png
deleted file mode 100644
index 65e3da3c..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/25.png b/libkdegames/carddecks/cards-hard-a-port/25.png
deleted file mode 100644
index 14f82b7d..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/26.png b/libkdegames/carddecks/cards-hard-a-port/26.png
deleted file mode 100644
index e2601df6..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/27.png b/libkdegames/carddecks/cards-hard-a-port/27.png
deleted file mode 100644
index d18b29d7..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/28.png b/libkdegames/carddecks/cards-hard-a-port/28.png
deleted file mode 100644
index 3dcc0842..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/29.png b/libkdegames/carddecks/cards-hard-a-port/29.png
deleted file mode 100644
index a0cc5866..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/3.png b/libkdegames/carddecks/cards-hard-a-port/3.png
deleted file mode 100644
index b78502b9..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/30.png b/libkdegames/carddecks/cards-hard-a-port/30.png
deleted file mode 100644
index e659dc83..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/31.png b/libkdegames/carddecks/cards-hard-a-port/31.png
deleted file mode 100644
index db6f599c..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/32.png b/libkdegames/carddecks/cards-hard-a-port/32.png
deleted file mode 100644
index 9e42582f..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/33.png b/libkdegames/carddecks/cards-hard-a-port/33.png
deleted file mode 100644
index c19f1520..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/34.png b/libkdegames/carddecks/cards-hard-a-port/34.png
deleted file mode 100644
index 139dc9b4..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/35.png b/libkdegames/carddecks/cards-hard-a-port/35.png
deleted file mode 100644
index 62d8a9bc..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/36.png b/libkdegames/carddecks/cards-hard-a-port/36.png
deleted file mode 100644
index 510d150e..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/37.png b/libkdegames/carddecks/cards-hard-a-port/37.png
deleted file mode 100644
index 2e03c9e2..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/38.png b/libkdegames/carddecks/cards-hard-a-port/38.png
deleted file mode 100644
index e12131f0..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/39.png b/libkdegames/carddecks/cards-hard-a-port/39.png
deleted file mode 100644
index eae23793..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/4.png b/libkdegames/carddecks/cards-hard-a-port/4.png
deleted file mode 100644
index 9d7f80c1..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/40.png b/libkdegames/carddecks/cards-hard-a-port/40.png
deleted file mode 100644
index 733be70f..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/41.png b/libkdegames/carddecks/cards-hard-a-port/41.png
deleted file mode 100644
index b3e51b07..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/42.png b/libkdegames/carddecks/cards-hard-a-port/42.png
deleted file mode 100644
index a6f69d9f..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/43.png b/libkdegames/carddecks/cards-hard-a-port/43.png
deleted file mode 100644
index 49c20875..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/44.png b/libkdegames/carddecks/cards-hard-a-port/44.png
deleted file mode 100644
index 6fed6ead..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/45.png b/libkdegames/carddecks/cards-hard-a-port/45.png
deleted file mode 100644
index 81be70a2..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/46.png b/libkdegames/carddecks/cards-hard-a-port/46.png
deleted file mode 100644
index d82c5f60..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/47.png b/libkdegames/carddecks/cards-hard-a-port/47.png
deleted file mode 100644
index f6056465..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/48.png b/libkdegames/carddecks/cards-hard-a-port/48.png
deleted file mode 100644
index 6369f53b..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/49.png b/libkdegames/carddecks/cards-hard-a-port/49.png
deleted file mode 100644
index 49b5b53e..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/5.png b/libkdegames/carddecks/cards-hard-a-port/5.png
deleted file mode 100644
index 6ff98a13..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/50.png b/libkdegames/carddecks/cards-hard-a-port/50.png
deleted file mode 100644
index ce8e46db..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/51.png b/libkdegames/carddecks/cards-hard-a-port/51.png
deleted file mode 100644
index 46552bee..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/52.png b/libkdegames/carddecks/cards-hard-a-port/52.png
deleted file mode 100644
index b03db4a0..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/6.png b/libkdegames/carddecks/cards-hard-a-port/6.png
deleted file mode 100644
index 24fa84b0..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/7.png b/libkdegames/carddecks/cards-hard-a-port/7.png
deleted file mode 100644
index 11561878..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/8.png b/libkdegames/carddecks/cards-hard-a-port/8.png
deleted file mode 100644
index 08d124b7..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/9.png b/libkdegames/carddecks/cards-hard-a-port/9.png
deleted file mode 100644
index 14962b11..00000000
Binary files a/libkdegames/carddecks/cards-hard-a-port/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT b/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT
deleted file mode 100644
index f5575c7b..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT
+++ /dev/null
@@ -1,14 +0,0 @@
-This PySol cardset was created by T. Kirk.
-
-Copyright (C) 2000 T. Kirk <grania@mailcity.com>
-
-This transformation card set uses images from a set of trade
-cards produced in the late 19th century in the United States
-of America.  Cards of this type were given away as premiums
-with the purchase of various products.  Each of the cards
-has a different image.
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-hard-a-port/index.desktop b/libkdegames/carddecks/cards-hard-a-port/index.desktop
deleted file mode 100644
index d8e49aa5..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/index.desktop
+++ /dev/null
@@ -1,29 +0,0 @@
-[KDE Backdeck]
-Name=Hard a Port
-Name[af]=Hard 'n Poort
-Name[be]=Пампушка
-Name[bg]=Дамски
-Name[bn]=হার্ড এ পোর্ট
-Name[de]=Hart Backbord
-Name[eo]=Tenta
-Name[hi]=हार्ड ए पोर्ट
-Name[hr]=Tvrdi na portu
-Name[is]=Hart á bakborða
-Name[it]=Donnine
-Name[km]=ច្រក​រឹង
-Name[lv]=Klasisks
-Name[nds]=Hatt Backboord
-Name[ne]=कडा एउटा पोर्ट
-Name[pt_BR]=Duramente um Porto
-Name[ro]=Licenţioase
-Name[ru]=Пышка
-Name[sr]=Хард-а-порт
-Name[sr@Latn]=Hard-a-port
-Name[sv]=Dikt babord
-Name[ta]=முனையத்தை கடினமாக்கு
-Name[tg]=Даргоҳи Сахт
-Name[ven]=Port yo Khwathaho
-Name[xh]=Izibuko Esport eqinileyo
-Name[zu]=Qinisa isikhumulo
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-konqi-modern/1.png b/libkdegames/carddecks/cards-konqi-modern/1.png
deleted file mode 100644
index 68dfb0ff..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/10.png b/libkdegames/carddecks/cards-konqi-modern/10.png
deleted file mode 100644
index 6df3ad8d..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/11.png b/libkdegames/carddecks/cards-konqi-modern/11.png
deleted file mode 100644
index 665cb2a6..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/12.png b/libkdegames/carddecks/cards-konqi-modern/12.png
deleted file mode 100644
index 1f23d99e..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/13.png b/libkdegames/carddecks/cards-konqi-modern/13.png
deleted file mode 100644
index f1027fdc..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/14.png b/libkdegames/carddecks/cards-konqi-modern/14.png
deleted file mode 100644
index 80d11335..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/15.png b/libkdegames/carddecks/cards-konqi-modern/15.png
deleted file mode 100644
index 72913f7b..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/16.png b/libkdegames/carddecks/cards-konqi-modern/16.png
deleted file mode 100644
index 225f7774..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/17.png b/libkdegames/carddecks/cards-konqi-modern/17.png
deleted file mode 100644
index 0444e010..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/18.png b/libkdegames/carddecks/cards-konqi-modern/18.png
deleted file mode 100644
index f325c781..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/19.png b/libkdegames/carddecks/cards-konqi-modern/19.png
deleted file mode 100644
index 570e951e..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/2.png b/libkdegames/carddecks/cards-konqi-modern/2.png
deleted file mode 100644
index 89b2b4d5..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/20.png b/libkdegames/carddecks/cards-konqi-modern/20.png
deleted file mode 100644
index d4b47c7d..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/21.png b/libkdegames/carddecks/cards-konqi-modern/21.png
deleted file mode 100644
index 9ab04cc5..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/22.png b/libkdegames/carddecks/cards-konqi-modern/22.png
deleted file mode 100644
index 387c3203..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/23.png b/libkdegames/carddecks/cards-konqi-modern/23.png
deleted file mode 100644
index fcec2343..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/24.png b/libkdegames/carddecks/cards-konqi-modern/24.png
deleted file mode 100644
index 48c9ed02..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/25.png b/libkdegames/carddecks/cards-konqi-modern/25.png
deleted file mode 100644
index 80bbfdf1..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/26.png b/libkdegames/carddecks/cards-konqi-modern/26.png
deleted file mode 100644
index 2a879ec5..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/27.png b/libkdegames/carddecks/cards-konqi-modern/27.png
deleted file mode 100644
index 1e6141c0..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/28.png b/libkdegames/carddecks/cards-konqi-modern/28.png
deleted file mode 100644
index 1403437e..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/29.png b/libkdegames/carddecks/cards-konqi-modern/29.png
deleted file mode 100644
index 415b48cc..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/3.png b/libkdegames/carddecks/cards-konqi-modern/3.png
deleted file mode 100644
index 43067744..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/30.png b/libkdegames/carddecks/cards-konqi-modern/30.png
deleted file mode 100644
index 8a1b885d..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/31.png b/libkdegames/carddecks/cards-konqi-modern/31.png
deleted file mode 100644
index c7de49ed..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/32.png b/libkdegames/carddecks/cards-konqi-modern/32.png
deleted file mode 100644
index 57e0015f..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/33.png b/libkdegames/carddecks/cards-konqi-modern/33.png
deleted file mode 100644
index a502ae94..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/34.png b/libkdegames/carddecks/cards-konqi-modern/34.png
deleted file mode 100644
index 524768dc..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/35.png b/libkdegames/carddecks/cards-konqi-modern/35.png
deleted file mode 100644
index d15a240e..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/36.png b/libkdegames/carddecks/cards-konqi-modern/36.png
deleted file mode 100644
index b8dce3f8..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/37.png b/libkdegames/carddecks/cards-konqi-modern/37.png
deleted file mode 100644
index 2f193cc1..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/38.png b/libkdegames/carddecks/cards-konqi-modern/38.png
deleted file mode 100644
index 097d63ff..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/39.png b/libkdegames/carddecks/cards-konqi-modern/39.png
deleted file mode 100644
index a94a6009..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/4.png b/libkdegames/carddecks/cards-konqi-modern/4.png
deleted file mode 100644
index b4890c03..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/40.png b/libkdegames/carddecks/cards-konqi-modern/40.png
deleted file mode 100644
index d533469a..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/41.png b/libkdegames/carddecks/cards-konqi-modern/41.png
deleted file mode 100644
index f524f7ea..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/42.png b/libkdegames/carddecks/cards-konqi-modern/42.png
deleted file mode 100644
index 9e6ff5af..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/43.png b/libkdegames/carddecks/cards-konqi-modern/43.png
deleted file mode 100644
index 59e9e273..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/44.png b/libkdegames/carddecks/cards-konqi-modern/44.png
deleted file mode 100644
index a3114bd9..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/45.png b/libkdegames/carddecks/cards-konqi-modern/45.png
deleted file mode 100644
index 2614080b..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/46.png b/libkdegames/carddecks/cards-konqi-modern/46.png
deleted file mode 100644
index a3118981..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/47.png b/libkdegames/carddecks/cards-konqi-modern/47.png
deleted file mode 100644
index 423ec06e..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/48.png b/libkdegames/carddecks/cards-konqi-modern/48.png
deleted file mode 100644
index 5153c779..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/49.png b/libkdegames/carddecks/cards-konqi-modern/49.png
deleted file mode 100644
index 99f8ae96..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/5.png b/libkdegames/carddecks/cards-konqi-modern/5.png
deleted file mode 100644
index 5e167b1a..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/50.png b/libkdegames/carddecks/cards-konqi-modern/50.png
deleted file mode 100644
index a9c41757..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/51.png b/libkdegames/carddecks/cards-konqi-modern/51.png
deleted file mode 100644
index b322fc1b..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/52.png b/libkdegames/carddecks/cards-konqi-modern/52.png
deleted file mode 100644
index d614733f..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/6.png b/libkdegames/carddecks/cards-konqi-modern/6.png
deleted file mode 100644
index d614e646..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/7.png b/libkdegames/carddecks/cards-konqi-modern/7.png
deleted file mode 100644
index 961ac50f..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/8.png b/libkdegames/carddecks/cards-konqi-modern/8.png
deleted file mode 100644
index 1769d3db..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/9.png b/libkdegames/carddecks/cards-konqi-modern/9.png
deleted file mode 100644
index f86dcd48..00000000
Binary files a/libkdegames/carddecks/cards-konqi-modern/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/index.desktop b/libkdegames/carddecks/cards-konqi-modern/index.desktop
deleted file mode 100644
index 4dc5fe5c..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/index.desktop
+++ /dev/null
@@ -1,62 +0,0 @@
-[KDE Backdeck]
-Name=Konqi
-Name[be]=Конкі
-Name[bg]=Конки
-Name[bn]=কনকি
-Name[cs]=Konqui
-Name[eo]=Konĉja
-Name[hi]=के-ऑन्गी
-Name[it]=Konqui
-Name[lv]=Konvi
-Name[ne]=कोन्क्वी
-Name[ru]=Конки
-Name[sr]=Конки
-Name[sr@Latn]=Konki
-Name[ta]=கான்கி
-Name[tg]=Конки
-Name[uk]=Конкі
-Name[zu]=I-Konqi
-Preview=11.png
-PySol=false
-Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\n Katie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bs]=Moderni Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n     <l_layland@hotmail.com>\nKatie per Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi per Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKatie vytvořila Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKatie gan Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie von Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi von Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKatie από Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n <l_layland@hotmail.com>\nKonjo de Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonĉjo de Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKatie-ren egilea: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n     لایلند <l_layland@hotmail.com>\nKatie توسط آگنیسکا زاکووسکا\n     <agnieszka@imagegalaxy.de>\nKonqi توسط استفان اسپاتز\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n     <l_layland@hotmail.com>a\nKatie Agnieszka Czajkowskaa\n     <agnieszka@imagegalaxy.de>a\nKonqi Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n     <l_layland@hotmail.com>\nKatie par Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi par Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[is]=Nútíma Konqi - spilastokkur fjölskyldunnar\nHönnun: Laura Layland\n <l_layland@hotmail.com>\nKatie e. Agnieszka Czajkowska\n    <agnieszka@imagegalaxy.de>\nKonqi e. Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[it]=Konqui moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKatie di Agnieszka Czajkowska\n<agnieszka@imagegalaxy.de>\nKonqi di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n     <l_layland@hotmail.com>\nKatie の作者: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi の作者: Stefan Spatz \n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Katie no Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n Konkvi no Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi од Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie vun Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi vun Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ne]=आधुनिक कोन्क्की - परिवारिक कार्डडेक \nडिजाइन प्ले: लाउरा लेल्यान्ड\n     <l_layland@hotmail.com>\nKatie, अग्निज्का जज्कोस्काद्वारा\n     <agnieszka@imagegalaxy.de>\nKonqi, स्टेफान स्पार्टजद्वारा \n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n   <l_layland@hotmail.com>\nKatie door Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi door Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ru]=Современная колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКэйт нарисована Агниежкой Зайковской (Agnieszka Czajkowska) <agnieszka@imagegalaxy.de>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszky Czajkowskeja\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszke Czajkowske\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКети: Агњешка Чајковска (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKeti: Agnješka Čajkovska (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ta]=மார்டன் கான்கி - புதிய குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லெளரா லேலேண்டு\n <l_ayland@hotmail.com>\n Katie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Laylanda\n     <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi від Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n     <l_layland@hotmail.com>\nKatie pa Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi pa Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska...<agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libkdegames/carddecks/cards-penguins/1.png b/libkdegames/carddecks/cards-penguins/1.png
deleted file mode 100644
index b59022e8..00000000
Binary files a/libkdegames/carddecks/cards-penguins/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/10.png b/libkdegames/carddecks/cards-penguins/10.png
deleted file mode 100644
index d54669fe..00000000
Binary files a/libkdegames/carddecks/cards-penguins/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/11.png b/libkdegames/carddecks/cards-penguins/11.png
deleted file mode 100644
index 02c2464c..00000000
Binary files a/libkdegames/carddecks/cards-penguins/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/12.png b/libkdegames/carddecks/cards-penguins/12.png
deleted file mode 100644
index d179eb99..00000000
Binary files a/libkdegames/carddecks/cards-penguins/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/13.png b/libkdegames/carddecks/cards-penguins/13.png
deleted file mode 100644
index 135af493..00000000
Binary files a/libkdegames/carddecks/cards-penguins/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/14.png b/libkdegames/carddecks/cards-penguins/14.png
deleted file mode 100644
index 4a179917..00000000
Binary files a/libkdegames/carddecks/cards-penguins/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/15.png b/libkdegames/carddecks/cards-penguins/15.png
deleted file mode 100644
index b5238d00..00000000
Binary files a/libkdegames/carddecks/cards-penguins/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/16.png b/libkdegames/carddecks/cards-penguins/16.png
deleted file mode 100644
index 33fe6b8e..00000000
Binary files a/libkdegames/carddecks/cards-penguins/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/17.png b/libkdegames/carddecks/cards-penguins/17.png
deleted file mode 100644
index 99b77ce8..00000000
Binary files a/libkdegames/carddecks/cards-penguins/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/18.png b/libkdegames/carddecks/cards-penguins/18.png
deleted file mode 100644
index b88ae958..00000000
Binary files a/libkdegames/carddecks/cards-penguins/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/19.png b/libkdegames/carddecks/cards-penguins/19.png
deleted file mode 100644
index 532899aa..00000000
Binary files a/libkdegames/carddecks/cards-penguins/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/2.png b/libkdegames/carddecks/cards-penguins/2.png
deleted file mode 100644
index 090cfd02..00000000
Binary files a/libkdegames/carddecks/cards-penguins/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/20.png b/libkdegames/carddecks/cards-penguins/20.png
deleted file mode 100644
index ed129a32..00000000
Binary files a/libkdegames/carddecks/cards-penguins/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/21.png b/libkdegames/carddecks/cards-penguins/21.png
deleted file mode 100644
index 5bf532f7..00000000
Binary files a/libkdegames/carddecks/cards-penguins/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/22.png b/libkdegames/carddecks/cards-penguins/22.png
deleted file mode 100644
index 07c61ced..00000000
Binary files a/libkdegames/carddecks/cards-penguins/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/23.png b/libkdegames/carddecks/cards-penguins/23.png
deleted file mode 100644
index ecce302b..00000000
Binary files a/libkdegames/carddecks/cards-penguins/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/24.png b/libkdegames/carddecks/cards-penguins/24.png
deleted file mode 100644
index feee0a9e..00000000
Binary files a/libkdegames/carddecks/cards-penguins/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/25.png b/libkdegames/carddecks/cards-penguins/25.png
deleted file mode 100644
index d42f2b2b..00000000
Binary files a/libkdegames/carddecks/cards-penguins/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/26.png b/libkdegames/carddecks/cards-penguins/26.png
deleted file mode 100644
index cc5e930f..00000000
Binary files a/libkdegames/carddecks/cards-penguins/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/27.png b/libkdegames/carddecks/cards-penguins/27.png
deleted file mode 100644
index 4ae7702a..00000000
Binary files a/libkdegames/carddecks/cards-penguins/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/28.png b/libkdegames/carddecks/cards-penguins/28.png
deleted file mode 100644
index ee9b40ea..00000000
Binary files a/libkdegames/carddecks/cards-penguins/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/29.png b/libkdegames/carddecks/cards-penguins/29.png
deleted file mode 100644
index ba2dfe7d..00000000
Binary files a/libkdegames/carddecks/cards-penguins/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/3.png b/libkdegames/carddecks/cards-penguins/3.png
deleted file mode 100644
index 7f53daf9..00000000
Binary files a/libkdegames/carddecks/cards-penguins/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/30.png b/libkdegames/carddecks/cards-penguins/30.png
deleted file mode 100644
index 1486cf98..00000000
Binary files a/libkdegames/carddecks/cards-penguins/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/31.png b/libkdegames/carddecks/cards-penguins/31.png
deleted file mode 100644
index 805d39e9..00000000
Binary files a/libkdegames/carddecks/cards-penguins/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/32.png b/libkdegames/carddecks/cards-penguins/32.png
deleted file mode 100644
index 4a1b12f0..00000000
Binary files a/libkdegames/carddecks/cards-penguins/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/33.png b/libkdegames/carddecks/cards-penguins/33.png
deleted file mode 100644
index b8ae8965..00000000
Binary files a/libkdegames/carddecks/cards-penguins/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/34.png b/libkdegames/carddecks/cards-penguins/34.png
deleted file mode 100644
index e2ce160c..00000000
Binary files a/libkdegames/carddecks/cards-penguins/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/35.png b/libkdegames/carddecks/cards-penguins/35.png
deleted file mode 100644
index 580c4d12..00000000
Binary files a/libkdegames/carddecks/cards-penguins/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/36.png b/libkdegames/carddecks/cards-penguins/36.png
deleted file mode 100644
index 296d4c7c..00000000
Binary files a/libkdegames/carddecks/cards-penguins/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/37.png b/libkdegames/carddecks/cards-penguins/37.png
deleted file mode 100644
index fbbefa84..00000000
Binary files a/libkdegames/carddecks/cards-penguins/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/38.png b/libkdegames/carddecks/cards-penguins/38.png
deleted file mode 100644
index 7d9a34bd..00000000
Binary files a/libkdegames/carddecks/cards-penguins/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/39.png b/libkdegames/carddecks/cards-penguins/39.png
deleted file mode 100644
index 23ffffaa..00000000
Binary files a/libkdegames/carddecks/cards-penguins/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/4.png b/libkdegames/carddecks/cards-penguins/4.png
deleted file mode 100644
index 79ced119..00000000
Binary files a/libkdegames/carddecks/cards-penguins/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/40.png b/libkdegames/carddecks/cards-penguins/40.png
deleted file mode 100644
index b9bed320..00000000
Binary files a/libkdegames/carddecks/cards-penguins/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/41.png b/libkdegames/carddecks/cards-penguins/41.png
deleted file mode 100644
index c5a65385..00000000
Binary files a/libkdegames/carddecks/cards-penguins/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/42.png b/libkdegames/carddecks/cards-penguins/42.png
deleted file mode 100644
index aba32e3e..00000000
Binary files a/libkdegames/carddecks/cards-penguins/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/43.png b/libkdegames/carddecks/cards-penguins/43.png
deleted file mode 100644
index 04623c1e..00000000
Binary files a/libkdegames/carddecks/cards-penguins/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/44.png b/libkdegames/carddecks/cards-penguins/44.png
deleted file mode 100644
index 7e6069e6..00000000
Binary files a/libkdegames/carddecks/cards-penguins/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/45.png b/libkdegames/carddecks/cards-penguins/45.png
deleted file mode 100644
index 36b67487..00000000
Binary files a/libkdegames/carddecks/cards-penguins/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/46.png b/libkdegames/carddecks/cards-penguins/46.png
deleted file mode 100644
index 80216f18..00000000
Binary files a/libkdegames/carddecks/cards-penguins/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/47.png b/libkdegames/carddecks/cards-penguins/47.png
deleted file mode 100644
index 9fb16882..00000000
Binary files a/libkdegames/carddecks/cards-penguins/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/48.png b/libkdegames/carddecks/cards-penguins/48.png
deleted file mode 100644
index 12f928e6..00000000
Binary files a/libkdegames/carddecks/cards-penguins/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/49.png b/libkdegames/carddecks/cards-penguins/49.png
deleted file mode 100644
index 9119c351..00000000
Binary files a/libkdegames/carddecks/cards-penguins/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/5.png b/libkdegames/carddecks/cards-penguins/5.png
deleted file mode 100644
index f18a3a57..00000000
Binary files a/libkdegames/carddecks/cards-penguins/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/50.png b/libkdegames/carddecks/cards-penguins/50.png
deleted file mode 100644
index e3dacdba..00000000
Binary files a/libkdegames/carddecks/cards-penguins/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/51.png b/libkdegames/carddecks/cards-penguins/51.png
deleted file mode 100644
index fa46ff72..00000000
Binary files a/libkdegames/carddecks/cards-penguins/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/52.png b/libkdegames/carddecks/cards-penguins/52.png
deleted file mode 100644
index 1522ed3f..00000000
Binary files a/libkdegames/carddecks/cards-penguins/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/6.png b/libkdegames/carddecks/cards-penguins/6.png
deleted file mode 100644
index 9d84eb8d..00000000
Binary files a/libkdegames/carddecks/cards-penguins/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/7.png b/libkdegames/carddecks/cards-penguins/7.png
deleted file mode 100644
index 2b8d0768..00000000
Binary files a/libkdegames/carddecks/cards-penguins/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/8.png b/libkdegames/carddecks/cards-penguins/8.png
deleted file mode 100644
index 933be6e7..00000000
Binary files a/libkdegames/carddecks/cards-penguins/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/9.png b/libkdegames/carddecks/cards-penguins/9.png
deleted file mode 100644
index 669d6e00..00000000
Binary files a/libkdegames/carddecks/cards-penguins/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-penguins/COPYRIGHT b/libkdegames/carddecks/cards-penguins/COPYRIGHT
deleted file mode 100644
index cf87594e..00000000
--- a/libkdegames/carddecks/cards-penguins/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-This PySol cardset was adapted from the Ace of Penguins 1.0.
-http://www.delorie.com/store/ace/
-
-Copyright (C) 1998 DJ Delorie <dj@delorie.com>
-Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-penguins/index.desktop b/libkdegames/carddecks/cards-penguins/index.desktop
deleted file mode 100644
index 2fe12197..00000000
--- a/libkdegames/carddecks/cards-penguins/index.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Backdeck]
-Name=Penguins
-Name[af]=Pikkewyne
-Name[ar]=بطاريق
-Name[az]=Pinqvinlər
-Name[be]=Пінгвіны
-Name[bg]=Пингвин
-Name[bn]=পেঙ্গুইন
-Name[br]=Pennoù-gwenn
-Name[bs]=Pingvini
-Name[ca]=Pingüins
-Name[cs]=Tučňáci
-Name[da]=Pingviner
-Name[de]=Pinguine
-Name[el]=Πιγκουίνοι
-Name[eo]=Pingvenoj
-Name[es]=Pingüinos
-Name[et]=Pingviinid
-Name[eu]=Pinguinoak
-Name[fa]=پنگوئنها
-Name[fi]=Pingviinit
-Name[fr]=Pingouins
-Name[gl]=Pingüíns
-Name[he]=פנגוינים
-Name[hi]=पेंग्विन्स
-Name[hr]=Pingvini
-Name[hu]=Pingvinek
-Name[is]=Mörgæsir
-Name[it]=Pinguini
-Name[km]=ភេនឃ្វីន
-Name[ko]=펭귄
-Name[lt]=Pingvinai
-Name[lv]=Pingvīni
-Name[mk]=Пингвини
-Name[mt]=Pingwini
-Name[nb]=Pingviner
-Name[nds]=Pinguins
-Name[ne]=पेन्गुइन
-Name[nl]=Pinguïns
-Name[nn]=Pingvinar
-Name[pa]=ਪੈਂਗੂਇਨ
-Name[pl]=Pingwiny
-Name[pt]=Pinguins
-Name[pt_BR]=Pingüins
-Name[ro]=Pinguini
-Name[ru]=Пингвины
-Name[se]=Pingviinnat
-Name[sk]=Tučniaci
-Name[sl]=Pingvini
-Name[sr]=Пингвини
-Name[sr@Latn]=Pingvini
-Name[sv]=Pingviner
-Name[ta]=பென்குயின்கள்
-Name[tg]=Пингвинҳо
-Name[th]=เพนกวิน
-Name[tr]=Penguenler
-Name[uk]=Пінгвіни
-Name[uz]=Pingvinlar
-Name[uz@cyrillic]=Пингвинлар
-Name[vi]=Chim cánh cụt 
-Name[wa]=Pingwins
-Name[xh]=iintaka zaselwandle
-Name[zh_CN]=企鹅
-Name[zh_TW]=企鵝
-Name[zu]=Izinyoni zasemanzini
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-spaced/1.png b/libkdegames/carddecks/cards-spaced/1.png
deleted file mode 100644
index 62220b38..00000000
Binary files a/libkdegames/carddecks/cards-spaced/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/10.png b/libkdegames/carddecks/cards-spaced/10.png
deleted file mode 100644
index d0bcd828..00000000
Binary files a/libkdegames/carddecks/cards-spaced/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/11.png b/libkdegames/carddecks/cards-spaced/11.png
deleted file mode 100644
index b4e6016e..00000000
Binary files a/libkdegames/carddecks/cards-spaced/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/12.png b/libkdegames/carddecks/cards-spaced/12.png
deleted file mode 100644
index 45ab5cf5..00000000
Binary files a/libkdegames/carddecks/cards-spaced/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/13.png b/libkdegames/carddecks/cards-spaced/13.png
deleted file mode 100644
index 37e7c2ce..00000000
Binary files a/libkdegames/carddecks/cards-spaced/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/14.png b/libkdegames/carddecks/cards-spaced/14.png
deleted file mode 100644
index 97af1f02..00000000
Binary files a/libkdegames/carddecks/cards-spaced/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/15.png b/libkdegames/carddecks/cards-spaced/15.png
deleted file mode 100644
index fb2fcc76..00000000
Binary files a/libkdegames/carddecks/cards-spaced/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/16.png b/libkdegames/carddecks/cards-spaced/16.png
deleted file mode 100644
index 9042b161..00000000
Binary files a/libkdegames/carddecks/cards-spaced/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/17.png b/libkdegames/carddecks/cards-spaced/17.png
deleted file mode 100644
index a67b2832..00000000
Binary files a/libkdegames/carddecks/cards-spaced/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/18.png b/libkdegames/carddecks/cards-spaced/18.png
deleted file mode 100644
index f4c8a04b..00000000
Binary files a/libkdegames/carddecks/cards-spaced/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/19.png b/libkdegames/carddecks/cards-spaced/19.png
deleted file mode 100644
index fac5b199..00000000
Binary files a/libkdegames/carddecks/cards-spaced/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/2.png b/libkdegames/carddecks/cards-spaced/2.png
deleted file mode 100644
index af3c76fd..00000000
Binary files a/libkdegames/carddecks/cards-spaced/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/20.png b/libkdegames/carddecks/cards-spaced/20.png
deleted file mode 100644
index 12d43520..00000000
Binary files a/libkdegames/carddecks/cards-spaced/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/21.png b/libkdegames/carddecks/cards-spaced/21.png
deleted file mode 100644
index ea715adc..00000000
Binary files a/libkdegames/carddecks/cards-spaced/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/22.png b/libkdegames/carddecks/cards-spaced/22.png
deleted file mode 100644
index 13e6d7ae..00000000
Binary files a/libkdegames/carddecks/cards-spaced/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/23.png b/libkdegames/carddecks/cards-spaced/23.png
deleted file mode 100644
index f43a745f..00000000
Binary files a/libkdegames/carddecks/cards-spaced/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/24.png b/libkdegames/carddecks/cards-spaced/24.png
deleted file mode 100644
index 810f59ef..00000000
Binary files a/libkdegames/carddecks/cards-spaced/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/25.png b/libkdegames/carddecks/cards-spaced/25.png
deleted file mode 100644
index 836b9863..00000000
Binary files a/libkdegames/carddecks/cards-spaced/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/26.png b/libkdegames/carddecks/cards-spaced/26.png
deleted file mode 100644
index 27bc29bf..00000000
Binary files a/libkdegames/carddecks/cards-spaced/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/27.png b/libkdegames/carddecks/cards-spaced/27.png
deleted file mode 100644
index a44baa51..00000000
Binary files a/libkdegames/carddecks/cards-spaced/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/28.png b/libkdegames/carddecks/cards-spaced/28.png
deleted file mode 100644
index af480ddd..00000000
Binary files a/libkdegames/carddecks/cards-spaced/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/29.png b/libkdegames/carddecks/cards-spaced/29.png
deleted file mode 100644
index 622968f4..00000000
Binary files a/libkdegames/carddecks/cards-spaced/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/3.png b/libkdegames/carddecks/cards-spaced/3.png
deleted file mode 100644
index 5b31e13b..00000000
Binary files a/libkdegames/carddecks/cards-spaced/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/30.png b/libkdegames/carddecks/cards-spaced/30.png
deleted file mode 100644
index e43e9bd0..00000000
Binary files a/libkdegames/carddecks/cards-spaced/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/31.png b/libkdegames/carddecks/cards-spaced/31.png
deleted file mode 100644
index 382d0c11..00000000
Binary files a/libkdegames/carddecks/cards-spaced/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/32.png b/libkdegames/carddecks/cards-spaced/32.png
deleted file mode 100644
index 969e921d..00000000
Binary files a/libkdegames/carddecks/cards-spaced/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/33.png b/libkdegames/carddecks/cards-spaced/33.png
deleted file mode 100644
index e9dbd109..00000000
Binary files a/libkdegames/carddecks/cards-spaced/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/34.png b/libkdegames/carddecks/cards-spaced/34.png
deleted file mode 100644
index 49d26d66..00000000
Binary files a/libkdegames/carddecks/cards-spaced/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/35.png b/libkdegames/carddecks/cards-spaced/35.png
deleted file mode 100644
index f60149e5..00000000
Binary files a/libkdegames/carddecks/cards-spaced/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/36.png b/libkdegames/carddecks/cards-spaced/36.png
deleted file mode 100644
index 49b7044a..00000000
Binary files a/libkdegames/carddecks/cards-spaced/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/37.png b/libkdegames/carddecks/cards-spaced/37.png
deleted file mode 100644
index dafb3402..00000000
Binary files a/libkdegames/carddecks/cards-spaced/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/38.png b/libkdegames/carddecks/cards-spaced/38.png
deleted file mode 100644
index f1d7e030..00000000
Binary files a/libkdegames/carddecks/cards-spaced/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/39.png b/libkdegames/carddecks/cards-spaced/39.png
deleted file mode 100644
index 8e045381..00000000
Binary files a/libkdegames/carddecks/cards-spaced/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/4.png b/libkdegames/carddecks/cards-spaced/4.png
deleted file mode 100644
index e8ceab32..00000000
Binary files a/libkdegames/carddecks/cards-spaced/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/40.png b/libkdegames/carddecks/cards-spaced/40.png
deleted file mode 100644
index de378577..00000000
Binary files a/libkdegames/carddecks/cards-spaced/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/41.png b/libkdegames/carddecks/cards-spaced/41.png
deleted file mode 100644
index 0e4f3382..00000000
Binary files a/libkdegames/carddecks/cards-spaced/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/42.png b/libkdegames/carddecks/cards-spaced/42.png
deleted file mode 100644
index 910524a2..00000000
Binary files a/libkdegames/carddecks/cards-spaced/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/43.png b/libkdegames/carddecks/cards-spaced/43.png
deleted file mode 100644
index f9f218bf..00000000
Binary files a/libkdegames/carddecks/cards-spaced/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/44.png b/libkdegames/carddecks/cards-spaced/44.png
deleted file mode 100644
index fe64a155..00000000
Binary files a/libkdegames/carddecks/cards-spaced/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/45.png b/libkdegames/carddecks/cards-spaced/45.png
deleted file mode 100644
index d914f7b1..00000000
Binary files a/libkdegames/carddecks/cards-spaced/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/46.png b/libkdegames/carddecks/cards-spaced/46.png
deleted file mode 100644
index f6953f9d..00000000
Binary files a/libkdegames/carddecks/cards-spaced/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/47.png b/libkdegames/carddecks/cards-spaced/47.png
deleted file mode 100644
index bfaa56ff..00000000
Binary files a/libkdegames/carddecks/cards-spaced/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/48.png b/libkdegames/carddecks/cards-spaced/48.png
deleted file mode 100644
index b5d46c34..00000000
Binary files a/libkdegames/carddecks/cards-spaced/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/49.png b/libkdegames/carddecks/cards-spaced/49.png
deleted file mode 100644
index f890b5db..00000000
Binary files a/libkdegames/carddecks/cards-spaced/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/5.png b/libkdegames/carddecks/cards-spaced/5.png
deleted file mode 100644
index e160f9b3..00000000
Binary files a/libkdegames/carddecks/cards-spaced/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/50.png b/libkdegames/carddecks/cards-spaced/50.png
deleted file mode 100644
index 488eb5fa..00000000
Binary files a/libkdegames/carddecks/cards-spaced/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/51.png b/libkdegames/carddecks/cards-spaced/51.png
deleted file mode 100644
index 4d1f41b0..00000000
Binary files a/libkdegames/carddecks/cards-spaced/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/52.png b/libkdegames/carddecks/cards-spaced/52.png
deleted file mode 100644
index 345579f4..00000000
Binary files a/libkdegames/carddecks/cards-spaced/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/6.png b/libkdegames/carddecks/cards-spaced/6.png
deleted file mode 100644
index 90e8e998..00000000
Binary files a/libkdegames/carddecks/cards-spaced/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/7.png b/libkdegames/carddecks/cards-spaced/7.png
deleted file mode 100644
index 374ee771..00000000
Binary files a/libkdegames/carddecks/cards-spaced/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/8.png b/libkdegames/carddecks/cards-spaced/8.png
deleted file mode 100644
index 987a24c6..00000000
Binary files a/libkdegames/carddecks/cards-spaced/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/9.png b/libkdegames/carddecks/cards-spaced/9.png
deleted file mode 100644
index f2855e9f..00000000
Binary files a/libkdegames/carddecks/cards-spaced/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-spaced/COPYRIGHT b/libkdegames/carddecks/cards-spaced/COPYRIGHT
deleted file mode 100644
index f54e3a4e..00000000
--- a/libkdegames/carddecks/cards-spaced/COPYRIGHT
+++ /dev/null
@@ -1,16 +0,0 @@
-The backs for these cards came from the U.S. National Aeronautics
-and Space Administration.  The original images can be found at:
-http://antwrp.gsfc.nasa.gov/apod/archivepix.html
-along with a lot more just like 'em.
-
-The penguins are by "The PAPA" <papalini@biancaneve.ing.unifi.it>
-and can be found at:
-http://biancaneve.ing.unifi.it/~papalini/
-and there's a lot more of those too.
-
-Copyright (C) 1999 T. Kirk <grania@mailcity.com>
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-spaced/index.desktop b/libkdegames/carddecks/cards-spaced/index.desktop
deleted file mode 100644
index 0e9eadf0..00000000
--- a/libkdegames/carddecks/cards-spaced/index.desktop
+++ /dev/null
@@ -1,46 +0,0 @@
-[KDE Backdeck]
-Name=Spaced
-Name[af]=Gespasieer
-Name[az]=Boşluqlu
-Name[be]=Космас
-Name[bg]=Звезден
-Name[bn]=স্পেসযুক্ত
-Name[ca]=Espaiades
-Name[cs]=Vesmír
-Name[de]=Mit Abstand
-Name[eo]=Komika
-Name[es]=Espaciadas
-Name[eu]=Tartea
-Name[fr]=Spatial
-Name[gl]=Espaciadas
-Name[hi]=स्पेस्ड
-Name[hu]=Űr
-Name[is]=Speisað
-Name[it]=Spaziale
-Name[ko]=우주
-Name[lv]=Kosmisks
-Name[mk]=Раздалечени
-Name[mt]=Spazzjat
-Name[nb]=Rom-duell
-Name[nds]=Afstand
-Name[ne]=खाली स्थान
-Name[nl]=Ruimtelijk
-Name[nso]=Beetswe Sekgoba
-Name[pl]=Przestrzenny
-Name[pt]=Espacial
-Name[pt_BR]=Espaçado
-Name[ro]=Spaţiat
-Name[ru]=Космос
-Name[sl]=Vesoljski dvoboj
-Name[sr]=Размакнут
-Name[sr@Latn]=Razmaknut
-Name[sv]=Spejsad
-Name[ta]=இடம் விடப்பட்ட
-Name[tg]=Кайҳонӣ
-Name[tr]=Boşluklu
-Name[uk]=Космічний
-Name[ven]=Hu na zwikala
-Name[xh]=ukugqagqeneyo
-Name[zu]=Kunezikhala
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-warwick/0.png b/libkdegames/carddecks/cards-warwick/0.png
deleted file mode 100644
index e8fc5c76..00000000
Binary files a/libkdegames/carddecks/cards-warwick/0.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/1.png b/libkdegames/carddecks/cards-warwick/1.png
deleted file mode 100644
index 79fc960c..00000000
Binary files a/libkdegames/carddecks/cards-warwick/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/10.png b/libkdegames/carddecks/cards-warwick/10.png
deleted file mode 100644
index 9b459b5c..00000000
Binary files a/libkdegames/carddecks/cards-warwick/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/105.png b/libkdegames/carddecks/cards-warwick/105.png
deleted file mode 100644
index 0f49bdd9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/105.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/106.png b/libkdegames/carddecks/cards-warwick/106.png
deleted file mode 100644
index 4e2371c1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/106.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/107.png b/libkdegames/carddecks/cards-warwick/107.png
deleted file mode 100644
index c7a19052..00000000
Binary files a/libkdegames/carddecks/cards-warwick/107.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/108.png b/libkdegames/carddecks/cards-warwick/108.png
deleted file mode 100644
index 09ee0a0a..00000000
Binary files a/libkdegames/carddecks/cards-warwick/108.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/109.png b/libkdegames/carddecks/cards-warwick/109.png
deleted file mode 100644
index a48b134c..00000000
Binary files a/libkdegames/carddecks/cards-warwick/109.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/11.png b/libkdegames/carddecks/cards-warwick/11.png
deleted file mode 100644
index a78f94b7..00000000
Binary files a/libkdegames/carddecks/cards-warwick/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/110.png b/libkdegames/carddecks/cards-warwick/110.png
deleted file mode 100644
index 2a3fccd9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/110.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/111.png b/libkdegames/carddecks/cards-warwick/111.png
deleted file mode 100644
index 20c9f0f9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/111.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/112.png b/libkdegames/carddecks/cards-warwick/112.png
deleted file mode 100644
index 90935873..00000000
Binary files a/libkdegames/carddecks/cards-warwick/112.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/113.png b/libkdegames/carddecks/cards-warwick/113.png
deleted file mode 100644
index 7df5d9b1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/113.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/114.png b/libkdegames/carddecks/cards-warwick/114.png
deleted file mode 100644
index 062ae319..00000000
Binary files a/libkdegames/carddecks/cards-warwick/114.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/115.png b/libkdegames/carddecks/cards-warwick/115.png
deleted file mode 100644
index fd4b83b4..00000000
Binary files a/libkdegames/carddecks/cards-warwick/115.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/116.png b/libkdegames/carddecks/cards-warwick/116.png
deleted file mode 100644
index 7f1c0dcd..00000000
Binary files a/libkdegames/carddecks/cards-warwick/116.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/12.png b/libkdegames/carddecks/cards-warwick/12.png
deleted file mode 100644
index 41d93ef2..00000000
Binary files a/libkdegames/carddecks/cards-warwick/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/13.png b/libkdegames/carddecks/cards-warwick/13.png
deleted file mode 100644
index b990c512..00000000
Binary files a/libkdegames/carddecks/cards-warwick/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/14.png b/libkdegames/carddecks/cards-warwick/14.png
deleted file mode 100644
index 45b94a15..00000000
Binary files a/libkdegames/carddecks/cards-warwick/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/15.png b/libkdegames/carddecks/cards-warwick/15.png
deleted file mode 100644
index 46c1f3f6..00000000
Binary files a/libkdegames/carddecks/cards-warwick/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/16.png b/libkdegames/carddecks/cards-warwick/16.png
deleted file mode 100644
index d8d118f9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/17.png b/libkdegames/carddecks/cards-warwick/17.png
deleted file mode 100644
index e6e0aa93..00000000
Binary files a/libkdegames/carddecks/cards-warwick/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/18.png b/libkdegames/carddecks/cards-warwick/18.png
deleted file mode 100644
index eb84255b..00000000
Binary files a/libkdegames/carddecks/cards-warwick/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/19.png b/libkdegames/carddecks/cards-warwick/19.png
deleted file mode 100644
index 88d4d6d9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/2.png b/libkdegames/carddecks/cards-warwick/2.png
deleted file mode 100644
index 98e798a1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/20.png b/libkdegames/carddecks/cards-warwick/20.png
deleted file mode 100644
index 4f75de50..00000000
Binary files a/libkdegames/carddecks/cards-warwick/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/21.png b/libkdegames/carddecks/cards-warwick/21.png
deleted file mode 100644
index 39bba2f2..00000000
Binary files a/libkdegames/carddecks/cards-warwick/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/22.png b/libkdegames/carddecks/cards-warwick/22.png
deleted file mode 100644
index 733c396d..00000000
Binary files a/libkdegames/carddecks/cards-warwick/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/23.png b/libkdegames/carddecks/cards-warwick/23.png
deleted file mode 100644
index ab00c341..00000000
Binary files a/libkdegames/carddecks/cards-warwick/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/24.png b/libkdegames/carddecks/cards-warwick/24.png
deleted file mode 100644
index eeb73bdd..00000000
Binary files a/libkdegames/carddecks/cards-warwick/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/25.png b/libkdegames/carddecks/cards-warwick/25.png
deleted file mode 100644
index 25715b2f..00000000
Binary files a/libkdegames/carddecks/cards-warwick/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/26.png b/libkdegames/carddecks/cards-warwick/26.png
deleted file mode 100644
index e248ded1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/27.png b/libkdegames/carddecks/cards-warwick/27.png
deleted file mode 100644
index 1bb2ab90..00000000
Binary files a/libkdegames/carddecks/cards-warwick/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/28.png b/libkdegames/carddecks/cards-warwick/28.png
deleted file mode 100644
index 33085ffb..00000000
Binary files a/libkdegames/carddecks/cards-warwick/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/29.png b/libkdegames/carddecks/cards-warwick/29.png
deleted file mode 100644
index 3f15d8d9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/3.png b/libkdegames/carddecks/cards-warwick/3.png
deleted file mode 100644
index 7f298774..00000000
Binary files a/libkdegames/carddecks/cards-warwick/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/30.png b/libkdegames/carddecks/cards-warwick/30.png
deleted file mode 100644
index ce1f2dd9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/31.png b/libkdegames/carddecks/cards-warwick/31.png
deleted file mode 100644
index fadee1b1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/32.png b/libkdegames/carddecks/cards-warwick/32.png
deleted file mode 100644
index 4d4391d2..00000000
Binary files a/libkdegames/carddecks/cards-warwick/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/33.png b/libkdegames/carddecks/cards-warwick/33.png
deleted file mode 100644
index 7d1a106f..00000000
Binary files a/libkdegames/carddecks/cards-warwick/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/34.png b/libkdegames/carddecks/cards-warwick/34.png
deleted file mode 100644
index 8d2197e7..00000000
Binary files a/libkdegames/carddecks/cards-warwick/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/35.png b/libkdegames/carddecks/cards-warwick/35.png
deleted file mode 100644
index e8f5789d..00000000
Binary files a/libkdegames/carddecks/cards-warwick/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/36.png b/libkdegames/carddecks/cards-warwick/36.png
deleted file mode 100644
index 32bd75b8..00000000
Binary files a/libkdegames/carddecks/cards-warwick/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/37.png b/libkdegames/carddecks/cards-warwick/37.png
deleted file mode 100644
index 8a85b206..00000000
Binary files a/libkdegames/carddecks/cards-warwick/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/38.png b/libkdegames/carddecks/cards-warwick/38.png
deleted file mode 100644
index edc98fa9..00000000
Binary files a/libkdegames/carddecks/cards-warwick/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/39.png b/libkdegames/carddecks/cards-warwick/39.png
deleted file mode 100644
index 6ac9b1ab..00000000
Binary files a/libkdegames/carddecks/cards-warwick/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/4.png b/libkdegames/carddecks/cards-warwick/4.png
deleted file mode 100644
index ba94daeb..00000000
Binary files a/libkdegames/carddecks/cards-warwick/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/40.png b/libkdegames/carddecks/cards-warwick/40.png
deleted file mode 100644
index 046f281e..00000000
Binary files a/libkdegames/carddecks/cards-warwick/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/41.png b/libkdegames/carddecks/cards-warwick/41.png
deleted file mode 100644
index 278f7242..00000000
Binary files a/libkdegames/carddecks/cards-warwick/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/42.png b/libkdegames/carddecks/cards-warwick/42.png
deleted file mode 100644
index e0c8857d..00000000
Binary files a/libkdegames/carddecks/cards-warwick/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/43.png b/libkdegames/carddecks/cards-warwick/43.png
deleted file mode 100644
index 126b5d8e..00000000
Binary files a/libkdegames/carddecks/cards-warwick/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/44.png b/libkdegames/carddecks/cards-warwick/44.png
deleted file mode 100644
index 220f6e45..00000000
Binary files a/libkdegames/carddecks/cards-warwick/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/45.png b/libkdegames/carddecks/cards-warwick/45.png
deleted file mode 100644
index 0a5742e1..00000000
Binary files a/libkdegames/carddecks/cards-warwick/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/46.png b/libkdegames/carddecks/cards-warwick/46.png
deleted file mode 100644
index f4312a3b..00000000
Binary files a/libkdegames/carddecks/cards-warwick/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/47.png b/libkdegames/carddecks/cards-warwick/47.png
deleted file mode 100644
index a4495a2e..00000000
Binary files a/libkdegames/carddecks/cards-warwick/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/48.png b/libkdegames/carddecks/cards-warwick/48.png
deleted file mode 100644
index 039755f8..00000000
Binary files a/libkdegames/carddecks/cards-warwick/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/49.png b/libkdegames/carddecks/cards-warwick/49.png
deleted file mode 100644
index dd7b9779..00000000
Binary files a/libkdegames/carddecks/cards-warwick/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/5.png b/libkdegames/carddecks/cards-warwick/5.png
deleted file mode 100644
index d881d1a8..00000000
Binary files a/libkdegames/carddecks/cards-warwick/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/50.png b/libkdegames/carddecks/cards-warwick/50.png
deleted file mode 100644
index 5840d1a7..00000000
Binary files a/libkdegames/carddecks/cards-warwick/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/51.png b/libkdegames/carddecks/cards-warwick/51.png
deleted file mode 100644
index 04628627..00000000
Binary files a/libkdegames/carddecks/cards-warwick/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/52.png b/libkdegames/carddecks/cards-warwick/52.png
deleted file mode 100644
index 07efb60a..00000000
Binary files a/libkdegames/carddecks/cards-warwick/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/6.png b/libkdegames/carddecks/cards-warwick/6.png
deleted file mode 100644
index dbe64d0a..00000000
Binary files a/libkdegames/carddecks/cards-warwick/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/7.png b/libkdegames/carddecks/cards-warwick/7.png
deleted file mode 100644
index 16176ad2..00000000
Binary files a/libkdegames/carddecks/cards-warwick/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/8.png b/libkdegames/carddecks/cards-warwick/8.png
deleted file mode 100644
index f62b3441..00000000
Binary files a/libkdegames/carddecks/cards-warwick/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/9.png b/libkdegames/carddecks/cards-warwick/9.png
deleted file mode 100644
index a773d309..00000000
Binary files a/libkdegames/carddecks/cards-warwick/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-warwick/index.desktop b/libkdegames/carddecks/cards-warwick/index.desktop
deleted file mode 100644
index 042b6f1b..00000000
--- a/libkdegames/carddecks/cards-warwick/index.desktop
+++ /dev/null
@@ -1,126 +0,0 @@
-[KDE Backdeck]
-Name=Blue Balloon
-Name[af]=Blou Ballon
-Name[ar]=بالون أزرق
-Name[az]=Göy Balon
-Name[be]=Паветраны шар
-Name[bg]=Син балон
-Name[bn]=নীল বেলুন
-Name[br]=Boull glas
-Name[bs]=Plavi balon
-Name[ca]=Pilota blava
-Name[cs]=Modrý balón
-Name[cy]=Balwn Glas
-Name[da]=Blå ballon
-Name[de]=Blauer Ballon
-Name[el]=Μπλε μπαλόνι
-Name[eo]=Blua balono
-Name[es]=Globo azul
-Name[et]=Sinine õhupall
-Name[eu]=Globo urdina
-Name[fi]=Sininen pallo
-Name[fr]=Ballon bleu
-Name[gl]=Globo azul
-Name[he]=בלון כחול
-Name[hi]=ब्लू बलून
-Name[hr]=Plavi balon
-Name[hu]=Kék léggömb
-Name[is]=Blá blaðra
-Name[it]=Pallone blu
-Name[ja]=青風船
-Name[km]=បាល់​ខៀវ
-Name[ko]=파란 풍선
-Name[lt]=Mėlynas balionas
-Name[lv]=Zili baloni
-Name[mk]=Син балон
-Name[mt]=Bużżieqa Blu
-Name[nb]=Blå ballong
-Name[nds]=Blaag Ballon
-Name[ne]=निलो बेलुन
-Name[nl]=Blauwe ballon
-Name[nn]=Blå ballong
-Name[pa]=ਨੀਲਾ ਗੁਬਰਾ
-Name[pl]=Niebieski balon
-Name[pt]=Balão Azul
-Name[pt_BR]=Balão Azul
-Name[ro]=Balon albastru
-Name[ru]=Воздушный шар
-Name[se]=Alit balloŋga
-Name[sk]=Modrý balón
-Name[sl]=Modri balon
-Name[sr]=Плави балон
-Name[sr@Latn]=Plavi balon
-Name[sv]=Blå ballong
-Name[ta]=நீல பலூன்
-Name[tg]=Курраҳои Ҳавоӣ
-Name[th]=ลูกโป่งสีฟ้า - K
-Name[tr]=Mavi Balon
-Name[uk]=Блакитна кулька
-Name[ven]=Baloni la muvhala wa Lutombo 
-Name[vi]=Bóng bay xanh 
-Name[xh]=Ibhaluni eblowu
-Name[zh_CN]=蓝气球
-Name[zh_TW]=藍色氣球
-Name[zu]=Ibhelunde eliluhlaza
-Preview=11.png
-PySol=false
-Comment=Card set supplied by Warwick Allison
-Comment[af]=Kaart stel verskaf deur Warwick Allison
-Comment[az]=Warwick Allison tərəfindən düzəldilən kart dəstəsi
-Comment[be]=Калода картаў ад Ворвіка Элісана (Warwick Allison)
-Comment[bg]=Колода карти от Warwick Allison
-Comment[bn]=কার্ডের সেট সরবরাহ করেছেন ওয়ারউইক এল্লিসন
-Comment[bs]=Špil je dostavio Warwick Allison
-Comment[ca]=Joc de cartes aportat per Warwick Allison
-Comment[cs]=Sada karet od Warwicka Allisona
-Comment[cy]=Set cerdiau wedi ei ddarparu gan Warwick Allison
-Comment[da]=Kortspil fra Warwick Allison
-Comment[de]=Karten von Warwick Allison
-Comment[el]=Σετ καρτών από τον Warwick Allison
-Comment[eo]=Kartaro donita de Warwick Allison
-Comment[es]=Juego de cartas suministrado por Warwick Allison
-Comment[et]=Warwick Allison'i poolt pakutud kaardipakk
-Comment[eu]=Warwick Allison-ek emandako karta-sorta
-Comment[fa]=مجموعه کارت توسط وارویک آلیسون تهیه شد
-Comment[fi]=Warwick Allison toimittama korttipakka
-Comment[fr]=Jeu de cartes fourni par Warwick Allison
-Comment[gl]=Baralla proporcionada por Warwick Allison
-Comment[he]=ערכת הקלפים סופקה על ידי וורויק אליסון
-Comment[hi]=ताश की गड्डी वारविक एलीसन द्वारा प्रदत्त किया गया
-Comment[hr]=Set karata, poklonio Warwick Allison
-Comment[hu]=Warwick Allison kártyacsomagja
-Comment[is]=Spilastokkur eftir Warwick Allison
-Comment[it]=Mazzo di carte fornito da Warwick Allison
-Comment[ja]=Warwick Allison 作のカードセット
-Comment[km]=បៀរ​ត្រូវ​កំណត់​ផ្ដល់​ដោយ Warwick Allison
-Comment[ko]=Warwick Allison이 만든 카드 셋
-Comment[lt]=Warwick Allison kortų rinkinys
-Comment[lv]=Kāršu komplekts no Warwick Allison
-Comment[mk]=Комплетот карти е обезбеден од Ворвик Алисон (Warwick Allison)
-Comment[mt]=Sett ta' karti mogħti minn Warwick Allison
-Comment[nb]=Kortstokk levert av Warwick Allison
-Comment[nds]=Koorten vun Warwick Allison
-Comment[ne]=वारविक एलिसोनद्वारा वितरण गरिएको कार्ड सेट
-Comment[nl]=Kaartset, geleverd door Warwick Allison
-Comment[nn]=Kortstokk frå Warwick Allison
-Comment[pl]=Zestaw kart dostarczony przez Warwicka Allisona
-Comment[pt]=Baralho de cartas fornecido por Warwick Allison
-Comment[pt_BR]=Jogo de cartas fornecido por Warwick Allison
-Comment[ro]=Set de cărţi de joc de Warwick Allison
-Comment[ru]=Колода карт от Warwick Allison
-Comment[sk]=Balíček kariet od Warwicka Allisona
-Comment[sl]=Nabor kart od Warwicka Allisona
-Comment[sr]=Шпил карата кога је обезбедио Варвик Алисон (Warwick Allison)
-Comment[sr@Latn]=Špil karata koga je obezbedio Varvik Alison (Warwick Allison)
-Comment[sv]=Kortuppsättning tillhandahållen av Warwick Allison
-Comment[ta]=சீட்டுக்கட்டு வில்லியம் எலிசனால் அனுப்பப்பட்டது
-Comment[tg]=Маҷмӯи Кортҳо, ки аз тарафи Warwick Allison пешниҳод шудаанд
-Comment[th]=ชุดไพ่สนับสนุนโดย Warwick Allison
-Comment[tr]=Kart kümeleri Warwick Allison tarafından sağlanmıştır
-Comment[uk]=Набір карт від Warwick Allison
-Comment[ven]=Garata yo diswa nga Warwick Allison
-Comment[vi]=BềEthẻ được cung cấp bởi Warwick Allison 
-Comment[xh]=Imfano nye yamakhadi inikwe ngu Warwick Allison
-Comment[zh_CN]=牌面由 Warwick Allison 提供
-Comment[zh_TW]=牌局由 Warwick Allison 提供
-Comment[zu]=Iqoqo lamakhadi linikelwe ngu-Warwick Allison
diff --git a/libkdegames/carddecks/cards-xskat-french/1.png b/libkdegames/carddecks/cards-xskat-french/1.png
deleted file mode 100644
index fdc71a26..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/10.png b/libkdegames/carddecks/cards-xskat-french/10.png
deleted file mode 100644
index 9dede1c7..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/11.png b/libkdegames/carddecks/cards-xskat-french/11.png
deleted file mode 100644
index 4c1dbf2a..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/12.png b/libkdegames/carddecks/cards-xskat-french/12.png
deleted file mode 100644
index e34fc6bb..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/13.png b/libkdegames/carddecks/cards-xskat-french/13.png
deleted file mode 100644
index 842935ca..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/14.png b/libkdegames/carddecks/cards-xskat-french/14.png
deleted file mode 100644
index e87706aa..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/15.png b/libkdegames/carddecks/cards-xskat-french/15.png
deleted file mode 100644
index 28d82c71..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/16.png b/libkdegames/carddecks/cards-xskat-french/16.png
deleted file mode 100644
index 4920f2f4..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/17.png b/libkdegames/carddecks/cards-xskat-french/17.png
deleted file mode 100644
index 27658c7c..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/18.png b/libkdegames/carddecks/cards-xskat-french/18.png
deleted file mode 100644
index ea34c973..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/19.png b/libkdegames/carddecks/cards-xskat-french/19.png
deleted file mode 100644
index 80a0c22b..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/2.png b/libkdegames/carddecks/cards-xskat-french/2.png
deleted file mode 100644
index de465ef6..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/20.png b/libkdegames/carddecks/cards-xskat-french/20.png
deleted file mode 100644
index 4a0aca66..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/21.png b/libkdegames/carddecks/cards-xskat-french/21.png
deleted file mode 100644
index b7c6027f..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/22.png b/libkdegames/carddecks/cards-xskat-french/22.png
deleted file mode 100644
index ae77e460..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/23.png b/libkdegames/carddecks/cards-xskat-french/23.png
deleted file mode 100644
index 967385fc..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/24.png b/libkdegames/carddecks/cards-xskat-french/24.png
deleted file mode 100644
index e8b84baf..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/25.png b/libkdegames/carddecks/cards-xskat-french/25.png
deleted file mode 100644
index f933ca25..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/26.png b/libkdegames/carddecks/cards-xskat-french/26.png
deleted file mode 100644
index ab981154..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/27.png b/libkdegames/carddecks/cards-xskat-french/27.png
deleted file mode 100644
index f34477ff..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/28.png b/libkdegames/carddecks/cards-xskat-french/28.png
deleted file mode 100644
index 0d1d71ff..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/29.png b/libkdegames/carddecks/cards-xskat-french/29.png
deleted file mode 100644
index 80e86965..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/3.png b/libkdegames/carddecks/cards-xskat-french/3.png
deleted file mode 100644
index e4cc9d63..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/30.png b/libkdegames/carddecks/cards-xskat-french/30.png
deleted file mode 100644
index a935d55e..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/31.png b/libkdegames/carddecks/cards-xskat-french/31.png
deleted file mode 100644
index 6c8d2883..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/32.png b/libkdegames/carddecks/cards-xskat-french/32.png
deleted file mode 100644
index 5af0268b..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/33.png b/libkdegames/carddecks/cards-xskat-french/33.png
deleted file mode 100644
index 7bd0fbed..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/34.png b/libkdegames/carddecks/cards-xskat-french/34.png
deleted file mode 100644
index dc8bb29f..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/35.png b/libkdegames/carddecks/cards-xskat-french/35.png
deleted file mode 100644
index 7eb3f06f..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/36.png b/libkdegames/carddecks/cards-xskat-french/36.png
deleted file mode 100644
index 01902b33..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/37.png b/libkdegames/carddecks/cards-xskat-french/37.png
deleted file mode 100644
index 80599469..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/38.png b/libkdegames/carddecks/cards-xskat-french/38.png
deleted file mode 100644
index fb4a37e4..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/39.png b/libkdegames/carddecks/cards-xskat-french/39.png
deleted file mode 100644
index 01fe85ae..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/4.png b/libkdegames/carddecks/cards-xskat-french/4.png
deleted file mode 100644
index dff28353..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/40.png b/libkdegames/carddecks/cards-xskat-french/40.png
deleted file mode 100644
index a9e28170..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/41.png b/libkdegames/carddecks/cards-xskat-french/41.png
deleted file mode 100644
index 66e69166..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/42.png b/libkdegames/carddecks/cards-xskat-french/42.png
deleted file mode 100644
index 92e21830..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/43.png b/libkdegames/carddecks/cards-xskat-french/43.png
deleted file mode 100644
index b39a4afa..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/44.png b/libkdegames/carddecks/cards-xskat-french/44.png
deleted file mode 100644
index 94bf0fc7..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/45.png b/libkdegames/carddecks/cards-xskat-french/45.png
deleted file mode 100644
index bbdb0ad6..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/46.png b/libkdegames/carddecks/cards-xskat-french/46.png
deleted file mode 100644
index ed610b6a..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/47.png b/libkdegames/carddecks/cards-xskat-french/47.png
deleted file mode 100644
index 2688622a..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/48.png b/libkdegames/carddecks/cards-xskat-french/48.png
deleted file mode 100644
index 0dc1d52e..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/49.png b/libkdegames/carddecks/cards-xskat-french/49.png
deleted file mode 100644
index 4499c0fd..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/5.png b/libkdegames/carddecks/cards-xskat-french/5.png
deleted file mode 100644
index 702b65bc..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/50.png b/libkdegames/carddecks/cards-xskat-french/50.png
deleted file mode 100644
index 9b8b6619..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/51.png b/libkdegames/carddecks/cards-xskat-french/51.png
deleted file mode 100644
index 1edf32d5..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/52.png b/libkdegames/carddecks/cards-xskat-french/52.png
deleted file mode 100644
index 0fe25caa..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/6.png b/libkdegames/carddecks/cards-xskat-french/6.png
deleted file mode 100644
index 642225b1..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/7.png b/libkdegames/carddecks/cards-xskat-french/7.png
deleted file mode 100644
index a16236b0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/8.png b/libkdegames/carddecks/cards-xskat-french/8.png
deleted file mode 100644
index 3cb261c4..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/9.png b/libkdegames/carddecks/cards-xskat-french/9.png
deleted file mode 100644
index 2b1d9c43..00000000
Binary files a/libkdegames/carddecks/cards-xskat-french/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-french/COPYRIGHT b/libkdegames/carddecks/cards-xskat-french/COPYRIGHT
deleted file mode 100644
index dc217dc3..00000000
--- a/libkdegames/carddecks/cards-xskat-french/COPYRIGHT
+++ /dev/null
@@ -1,8 +0,0 @@
-This PySol cardset was adapted from the game XSkat 4.0
-
-Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-xskat-french/index.desktop b/libkdegames/carddecks/cards-xskat-french/index.desktop
deleted file mode 100644
index 3dec4a0c..00000000
--- a/libkdegames/carddecks/cards-xskat-french/index.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Backdeck]
-Name=XSkat French
-Name[be]=Французскі XSkat
-Name[bg]=Френски модел
-Name[bn]=ফরাসি এক্স-স্কাট
-Name[br]=XSkat gallek
-Name[bs]=XSkat Francuski
-Name[ca]=XSkat francès
-Name[cs]=Francouzský XSkat
-Name[cy]=XSkat Ffrangeg
-Name[da]=XSkat-fransk
-Name[de]=XSkat Französisch
-Name[el]=XSkat Γαλλικό
-Name[eo]=XSkat Franca
-Name[es]=XSkat francés
-Name[et]=XSkat (Prantsuse)
-Name[eu]=XSkat Frantsesa
-Name[fa]=XSkat فرانسوی
-Name[fi]=XSkat Ranska
-Name[fr]=XSkat français
-Name[he]=XSkat צרפתי
-Name[hr]=Francuski XSkat
-Name[hu]=FRancia XSkat
-Name[is]=XSkat á frönsku
-Name[it]=XSkat francese
-Name[ja]=XSkat フランス語
-Name[km]=XSkat បារាំង
-Name[ko]=프랑스 XSkat
-Name[lt]=XSkat Prancūziškai
-Name[lv]=XSkat Franču
-Name[mk]=Француски XSkat
-Name[nb]=Fransk XSkat
-Name[nds]=XSkat (Franzöösch)
-Name[ne]=एक्स स्क्याट फ्रेन्च
-Name[nl]=XSkat Frans
-Name[nn]=Fransk XSkat
-Name[pa]=XSkat ਫਰੈਂਚ
-Name[pl]=Francuski skat
-Name[pt]=XSkat Francês
-Name[pt_BR]=XSkat Francês
-Name[ru]=Французский XSkat
-Name[se]=Fránskkalaš XSkat
-Name[sk]=XSkat francúzsky
-Name[sl]=Francoski XSkat
-Name[sr]=XSkat француски
-Name[sr@Latn]=XSkat francuski
-Name[sv]=Fransk X-skat
-Name[ta]=XSkat ஃபிரஞ்ச்
-Name[tg]=XSkat Фаронсавӣ
-Name[tr]=XSkat Fransızca
-Name[uk]=Французький XSkat
-Name[zh_CN]=XSkat 法语
-Name[zh_TW]=XSkat 法語
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-xskat-german/1.png b/libkdegames/carddecks/cards-xskat-german/1.png
deleted file mode 100644
index e679884b..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/1.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/10.png b/libkdegames/carddecks/cards-xskat-german/10.png
deleted file mode 100644
index c9590dbb..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/10.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/11.png b/libkdegames/carddecks/cards-xskat-german/11.png
deleted file mode 100644
index d1c6f500..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/11.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/12.png b/libkdegames/carddecks/cards-xskat-german/12.png
deleted file mode 100644
index 5c92d83a..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/12.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/13.png b/libkdegames/carddecks/cards-xskat-german/13.png
deleted file mode 100644
index d68f0c00..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/13.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/14.png b/libkdegames/carddecks/cards-xskat-german/14.png
deleted file mode 100644
index 324e3756..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/14.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/15.png b/libkdegames/carddecks/cards-xskat-german/15.png
deleted file mode 100644
index 9a516e30..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/15.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/16.png b/libkdegames/carddecks/cards-xskat-german/16.png
deleted file mode 100644
index 9d9dec03..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/16.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/17.png b/libkdegames/carddecks/cards-xskat-german/17.png
deleted file mode 100644
index 5dc10fa2..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/17.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/18.png b/libkdegames/carddecks/cards-xskat-german/18.png
deleted file mode 100644
index 90562629..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/18.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/19.png b/libkdegames/carddecks/cards-xskat-german/19.png
deleted file mode 100644
index 7e4552ab..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/19.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/2.png b/libkdegames/carddecks/cards-xskat-german/2.png
deleted file mode 100644
index 1c1f8118..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/2.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/20.png b/libkdegames/carddecks/cards-xskat-german/20.png
deleted file mode 100644
index a15534b6..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/20.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/21.png b/libkdegames/carddecks/cards-xskat-german/21.png
deleted file mode 100644
index 7aca79e7..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/21.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/22.png b/libkdegames/carddecks/cards-xskat-german/22.png
deleted file mode 100644
index b487a1c8..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/22.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/23.png b/libkdegames/carddecks/cards-xskat-german/23.png
deleted file mode 100644
index 761d3bfe..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/23.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/24.png b/libkdegames/carddecks/cards-xskat-german/24.png
deleted file mode 100644
index 537e590c..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/24.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/25.png b/libkdegames/carddecks/cards-xskat-german/25.png
deleted file mode 100644
index 09567171..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/25.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/26.png b/libkdegames/carddecks/cards-xskat-german/26.png
deleted file mode 100644
index 761fc42d..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/26.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/27.png b/libkdegames/carddecks/cards-xskat-german/27.png
deleted file mode 100644
index 05083aa2..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/27.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/28.png b/libkdegames/carddecks/cards-xskat-german/28.png
deleted file mode 100644
index e885a908..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/28.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/29.png b/libkdegames/carddecks/cards-xskat-german/29.png
deleted file mode 100644
index 5b7244a0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/29.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/3.png b/libkdegames/carddecks/cards-xskat-german/3.png
deleted file mode 100644
index 978e63c0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/3.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/30.png b/libkdegames/carddecks/cards-xskat-german/30.png
deleted file mode 100644
index 3f8b03ef..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/30.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/31.png b/libkdegames/carddecks/cards-xskat-german/31.png
deleted file mode 100644
index 9ab830ce..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/31.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/32.png b/libkdegames/carddecks/cards-xskat-german/32.png
deleted file mode 100644
index b87d68d0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/32.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/33.png b/libkdegames/carddecks/cards-xskat-german/33.png
deleted file mode 100644
index 078abf39..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/33.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/34.png b/libkdegames/carddecks/cards-xskat-german/34.png
deleted file mode 100644
index 94c5297f..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/34.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/35.png b/libkdegames/carddecks/cards-xskat-german/35.png
deleted file mode 100644
index 241ba5dc..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/35.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/36.png b/libkdegames/carddecks/cards-xskat-german/36.png
deleted file mode 100644
index 339a155a..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/36.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/37.png b/libkdegames/carddecks/cards-xskat-german/37.png
deleted file mode 100644
index 106023f4..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/37.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/38.png b/libkdegames/carddecks/cards-xskat-german/38.png
deleted file mode 100644
index 848f9696..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/38.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/39.png b/libkdegames/carddecks/cards-xskat-german/39.png
deleted file mode 100644
index 43eaba16..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/39.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/4.png b/libkdegames/carddecks/cards-xskat-german/4.png
deleted file mode 100644
index d69848a0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/4.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/40.png b/libkdegames/carddecks/cards-xskat-german/40.png
deleted file mode 100644
index 87619dce..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/40.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/41.png b/libkdegames/carddecks/cards-xskat-german/41.png
deleted file mode 100644
index 6b09c88c..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/41.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/42.png b/libkdegames/carddecks/cards-xskat-german/42.png
deleted file mode 100644
index 04a1993b..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/42.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/43.png b/libkdegames/carddecks/cards-xskat-german/43.png
deleted file mode 100644
index d5b92e29..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/43.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/44.png b/libkdegames/carddecks/cards-xskat-german/44.png
deleted file mode 100644
index 6cf2e09b..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/44.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/45.png b/libkdegames/carddecks/cards-xskat-german/45.png
deleted file mode 100644
index b6a6a2a7..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/45.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/46.png b/libkdegames/carddecks/cards-xskat-german/46.png
deleted file mode 100644
index 05f686ab..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/46.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/47.png b/libkdegames/carddecks/cards-xskat-german/47.png
deleted file mode 100644
index f31c89f3..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/47.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/48.png b/libkdegames/carddecks/cards-xskat-german/48.png
deleted file mode 100644
index a8e1c51e..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/48.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/49.png b/libkdegames/carddecks/cards-xskat-german/49.png
deleted file mode 100644
index 2a473ac3..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/49.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/5.png b/libkdegames/carddecks/cards-xskat-german/5.png
deleted file mode 100644
index 66a4b568..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/5.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/50.png b/libkdegames/carddecks/cards-xskat-german/50.png
deleted file mode 100644
index 3a7d6ac0..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/50.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/51.png b/libkdegames/carddecks/cards-xskat-german/51.png
deleted file mode 100644
index 09e25a6c..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/51.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/52.png b/libkdegames/carddecks/cards-xskat-german/52.png
deleted file mode 100644
index e7d74ae4..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/52.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/6.png b/libkdegames/carddecks/cards-xskat-german/6.png
deleted file mode 100644
index e4b1d7de..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/6.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/7.png b/libkdegames/carddecks/cards-xskat-german/7.png
deleted file mode 100644
index 09e99d70..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/7.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/8.png b/libkdegames/carddecks/cards-xskat-german/8.png
deleted file mode 100644
index 58fdc56e..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/8.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/9.png b/libkdegames/carddecks/cards-xskat-german/9.png
deleted file mode 100644
index b55ee847..00000000
Binary files a/libkdegames/carddecks/cards-xskat-german/9.png and /dev/null differ
diff --git a/libkdegames/carddecks/cards-xskat-german/COPYRIGHT b/libkdegames/carddecks/cards-xskat-german/COPYRIGHT
deleted file mode 100644
index dc217dc3..00000000
--- a/libkdegames/carddecks/cards-xskat-german/COPYRIGHT
+++ /dev/null
@@ -1,8 +0,0 @@
-This PySol cardset was adapted from the game XSkat 4.0
-
-Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-xskat-german/index.desktop b/libkdegames/carddecks/cards-xskat-german/index.desktop
deleted file mode 100644
index 3f19d526..00000000
--- a/libkdegames/carddecks/cards-xskat-german/index.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Backdeck]
-Name=XSkat German
-Name[be]=Нямецкі XSkat
-Name[bg]=Немски модел
-Name[bn]=জর্মন এক্স-স্কাট
-Name[br]=XSkat alamanek
-Name[bs]=XSkat Njemački
-Name[ca]=XSkat alemany
-Name[cs]=Německý XSkat
-Name[cy]=XSkat Almaeneg
-Name[da]=XSkat-tysk
-Name[de]=XSkat Deutsch
-Name[el]=XSkat Γερμανικό
-Name[eo]=XSkat Germana
-Name[es]=XSkat alemán
-Name[et]=XSkat (Saksa)
-Name[eu]=XSkat alemaniera
-Name[fa]=آلمانی XSkat
-Name[fi]=XSkat Saksa
-Name[fr]=XSkat allemand
-Name[he]=XSkat גרמני
-Name[hr]=Njemački XSkat
-Name[hu]=Német XSkat
-Name[is]=XSkat á þýsku
-Name[it]=XSkat tedesco
-Name[ja]=XSkat ドイツ語
-Name[km]=XSkat អាល្លឺម៉ង់
-Name[ko]=독일 XSkat
-Name[lt]=XSkat Vokiškai
-Name[lv]=XSkat Vācu
-Name[mk]=Германски XSkat
-Name[nb]=Tysk XSkat
-Name[nds]=XSkat (Düütsch)
-Name[ne]=एक्स स्क्याट जर्मन
-Name[nl]=XSkat Duits
-Name[nn]=Tysk XSkat
-Name[pa]=XSkat ਜਰਮਨ
-Name[pl]=Niemiecki skat
-Name[pt]=XSkat Alemã
-Name[pt_BR]=XSkat Alemão
-Name[ru]=Немецкий XSkat
-Name[se]=Duiskkalaš XSkat
-Name[sk]=XScat nemecký
-Name[sl]=Nemški XSkat
-Name[sr]=XSkat немачки
-Name[sr@Latn]=XSkat nemački
-Name[sv]=Tysk X-skat
-Name[ta]=XSkat ஜெர்மன்
-Name[tg]=XSkat Олмонӣ
-Name[tr]=XSkat Almanca
-Name[uk]=Німецький XSkat
-Name[zh_CN]=XSkat 德语
-Name[zh_TW]=XSkat 德語
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/convertpysols b/libkdegames/carddecks/convertpysols
deleted file mode 100755
index f2434475..00000000
--- a/libkdegames/carddecks/convertpysols
+++ /dev/null
@@ -1,69 +0,0 @@
-#! /bin/sh
-
-cd $1
-
-convert -format png -tqgeometry "72x96" 01c.gif 1.png
-convert -format png -tqgeometry "72x96" 01s.gif 2.png
-convert -format png -tqgeometry "72x96" 01h.gif 3.png
-convert -format png -tqgeometry "72x96" 01d.gif 4.png
-
-convert -format png -tqgeometry "72x96" 13c.gif 5.png
-convert -format png -tqgeometry "72x96" 13s.gif 6.png
-convert -format png -tqgeometry "72x96" 13h.gif 7.png
-convert -format png -tqgeometry "72x96" 13d.gif 8.png
-
-convert -format png -tqgeometry "72x96" 12c.gif 9.png
-convert -format png -tqgeometry "72x96" 12s.gif 10.png
-convert -format png -tqgeometry "72x96" 12h.gif 11.png
-convert -format png -tqgeometry "72x96" 12d.gif 12.png
-
-convert -format png -tqgeometry "72x96" 11c.gif 13.png
-convert -format png -tqgeometry "72x96" 11s.gif 14.png
-convert -format png -tqgeometry "72x96" 11h.gif 15.png
-convert -format png -tqgeometry "72x96" 11d.gif 16.png
-
-convert -format png -tqgeometry "72x96" 10c.gif 17.png
-convert -format png -tqgeometry "72x96" 10s.gif 18.png
-convert -format png -tqgeometry "72x96" 10h.gif 19.png
-convert -format png -tqgeometry "72x96" 10d.gif 20.png
-
-convert -format png -tqgeometry "72x96" 09c.gif 21.png
-convert -format png -tqgeometry "72x96" 09s.gif 22.png
-convert -format png -tqgeometry "72x96" 09h.gif 23.png
-convert -format png -tqgeometry "72x96" 09d.gif 24.png
-
-convert -format png -tqgeometry "72x96" 08c.gif 25.png
-convert -format png -tqgeometry "72x96" 08s.gif 26.png
-convert -format png -tqgeometry "72x96" 08h.gif 27.png
-convert -format png -tqgeometry "72x96" 08d.gif 28.png
-
-convert -format png -tqgeometry "72x96" 07c.gif 29.png
-convert -format png -tqgeometry "72x96" 07s.gif 30.png
-convert -format png -tqgeometry "72x96" 07h.gif 31.png
-convert -format png -tqgeometry "72x96" 07d.gif 32.png
-
-convert -format png -tqgeometry "72x96" 06c.gif 33.png
-convert -format png -tqgeometry "72x96" 06s.gif 34.png
-convert -format png -tqgeometry "72x96" 06h.gif 35.png
-convert -format png -tqgeometry "72x96" 06d.gif 36.png
-
-convert -format png -tqgeometry "72x96" 05c.gif 37.png
-convert -format png -tqgeometry "72x96" 05s.gif 38.png
-convert -format png -tqgeometry "72x96" 05h.gif 39.png
-convert -format png -tqgeometry "72x96" 05d.gif 40.png
-
-convert -format png -tqgeometry "72x96" 04c.gif 41.png
-convert -format png -tqgeometry "72x96" 04s.gif 42.png
-convert -format png -tqgeometry "72x96" 04h.gif 43.png
-convert -format png -tqgeometry "72x96" 04d.gif 44.png
-
-convert -format png -tqgeometry "72x96" 03c.gif 45.png
-convert -format png -tqgeometry "72x96" 03s.gif 46.png
-convert -format png -tqgeometry "72x96" 03h.gif 47.png
-convert -format png -tqgeometry "72x96" 03d.gif 48.png
-
-convert -format png -tqgeometry "72x96" 02c.gif 49.png
-convert -format png -tqgeometry "72x96" 02s.gif 50.png
-convert -format png -tqgeometry "72x96" 02h.gif 51.png
-convert -format png -tqgeometry "72x96" 02d.gif 52.png
-
diff --git a/libkdegames/carddecks/decks/deck0.desktop b/libkdegames/carddecks/decks/deck0.desktop
deleted file mode 100644
index 0388ea4b..00000000
--- a/libkdegames/carddecks/decks/deck0.desktop
+++ /dev/null
@@ -1,113 +0,0 @@
-[KDE Cards]
-Name=Technics
-Name[az]=Texnik
-Name[be]=Тэхніка
-Name[bg]=Техника
-Name[bn]=টেকনিক্স
-Name[bs]=Tehnički
-Name[ca]=Tècniques
-Name[cs]=Technika
-Name[eo]=Tekniko
-Name[es]=Técnicas
-Name[et]=Tehnika
-Name[eu]=Teknikoa
-Name[fi]=Tekniikka
-Name[fr]=Technique
-Name[gl]=Técnicas
-Name[hi]=टेक्निक्स
-Name[hr]=Tehnika
-Name[hu]=Technikai
-Name[id]=Teknik
-Name[is]=Tækni
-Name[it]=Tecnico
-Name[km]=វិធីសាស្ត្រ
-Name[lt]=Technika
-Name[lv]=Tehnika
-Name[mk]=Техника
-Name[mt]=Tekniċi
-Name[nb]=Teknisk
-Name[nds]=Technik
-Name[ne]=उपाय
-Name[nl]=Technisch
-Name[nn]=Teknisk
-Name[pt]=Técnico
-Name[pt_BR]=Técnicas
-Name[ro]=Tehnic
-Name[ru]=Шестерёнки
-Name[se]=Teknihkalaš
-Name[sk]=Technické
-Name[sl]=Tehnika
-Name[sr]=Техникс
-Name[sr@Latn]=Tehniks
-Name[sv]=Teknik
-Name[ta]=நுணுக்கங்கள்
-Name[tg]=Шомгонаҳо
-Name[th]=เทคนิค
-Name[tr]=Teknik
-Name[uk]=Шестерні
-Name[ven]=Madaela
-Name[vi]=Kĩ thuật 
-Name[xh]=iindlela zokudlala
-Name[zh_CN]=工艺
-Name[zh_TW]=工藝
-Comment=Standard KDE card deck
-Comment[af]=Standaard Kde kaart pak
-Comment[az]=Standart KDE kart dəstəsi
-Comment[be]=Стандартная калода картаў KDE
-Comment[bg]=Стандартна колода карти за KDE
-Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট
-Comment[bs]=Standardni KDE špil karata
-Comment[ca]=Joc de cartes estàndard del KDE
-Comment[cs]=Standardní sada karet KDE
-Comment[cy]=Set cerdiau safonol KDE
-Comment[da]=Standard KDE-kortspil
-Comment[de]=Standardmäßige KDE-Karten
-Comment[el]=Προκαθορισμένο σύνολο τράπουλας του KDE
-Comment[eo]=Normala KDEa kartaro
-Comment[es]=Baraja de cartas estándar de KDE
-Comment[et]=Standardne KDE kaardipakk
-Comment[eu]=KDE-ren karta-sorta
-Comment[fa]=دسته کارت استاندارد KDE
-Comment[fi]=Normaali KDE:n korttipakka
-Comment[fr]=Jeu de cartes standard de KDE
-Comment[gl]=Baralla de cartas estándar de KDE
-Comment[he]=חפיסת הקלפים הסטנדרטית של KDE
-Comment[hi]=मानक केडीई ताश गड्डी
-Comment[hr]=Standardni KDE komplet karata
-Comment[hu]=Standard KDE kártyacsomag
-Comment[is]=Venjulegi KDE spilastokkurinn
-Comment[it]=Mazzo di carte standard di KDE
-Comment[ja]=KDE 標準カードデッキ
-Comment[km]=ហូ​បៀ KDE ខ្នាត​គំរូ
-Comment[ko]=표준 KDE 카드 모음
-Comment[lt]=Standartinė KDE kortų kaladė
-Comment[lv]=Standarta KDE kāršu galds
-Comment[mk]=Стандарден шпил карти на KDE 
-Comment[mt]=Mazz karti standard tal-KDE
-Comment[nb]=Standard KDE-kortstokk
-Comment[nds]=KDE-Standardkoorten
-Comment[ne]=मानक केडीई कार्ड डेक
-Comment[nl]=Standaard KDE-kaartrug
-Comment[nn]=Standard KDE-kortstokk
-Comment[pa]=ਮਿਆਰੀ KDE ਤਾਸ਼ ਪੱਤੇ
-Comment[pl]=Standardowy zestaw kart KDE
-Comment[pt]=Baralho de cartas por omissão do KDE
-Comment[pt_BR]=Baralho padrão do KDE
-Comment[ro]=Set de cărţi de joc KDE standard
-Comment[ru]=Стандартная колода карт KDE
-Comment[sk]=Štandardný balíček kariet KDE
-Comment[sl]=Standardni komplet kart za KDE
-Comment[sr]=Стандардни KDE-ов шпил карата
-Comment[sr@Latn]=Standardni KDE-ov špil karata
-Comment[sv]=Förvald KDE-kortlek
-Comment[ta]=நிலையான கேடிஇ சீட்டின் மேல் தளம்                                                                                                                                                                                                                                                                                            
-Comment[tg]=Маҷмӯи кортҳои муқаррарии KDE
-Comment[th]=ชุดไพ่มาตรฐานของ KDE
-Comment[tr]=Standart KDE kart destesi
-Comment[uk]=Типовий малюнок карт KDE
-Comment[ven]=Tshidzhumba tsha magarata tsha murole wa KDE
-Comment[vi]=KDE card deck chuẩn 
-Comment[xh]=Umgangatho womphezulu wamakhadi eKDE 
-Comment[zh_CN]=标准 KDE 牌垛
-Comment[zh_TW]=標準 KDE 紙牌花色
-Comment[zu]=Isigaxa samakhadi esilinganisiwe we-KDE
diff --git a/libkdegames/carddecks/decks/deck0.png b/libkdegames/carddecks/decks/deck0.png
deleted file mode 100644
index 0a877a51..00000000
Binary files a/libkdegames/carddecks/decks/deck0.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck1.desktop b/libkdegames/carddecks/decks/deck1.desktop
deleted file mode 100644
index 0a8c2cf7..00000000
--- a/libkdegames/carddecks/decks/deck1.desktop
+++ /dev/null
@@ -1,56 +0,0 @@
-[KDE Cards]
-Name=Fairy
-Name[af]=Fee
-Name[az]=Pəri
-Name[be]=Фея
-Name[bg]=Фея
-Name[bn]=পরী
-Name[ca]=Fada
-Name[cs]=Víla
-Name[cy]=Tylwyth Teg
-Name[da]=Fe
-Name[de]=Elfe
-Name[el]=Νεράιδα
-Name[eo]=Elfo
-Name[es]=Hada
-Name[et]=Haldjas
-Name[eu]=Maitagarria
-Name[fa]=جن و پری
-Name[fi]=Keijukainen
-Name[fr]=Féérie
-Name[gl]=Fada
-Name[hi]=परी
-Name[hr]=Vila
-Name[hu]=Tündéres
-Name[is]=Álfur
-Name[it]=Fata
-Name[km]=ទេវតា
-Name[ko]=요정
-Name[lt]=Fėja
-Name[lv]=Pasaku
-Name[mk]=Самовила
-Name[mt]=Għafrid
-Name[nb]=Fe
-Name[nds]=Fee
-Name[ne]=अप्सरा
-Name[nl]=Fee
-Name[nn]=Fe
-Name[pl]=Wróżkarski
-Name[pt]=Fada
-Name[pt_BR]=Mágico
-Name[ro]=Basm
-Name[ru]=Фея
-Name[sr]=Вила
-Name[sr@Latn]=Vila
-Name[sv]=Älva
-Name[ta]=தேவதை
-Name[tg]=Парӣ
-Name[tr]=Peri
-Name[uk]=Чарівний
-Name[uz]=Pari
-Name[uz@cyrillic]=Пари
-Name[ven]=Zwi a pfesesea
-Name[vi]=Xinh đẹp 
-Name[zh_CN]=仙女
-Name[zh_TW]=仙女
-Name[zu]=Okunomlingo
diff --git a/libkdegames/carddecks/decks/deck1.png b/libkdegames/carddecks/decks/deck1.png
deleted file mode 100644
index 247875a2..00000000
Binary files a/libkdegames/carddecks/decks/deck1.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck10.desktop b/libkdegames/carddecks/decks/deck10.desktop
deleted file mode 100644
index 5e871ede..00000000
--- a/libkdegames/carddecks/decks/deck10.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Classic Blue
-Name[af]=Klasieke Blou
-Name[ar]=أزرق كلاسيكي
-Name[az]=Klassik Göy
-Name[be]=Класічны сіні
-Name[bg]=Класическо синьо
-Name[bn]=ক্লাসিক নীল
-Name[bs]=Klasični plavi
-Name[ca]=Blau clàssic
-Name[cs]=Klasická modrá
-Name[cy]=Glas Clasurol
-Name[da]=Klassisk blå
-Name[de]=Klassisches Blau
-Name[el]=Κλασσικό μπλε
-Name[eo]=Klasika bluo
-Name[es]=Azul clásico
-Name[et]=Klassikaline sinine
-Name[eu]=Urdin klasikoa
-Name[fa]=آبی کلاسیک‌
-Name[fi]=Klassinen sininen
-Name[fr]=Bleu classique
-Name[gl]=Azul clásico
-Name[he]=כחול קלסי 
-Name[hi]=आदर्श नीला
-Name[hr]=Klasično plava
-Name[hu]=Klasszikus kék
-Name[id]=Biru klasik
-Name[is]=Klassískur blár
-Name[it]=Blu classico
-Name[ja]=クラシックブルー
-Name[km]=ខៀវ​ក្លាស៊ិក
-Name[ko]=고전 파란색
-Name[lt]=Klasikinė mėlyna
-Name[lv]=Klasiski zils
-Name[mk]=Класично сино 
-Name[mt]=Blu Klassiku
-Name[nb]=Klassisk Blå
-Name[nds]=Klass'sch Blaag
-Name[ne]=उत्कृष्ट निलो
-Name[nl]=Klassiek blauw
-Name[nn]=Klassisk blå
-Name[pa]=ਟਕਸਾਲੀ ਨੀਲੇ
-Name[pl]=Klasyczny niebieski
-Name[pt]=Azul Clássico
-Name[pt_BR]=Azul Clássico
-Name[ro]=Albastru clasic
-Name[ru]=Классический синий
-Name[se]=Klassihkalaš alit
-Name[sk]=Klasické modré
-Name[sl]=Klasična modra
-Name[sr]=Класични плави
-Name[sr@Latn]=Klasični plavi
-Name[sv]=Klassisk blå
-Name[ta]=சிறந்த நீலம்
-Name[tg]=Кабуди Классикӣ
-Name[th]=ฟ้าคลาสสิค
-Name[tr]=Klasik Mavi
-Name[uk]=Блакитний
-Name[ven]=Muvhala wa Lutombo wa Maimo
-Name[vi]=Màu xanh cềEđiển 
-Name[wa]=Bleu classike
-Name[xh]=Umbala oblowu omdala
-Name[zh_CN]=经典蓝
-Name[zh_TW]=古典藍
-Name[zu]=Ubuluhlaza obuhle
diff --git a/libkdegames/carddecks/decks/deck10.png b/libkdegames/carddecks/decks/deck10.png
deleted file mode 100644
index c84dcf73..00000000
Binary files a/libkdegames/carddecks/decks/deck10.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck11.desktop b/libkdegames/carddecks/decks/deck11.desktop
deleted file mode 100644
index 8d0fbb44..00000000
--- a/libkdegames/carddecks/decks/deck11.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Classic Red
-Name[af]=Klasieke Rooi
-Name[ar]=أحمر كلاسيكي
-Name[az]=Klassik Qırmızı
-Name[be]=Класічны чырвоны
-Name[bg]=Класическо червено
-Name[bn]=ক্লাসিক লাল
-Name[bs]=Klasični crveni
-Name[ca]=Vermell clàssic
-Name[cs]=Klasická červená
-Name[cy]=Coch Clasurol
-Name[da]=Klassisk Rød
-Name[de]=Klassisches Rot
-Name[el]=Κλασσικό κόκκινο
-Name[eo]=Klasika ruĝo
-Name[es]=Rojo clásico
-Name[et]=Klassikaline punane
-Name[eu]=Gorri klasikoa
-Name[fa]=قرمز کلاسیک
-Name[fi]=Klassinen punainen
-Name[fr]=Rouge classique
-Name[gl]=Vermello clásico
-Name[he]=אדום קלסי
-Name[hi]=आदर्श लाल
-Name[hr]=Klasično crvena
-Name[hu]=klasszikus vörös
-Name[id]=Merah klasik
-Name[is]=Klassískur rauður
-Name[it]=Rosso classico
-Name[ja]=クラシックレッド
-Name[km]=ក្រហម​ក្លាស៊ិក
-Name[ko]=고전 빨간색
-Name[lt]=Klasikinė raudona
-Name[lv]=Klasiski sarkans
-Name[mk]=Класично црвено
-Name[mt]=Aħmar Klassiku
-Name[nb]=Klassisk Rød
-Name[nds]=Klass'sch Root
-Name[ne]=उत्कृष्ट रातो
-Name[nl]=Klassiek rood
-Name[nn]=Klassisk raud
-Name[pa]=ਟਕਸਾਲੀ ਲਾਲ
-Name[pl]=Klasyczny czerwony
-Name[pt]=Vermelho Clássico
-Name[pt_BR]=Vermelho Clássico
-Name[ro]=Roşu clasic
-Name[ru]=Классический красный
-Name[se]=Klassihkalaš ruoksat
-Name[sk]=Klasické červené
-Name[sl]=Klasična rdeča
-Name[sr]=Класични црвени
-Name[sr@Latn]=Klasični crveni
-Name[sv]=Klassisk röd
-Name[ta]= சிறந்த சிகப்பு
-Name[tg]=Сурхи Классикӣ
-Name[th]=แดงคลาสสิค
-Name[tr]=Klasik Kırmızı
-Name[uk]=Червоний
-Name[ven]=Muvhala Mutshuku wa Maimo
-Name[vi]=ĐềEcềEđiển 
-Name[wa]=Rodje classike
-Name[xh]=Umbala obomvu wakudala
-Name[zh_CN]=经典红
-Name[zh_TW]=古典紅
-Name[zu]=Ububomvu obuhle
diff --git a/libkdegames/carddecks/decks/deck11.png b/libkdegames/carddecks/decks/deck11.png
deleted file mode 100644
index 0474a551..00000000
Binary files a/libkdegames/carddecks/decks/deck11.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck12.desktop b/libkdegames/carddecks/decks/deck12.desktop
deleted file mode 100644
index aa0918bd..00000000
--- a/libkdegames/carddecks/decks/deck12.desktop
+++ /dev/null
@@ -1,41 +0,0 @@
-[KDE Cards]
-Name=Chin
-Name[af]=Ken
-Name[az]=Çənə
-Name[be]=Памада
-Name[bg]=Чин
-Name[bn]=চিবুক
-Name[cs]=Brada
-Name[cy]=Gên
-Name[eo]=Vizaĝo
-Name[eu]=Kokotsa
-Name[fr]=Visage
-Name[hi]=ठोढ़ी
-Name[hr]=Brada
-Name[is]=Haka
-Name[it]=Mento
-Name[ja]=中国
-Name[km]=ចង្កា
-Name[lt]=Smakras
-Name[lv]=Seja
-Name[mk]=Брада
-Name[nds]=Kinn
-Name[ne]=चिन
-Name[nl]=Kin
-Name[pl]=Podbródek
-Name[ro]=Bărbie
-Name[ru]=Помада
-Name[sl]=Džin
-Name[sr]=Брада
-Name[sr@Latn]=Brada
-Name[sv]=Pingla
-Name[ta]=தாடை
-Name[tg]=Манаҳ
-Name[tr]=Çene
-Name[uk]=Красуня
-Name[uz@cyrillic]=Чин
-Name[ven]=Tshitefu
-Name[xh]=Isilevu
-Name[zh_CN]=头像
-Name[zh_TW]=中國
-Name[zu]=Isilevu
diff --git a/libkdegames/carddecks/decks/deck12.png b/libkdegames/carddecks/decks/deck12.png
deleted file mode 100644
index df9f6b71..00000000
Binary files a/libkdegames/carddecks/decks/deck12.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck13.desktop b/libkdegames/carddecks/decks/deck13.desktop
deleted file mode 100644
index 37180379..00000000
--- a/libkdegames/carddecks/decks/deck13.desktop
+++ /dev/null
@@ -1,63 +0,0 @@
-[KDE Cards]
-Name=Copy
-Name[af]=Kopie
-Name[ar]=إنسخ
-Name[az]=Köçür
-Name[be]=Скапіяваць
-Name[bg]=Ръка
-Name[bn]=কপি
-Name[br]=Eilañ
-Name[bs]=Kopiraj
-Name[ca]=Còpia
-Name[cs]=Kopie
-Name[cy]=Copio
-Name[da]=Kopi
-Name[de]=Kopie
-Name[eo]=Mano
-Name[es]=Copia
-Name[et]=Koopia
-Name[eu]=Kopiatu
-Name[fi]=Kopio
-Name[fo]=Avrit
-Name[fr]=Copie
-Name[ga]=Cóipeáil
-Name[gl]=Copia
-Name[hi]=नक़ल
-Name[hr]=Kopija
-Name[hu]=Másolás
-Name[id]=Salin
-Name[is]=Afrit
-Name[it]=Impronta
-Name[ja]=コピー
-Name[km]=ចម្លង
-Name[lt]=Kopija
-Name[lv]=Kopija
-Name[mk]=Копија
-Name[mt]=Kopja
-Name[nb]=Kopier
-Name[nds]=Kopie
-Name[ne]=प्रतिलिपि
-Name[nl]=Hand
-Name[nn]=Kopi
-Name[pl]=Kopia
-Name[pt]=Cópia
-Name[pt_BR]=Cópia
-Name[ro]=Copie
-Name[ru]=Отпечаток
-Name[se]=Máŋgus
-Name[sl]=Prepis
-Name[sr]=Копија
-Name[sr@Latn]=Kopija
-Name[sv]=Kopia
-Name[ta]=படியெடு
-Name[tg]=Нақш
-Name[tr]=Kopyala
-Name[uk]=Копія
-Name[uz]=Nusxa
-Name[uz@cyrillic]=Нусха
-Name[ven]=Tshikopololwa
-Name[wa]=Copyî
-Name[xh]=Ukukopa
-Name[zh_CN]=复制
-Name[zh_TW]=復制品
-Name[zu]=Khiphela
diff --git a/libkdegames/carddecks/decks/deck13.png b/libkdegames/carddecks/decks/deck13.png
deleted file mode 100644
index 377ec7a1..00000000
Binary files a/libkdegames/carddecks/decks/deck13.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck14.desktop b/libkdegames/carddecks/decks/deck14.desktop
deleted file mode 100644
index fd5df9f8..00000000
--- a/libkdegames/carddecks/decks/deck14.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Penguin
-Name[af]=Pikkewyn
-Name[ar]=بطريق
-Name[az]=Pinqvin
-Name[be]=Пінгвін
-Name[bg]=Пингвин
-Name[bn]=পেঙ্গুইন
-Name[br]=Penn-gwenn
-Name[bs]=Pingvin
-Name[ca]=Pingüí
-Name[cs]=Tučňák
-Name[cy]=Pengwin
-Name[da]=Pingvin
-Name[de]=Pinguin
-Name[el]=Πιγκουίνος
-Name[eo]=Pingveno
-Name[es]=Pingüino
-Name[et]=Pingviin
-Name[eu]=Pinguinoa
-Name[fa]=پنگوئن
-Name[fi]=Pingviini
-Name[fr]=Pingouin
-Name[gl]=Pingüín
-Name[he]=פינגווין
-Name[hi]=पेंग्विन
-Name[hr]=Pingvin
-Name[hu]=Pingvin
-Name[is]=Mörgæs
-Name[it]=Pinguino
-Name[km]=ផេនឃ្វីន
-Name[ko]=펭귄
-Name[lt]=Pingvinas
-Name[lv]=Pingvīns
-Name[mk]=Пингвин
-Name[mt]=Pingwin
-Name[nb]=Pingvin
-Name[nds]=Pinguin
-Name[ne]=पेन्गुइन
-Name[nl]=Pinguïn
-Name[nn]=Pingvin
-Name[pa]=ਪੈਂਗੂਇਨ
-Name[pl]=Pingwin
-Name[pt]=Pinguim
-Name[pt_BR]=Pingüim
-Name[ro]=Pinguin
-Name[ru]=Пингвин
-Name[se]=Piŋviidna
-Name[sk]=Tučniak
-Name[sl]=Pingvin
-Name[sr]=Пингвин
-Name[sr@Latn]=Pingvin
-Name[sv]=Pingvin
-Name[ta]=பென்குயின்
-Name[tg]=Пингвин
-Name[th]=เพนกวิน
-Name[tr]=Penguen
-Name[uk]=Пінгвін
-Name[uz]=Pingvin
-Name[uz@cyrillic]=Пингвин
-Name[vi]=Chim cánh cụt 
-Name[wa]=Pingwin
-Name[xh]=Ipenguin
-Name[zh_CN]=企鹅
-Name[zh_TW]=企鵝
-Name[zu]=Inyoni yasemanzini
diff --git a/libkdegames/carddecks/decks/deck14.png b/libkdegames/carddecks/decks/deck14.png
deleted file mode 100644
index 694632bd..00000000
Binary files a/libkdegames/carddecks/decks/deck14.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck15.desktop b/libkdegames/carddecks/decks/deck15.desktop
deleted file mode 100644
index 92015b81..00000000
--- a/libkdegames/carddecks/decks/deck15.desktop
+++ /dev/null
@@ -1,19 +0,0 @@
-[KDE Cards]
-Name=Tristan
-Name[be]=Трыстан
-Name[bg]=Тристан
-Name[bn]=ত্রিস্তান
-Name[eo]=Ornamo
-Name[hi]=ट्राईस्टान
-Name[hu]=Trisztán
-Name[lv]=Tristans
-Name[mk]=Тристан
-Name[ne]=ट्रिस्टान
-Name[pt]=Tristão
-Name[ru]=Тристан
-Name[sr]=Тристан
-Name[ta]=ட்ரிஸ்டன்
-Name[tg]=Тристан
-Name[uk]=Трістан
-Name[uz@cyrillic]=Тристан
-Name[zu]=I-Tristan
diff --git a/libkdegames/carddecks/decks/deck15.png b/libkdegames/carddecks/decks/deck15.png
deleted file mode 100644
index 73c3b92c..00000000
Binary files a/libkdegames/carddecks/decks/deck15.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck16.desktop b/libkdegames/carddecks/decks/deck16.desktop
deleted file mode 100644
index 11ec9761..00000000
--- a/libkdegames/carddecks/decks/deck16.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Grandma
-Name[af]=Ouma
-Name[ar]=جدَة
-Name[az]=Nənə
-Name[be]=Бабуля
-Name[bg]=Стар стил
-Name[bn]=ঠাকুরমা, দাদী, নানী ইত্যাদি
-Name[br]=Mamm-goz
-Name[ca]=Àvia
-Name[cs]=Babička
-Name[cy]=Nain
-Name[da]=Bedstemor
-Name[de]=Großmutter
-Name[el]=Γιαγιά
-Name[eo]=Avinjo
-Name[es]=Abuela
-Name[et]=Vanaema
-Name[eu]=Amona
-Name[fi]=Isoäiti
-Name[fo]=Omma
-Name[fr]=Grand-mère
-Name[gl]=Aboa
-Name[he]=סבתא
-Name[hi]=दादी अम्मा
-Name[hr]=Baka
-Name[hu]=Nagyi
-Name[is]=Amma
-Name[it]=Nonna
-Name[km]=យាយ
-Name[ko]=할머니
-Name[lv]=Vecmāmiņa
-Name[mk]=Старовремско
-Name[mt]=Nanna
-Name[nb]=Bestemor
-Name[nds]=Oma
-Name[ne]=हजुरआमा
-Name[nl]=Grootmoeder
-Name[nn]=Bestemor
-Name[pl]=Babcia
-Name[pt]=Avó
-Name[pt_BR]=Vovó
-Name[ro]=Bunica
-Name[ru]=Бабуля
-Name[se]=Áhkku
-Name[sk]=Stará mama
-Name[sl]=Babica
-Name[sr]=Бака
-Name[sr@Latn]=Baka
-Name[sv]=Farmor
-Name[ta]=பாட்டி
-Name[tg]=Модаркалон
-Name[tr]=Büyük anne
-Name[uk]=Бабуся
-Name[ven]=Makhulu vha mukegulu
-Name[wa]=Grand-mere
-Name[xh]=Umakhulu
-Name[zh_CN]=祖母
-Name[zh_TW]=祖母
-Name[zu]=Ugogo
diff --git a/libkdegames/carddecks/decks/deck16.png b/libkdegames/carddecks/decks/deck16.png
deleted file mode 100644
index 8310ecbe..00000000
Binary files a/libkdegames/carddecks/decks/deck16.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck17.desktop b/libkdegames/carddecks/decks/deck17.desktop
deleted file mode 100644
index 1537939f..00000000
--- a/libkdegames/carddecks/decks/deck17.desktop
+++ /dev/null
@@ -1,65 +0,0 @@
-[KDE Cards]
-Name=Modern Red
-Name[af]=Moderne Rooi
-Name[ar]=أحمر حديث
-Name[az]=Çağdaş Qırmızı
-Name[be]=Сучасны чырвоны
-Name[bg]=Модерно червено
-Name[bn]=আধুনিক লাল
-Name[bs]=Moderna crvena
-Name[ca]=Vermell modern
-Name[cs]=Moderní červená
-Name[cy]=Coch Cyfoes
-Name[da]=Moderne rød
-Name[de]=Modernes Rot
-Name[el]=Μοντέρνο κόκκινο
-Name[eo]=Moderna ruĝo
-Name[es]=Rojo moderno
-Name[et]=Modernpunane
-Name[eu]=Gorri modernoa
-Name[fa]=قرمز مدرن‌
-Name[fi]=Moderni punainen
-Name[fr]=Rouge moderne
-Name[gl]=Vermello moderno
-Name[he]=אדום מודרני
-Name[hi]=आधुनिक लाल
-Name[hr]=Suvremeno crvena
-Name[hu]=Modern vörös
-Name[is]=Nútíma rauður
-Name[it]=Rosso moderno
-Name[ja]=モダンレッド
-Name[km]=ពណ៌​ក្រហម​ទំនើប
-Name[ko]=현대적 빨간색
-Name[lt]=Moderni raudona
-Name[lv]=Moderni sarkans
-Name[mk]=Модерно црвено
-Name[mt]=Aħmar modern
-Name[nb]=Moderne Rød
-Name[nds]=Modern Root
-Name[ne]=उन्नत रातो
-Name[nl]=Modern rood
-Name[nn]=Moderne raud
-Name[pa]=ਨਵਾਂ ਲਾਲ
-Name[pl]=Nowoczesny czerwony
-Name[pt]=Vermelho Moderno
-Name[pt_BR]=Vermelho Moderno
-Name[ro]=Roşu modern
-Name[ru]=Современный красный
-Name[se]=Ođđaáigásaš ruoksat
-Name[sk]=Moderné červené
-Name[sl]=Moderna rdeča
-Name[sr]=Модерни црвени
-Name[sr@Latn]=Moderni crveni
-Name[sv]=Modern röd
-Name[ta]=நவீன சிகப்பு
-Name[tg]=Сурхи Замонавӣ
-Name[th]=แดงทันสมัย
-Name[tr]=Modern Kırmızı
-Name[uk]=Плетінь
-Name[ven]=Muvhala Mutshuku wa Tshizwino
-Name[vi]=Màu đềEhiện đại 
-Name[wa]=Rodje modiene
-Name[xh]=Umbala omtsha obomvu 
-Name[zh_CN]=现代红
-Name[zh_TW]=現代紅
-Name[zu]=Ububomvu besimanje
diff --git a/libkdegames/carddecks/decks/deck17.png b/libkdegames/carddecks/decks/deck17.png
deleted file mode 100644
index 71054897..00000000
Binary files a/libkdegames/carddecks/decks/deck17.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck18.desktop b/libkdegames/carddecks/decks/deck18.desktop
deleted file mode 100644
index c3266a98..00000000
--- a/libkdegames/carddecks/decks/deck18.desktop
+++ /dev/null
@@ -1,19 +0,0 @@
-[KDE Cards]
-Name=Holstentor
-Name[be]=Палац
-Name[bg]=Замък
-Name[bn]=হোলস্টেনটর
-Name[eo]=Holsten-pordego
-Name[hi]=हॉल्स्टेंटर
-Name[lv]=Holšteina
-Name[mk]=Холстентор
-Name[nds]=Holstendoor
-Name[ne]=होल्सटेन्टर
-Name[ru]=Замок
-Name[sr]=Холстентор
-Name[ta]=ஹால்ஸ்டென்டர்
-Name[tg]=Қулф
-Name[uk]=Замок
-Name[ven]=Vhushavhelo
-Name[zh_CN]=豪斯顿门
-Name[zu]=I-Holstentor
diff --git a/libkdegames/carddecks/decks/deck18.png b/libkdegames/carddecks/decks/deck18.png
deleted file mode 100644
index fc93b02f..00000000
Binary files a/libkdegames/carddecks/decks/deck18.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck19.desktop b/libkdegames/carddecks/decks/deck19.desktop
deleted file mode 100644
index d77c2c98..00000000
--- a/libkdegames/carddecks/decks/deck19.desktop
+++ /dev/null
@@ -1,63 +0,0 @@
-[KDE Cards]
-Name=Horizon
-Name[af]=Horison
-Name[ar]=الأفق
-Name[az]=Üfüq
-Name[be]=Гарызонт
-Name[bg]=Хоризонт
-Name[bn]=দিগন্ত
-Name[br]=Dremmwel
-Name[bs]=Horizont
-Name[ca]=Horitzó
-Name[cs]=Horizont
-Name[cy]=Gorwel
-Name[da]=Horisont
-Name[de]=Horizont
-Name[el]=Ορίζοντας
-Name[eo]=Horizonto
-Name[es]=Horizonte
-Name[et]=Horisont
-Name[eu]=Zeruertza
-Name[fa]=افق
-Name[fi]=Horisontti
-Name[ga]=Léaslíne
-Name[gl]=Horizonte
-Name[he]=אופק
-Name[hi]=क्षितिज
-Name[hr]=Horizont
-Name[hu]=Horizont
-Name[is]=Sjóndeildarhringur
-Name[it]=Orizzonte
-Name[km]=ជើង​មេឃ
-Name[ko]=수평선
-Name[lv]=Horizonts
-Name[mk]=Хоризонт
-Name[mt]=Orizzont
-Name[nb]=Horisont
-Name[nds]=Kimm
-Name[ne]=क्षितिज
-Name[nn]=Horisont
-Name[pa]=ਖੇਤਰ
-Name[pl]=Horyzont
-Name[pt]=Horizonte
-Name[pt_BR]=Horizonte
-Name[ro]=Orizont
-Name[ru]=Горизонт
-Name[sk]=Horizont
-Name[sl]=Obzorje
-Name[sr]=Хоризонт
-Name[sr@Latn]=Horizont
-Name[sv]=Horisont
-Name[ta]=ஹாரிஸான்
-Name[tg]=Уфуқ
-Name[tr]=Ufuk
-Name[uk]=Обрій
-Name[uz]=Ufq
-Name[uz@cyrillic]=Уфқ
-Name[ven]=Magumoni a shango
-Name[vi]=Chân trời 
-Name[wa]=Roye di cir
-Name[xh]=Ulundi
-Name[zh_CN]=地平线
-Name[zh_TW]=地平線
-Name[zu]=Okusesibhakabhakeni
diff --git a/libkdegames/carddecks/decks/deck19.png b/libkdegames/carddecks/decks/deck19.png
deleted file mode 100644
index 1526e0b3..00000000
Binary files a/libkdegames/carddecks/decks/deck19.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck2.desktop b/libkdegames/carddecks/decks/deck2.desktop
deleted file mode 100644
index 4e3906b2..00000000
--- a/libkdegames/carddecks/decks/deck2.desktop
+++ /dev/null
@@ -1,49 +0,0 @@
-[KDE Cards]
-Name=Starrise
-Name[ar]=ظهور النجوم
-Name[be]=Узыход зоркі
-Name[bg]=Звезди
-Name[bn]=তারার উদয়
-Name[ca]=Estrellat
-Name[cs]=Úsvit
-Name[cy]=Codiad y sêr
-Name[de]=Sternenaufgang
-Name[eo]=Stellumo
-Name[et]=Tähetõus
-Name[eu]=Izarrak
-Name[fa]=پدیدار شدن ستاره
-Name[fi]=Tähdennousu
-Name[fr]=Étoiles
-Name[he]=צאת הכוכבים
-Name[hi]=स्टार-राइज़
-Name[hr]=Uspon zvijezda
-Name[hu]=Csillagok
-Name[is]=Ris stjarna
-Name[it]=Alba spaziale
-Name[ko]=별무리
-Name[lv]=Zvaigžņu lēkts
-Name[mk]=Изгрев
-Name[mt]=SemaStilel
-Name[nb]=Stjerner
-Name[nds]=Steernopgang
-Name[ne]=स्टारराइज
-Name[nl]=Sterrijzenis
-Name[nn]=Stjerner
-Name[pa]=ਚੜਦਾ ਤਾਰਾ
-Name[pl]=Wschód gwiazdy
-Name[ro]=Stelar
-Name[ru]=Восход звезды
-Name[se]=Násttit
-Name[sk]=Východ hviezd
-Name[sl]=Vzhod zvezde
-Name[sr]=Сазвежђе
-Name[sr@Latn]=Sazvežđe
-Name[sv]=Stjärnuppgång
-Name[ta]=நட்சத்திர உதயம்
-Name[tg]=Пайдоиши ситора
-Name[uk]=Схід зірки
-Name[ven]=Vhubva naledzi
-Name[xh]=Inkwenkwezi ephumayo
-Name[zh_CN]=星空
-Name[zh_TW]=星空
-Name[zu]=Ukuvuka kwezinkanyezi
diff --git a/libkdegames/carddecks/decks/deck2.png b/libkdegames/carddecks/decks/deck2.png
deleted file mode 100644
index 52f1b67a..00000000
Binary files a/libkdegames/carddecks/decks/deck2.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck20.desktop b/libkdegames/carddecks/decks/deck20.desktop
deleted file mode 100644
index 3403b23f..00000000
--- a/libkdegames/carddecks/decks/deck20.desktop
+++ /dev/null
@@ -1,71 +0,0 @@
-[KDE Cards]
-Name=Flowers
-Name[af]=Blomme
-Name[ar]=أزهار
-Name[az]=Çiçəklər
-Name[be]=Кветкі
-Name[bg]=Цветя
-Name[bn]=ফুল
-Name[br]=Bleunioù
-Name[bs]=Cvijeće
-Name[ca]=Flors
-Name[cs]=Květiny
-Name[cy]=Blodau
-Name[da]=Blomster
-Name[de]=Blumen
-Name[el]=Λουλούδια
-Name[eo]=Floroj
-Name[es]=Flores
-Name[et]=Lilled
-Name[eu]=Loreak
-Name[fa]=گلها
-Name[fi]=Kukat
-Name[fo]=Blómur
-Name[fr]=Fleurs
-Name[ga]=Bláthanna
-Name[gl]=Flores
-Name[he]=פרחים
-Name[hi]=पुष्प
-Name[hr]=Cvjetovi
-Name[hu]=Virágok
-Name[is]=Blóm
-Name[it]=Fiori
-Name[ja]=花
-Name[km]=ផ្កា
-Name[ko]=꽃
-Name[lt]=Gėlės
-Name[lv]=Puķes
-Name[mk]=Цвеќиња
-Name[mt]=Fjuri
-Name[nb]=Blomster
-Name[nds]=Blomen
-Name[ne]=फूल
-Name[nl]=Bloemen
-Name[nn]=Blomar
-Name[nso]=Maloba
-Name[pa]=ਫੁੱਲ
-Name[pl]=Kwiaty
-Name[pt]=Flores
-Name[pt_BR]=Flores
-Name[ro]=Flori
-Name[ru]=Цветы
-Name[se]=Lieđit
-Name[sk]=Kvety
-Name[sl]=Rože
-Name[sr]=Цвеће
-Name[sr@Latn]=Cveće
-Name[sv]=Blommor
-Name[ta]=மலர்கள்
-Name[tg]=Гулҳо
-Name[th]=ดอกไม้
-Name[tr]=Çiçekler
-Name[uk]=Квіти
-Name[uz]=Gullar
-Name[uz@cyrillic]=Гуллар
-Name[ven]=Maluvha
-Name[vi]=Hoa 
-Name[wa]=Fleurs
-Name[xh]=Iintyatyambo
-Name[zh_CN]=鲜花
-Name[zh_TW]=鮮花
-Name[zu]=Izimbali
diff --git a/libkdegames/carddecks/decks/deck20.png b/libkdegames/carddecks/decks/deck20.png
deleted file mode 100644
index 73d76887..00000000
Binary files a/libkdegames/carddecks/decks/deck20.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck21.desktop b/libkdegames/carddecks/decks/deck21.desktop
deleted file mode 100644
index b170ee53..00000000
--- a/libkdegames/carddecks/decks/deck21.desktop
+++ /dev/null
@@ -1,65 +0,0 @@
-[KDE Cards]
-Name=Carpet
-Name[af]=Tapyt
-Name[ar]=سجادة
-Name[az]=Xalı
-Name[be]=Дыван
-Name[bg]=Килим
-Name[bn]=গালিচা
-Name[bs]=Ćilim
-Name[ca]=Catifa
-Name[cs]=Koberec
-Name[cy]=Carped
-Name[da]=Tæppe
-Name[de]=Teppich
-Name[el]=Μοκέτα
-Name[eo]=Tapiŝo
-Name[es]=Alfombra
-Name[et]=Vaip
-Name[eu]=Tapiza
-Name[fa]=فرش
-Name[fi]=Matto
-Name[fr]=Tapis
-Name[gl]=Alfombra
-Name[he]=שטיח
-Name[hi]=कालीन
-Name[hr]=Tepih
-Name[hu]=Szőnyeg
-Name[is]=Teppi
-Name[it]=Tappeto
-Name[km]=កម្រាល​ព្រំ
-Name[ko]=양탄자
-Name[lt]=Kilimas
-Name[lv]=Paklājs
-Name[mk]=Килим
-Name[mt]=Tapit
-Name[nb]=Teppe
-Name[nds]=Teppich
-Name[ne]=कार्पेट
-Name[nl]=Tapijt
-Name[nn]=Teppe
-Name[pa]=ਦਰੀ
-Name[pl]=Dywan
-Name[pt]=Carpete
-Name[pt_BR]=Carpete
-Name[ro]=Carpetă
-Name[ru]=Ковёр
-Name[se]=Máhttá
-Name[sl]=Preproga
-Name[sr]=Тепих
-Name[sr@Latn]=Tepih
-Name[sv]=Matta
-Name[ta]=கம்பளம்
-Name[tg]=Гилем
-Name[th]=พรม
-Name[tr]=Halı
-Name[uk]=Килим
-Name[uz]=Gilam
-Name[uz@cyrillic]=Гилам
-Name[ven]=Dzithovho
-Name[vi]=Thảm 
-Name[wa]=Carpete
-Name[xh]=Ikhaphethi
-Name[zh_CN]=地毯
-Name[zh_TW]=地毯
-Name[zu]=UKhaphethi
diff --git a/libkdegames/carddecks/decks/deck21.png b/libkdegames/carddecks/decks/deck21.png
deleted file mode 100644
index 204156ba..00000000
Binary files a/libkdegames/carddecks/decks/deck21.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck22.desktop b/libkdegames/carddecks/decks/deck22.desktop
deleted file mode 100644
index 940b4f53..00000000
--- a/libkdegames/carddecks/decks/deck22.desktop
+++ /dev/null
@@ -1,58 +0,0 @@
-[KDE Cards]
-Name=Bathing
-Name[af]=Swem
-Name[ar]=يتحمم
-Name[az]=Çimmə
-Name[be]=Купанне
-Name[bg]=Море
-Name[bn]=গোসল, স্নান
-Name[bs]=Kupanje
-Name[ca]=Balneari
-Name[cs]=Koupel
-Name[cy]=Ymolchi
-Name[da]=Badning
-Name[de]=Baden
-Name[eo]=Banloko
-Name[es]=Balneario
-Name[et]=Suplus
-Name[eu]=Bainua
-Name[fi]=Kylpy
-Name[fr]=Baignade
-Name[gl]=Baño
-Name[he]=מקלחת
-Name[hi]=बाथिंग
-Name[hr]=Kupanje
-Name[hu]=Fürdő
-Name[is]=Í baði
-Name[it]=Balneare
-Name[km]=កំពុង​ងូត​ទឹក
-Name[ko]=목욕
-Name[lt]=Maudynės
-Name[lv]=Peldēšanās
-Name[mk]=Капење
-Name[mt]=Għawm
-Name[nb]=Bading
-Name[nds]=Baden
-Name[ne]=नुहाएको
-Name[nl]=Baden
-Name[nn]=Bad
-Name[pl]=Kąpiel
-Name[pt]=Banho
-Name[pt_BR]=Banho
-Name[ro]=Îmbăiere
-Name[ru]=Купание
-Name[se]=Lávgudeapmi
-Name[sl]=Kopel
-Name[sr]=Купање
-Name[sr@Latn]=Kupanje
-Name[sv]=Bad
-Name[ta]=குளியல்
-Name[tg]=Оббозӣ
-Name[tr]=Yüzme
-Name[uk]=Купання
-Name[ven]=Hu khou tambiwa
-Name[vi]=Tắm 
-Name[xh]=Ukuhlamba
-Name[zh_CN]=游泳
-Name[zh_TW]=游泳
-Name[zu]=Ukugeza
diff --git a/libkdegames/carddecks/decks/deck22.png b/libkdegames/carddecks/decks/deck22.png
deleted file mode 100644
index ff3f9834..00000000
Binary files a/libkdegames/carddecks/decks/deck22.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck23.desktop b/libkdegames/carddecks/decks/deck23.desktop
deleted file mode 100644
index ef096f15..00000000
--- a/libkdegames/carddecks/decks/deck23.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Cards]
-Name=Oasis
-Name[af]=Oase
-Name[ar]=واحة
-Name[az]=Oazis
-Name[be]=Аазіс
-Name[bg]=Оазис
-Name[bn]=মরুদ্যান
-Name[br]=Oazis
-Name[bs]=Oaza
-Name[cs]=Oáza
-Name[da]=Oase
-Name[de]=Oase
-Name[el]=Όαση
-Name[eo]=Oazo
-Name[et]=Oaas
-Name[eu]=Oasia
-Name[fa]=آبادی
-Name[fo]=Oasa
-Name[hi]=ओएसिस
-Name[hr]=Oaza
-Name[hu]=Oázis
-Name[is]=Vin
-Name[it]=Oasi
-Name[ko]=오아시스
-Name[lt]=Oazė
-Name[lv]=Oāze
-Name[mk]=Оаза
-Name[mt]=Oażi
-Name[nb]=Oase
-Name[nds]=Oaas
-Name[ne]=ओसिस
-Name[nl]=Oase
-Name[nn]=Oase
-Name[pl]=Oaza
-Name[pt]=Oásis
-Name[pt_BR]=Oásis
-Name[ru]=Оазис
-Name[sk]=Oáza
-Name[sl]=Oaza
-Name[sr]=Оаза
-Name[sr@Latn]=Oaza
-Name[sv]=Oas
-Name[ta]=ஒயாஸிஸ்
-Name[tg]=Оазис
-Name[th]=โอเอซิส
-Name[tr]=Vaha
-Name[uk]=Оазис
-Name[uz]=Voha
-Name[uz@cyrillic]=Воҳа
-Name[vi]=Ô'c đảo 
-Name[xh]=Indawo esentlango enamanzi
-Name[zh_CN]=绿洲
-Name[zh_TW]=綠洲
-Name[zu]=Indawo evundileyo
diff --git a/libkdegames/carddecks/decks/deck23.png b/libkdegames/carddecks/decks/deck23.png
deleted file mode 100644
index a3025212..00000000
Binary files a/libkdegames/carddecks/decks/deck23.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck24.desktop b/libkdegames/carddecks/decks/deck24.desktop
deleted file mode 100644
index 002af784..00000000
--- a/libkdegames/carddecks/decks/deck24.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Konqi
-Name[be]=Конкі
-Name[bg]=Конки
-Name[bn]=কনকি
-Name[cs]=Konqui
-Name[eo]=Konĉja
-Name[hi]=के-ऑन्गी
-Name[it]=Konqui
-Name[lv]=Konvi
-Name[ne]=कोन्क्वी
-Name[ru]=Конки
-Name[sr]=Конки
-Name[sr@Latn]=Konki
-Name[ta]=கான்கி
-Name[tg]=Конки
-Name[uk]=Конкі
-Name[zu]=I-Konqi
-Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bs]=Modern Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n     <l_layland@hotmail.com>\nKonqi per Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Laylanda\n     <l_layland@hotmail.com>\nKonqi von Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n    <l_layland@hotmail.com>\nKonĉjo de Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n     لایلند <l_layland@hotmail.com>\nKonqi توسط استفان اسپاتز\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n <l_layland@hotmail.com>\nKonqi Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n     <l_layland@hotmail.com>\nKonqi par Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[he]=קונקי מודרני - חפיסת קלים לכל השפחה\nעיצוב: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[it]=Konqui Moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKonqui di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n     <l_layland@hotmail.com>\nKonqi の作者: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n
-Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Konkvi no Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi vun Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ne]=आधुनिक क्वोन्की - पारिवारिक कार्डडेक\nडिजाइन प्ले: लाउरा लेल्यान्ड\n     <l_layland@hotmail.com>\nKonqi, स्टेफन स्पार्टजद्वारा\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi door Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ru]=Колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Layland\n <l_layland@hotmail.com>\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ta]=மார்டன் கான்கி - குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லௌரா லேலாண்டு\n      <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Layland\n     <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n     <l_layland@hotmail.com>\nKonqi pa Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libkdegames/carddecks/decks/deck24.png b/libkdegames/carddecks/decks/deck24.png
deleted file mode 100644
index 0596e919..00000000
Binary files a/libkdegames/carddecks/decks/deck24.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck3.desktop b/libkdegames/carddecks/decks/deck3.desktop
deleted file mode 100644
index a383495e..00000000
--- a/libkdegames/carddecks/decks/deck3.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Romantic
-Name[af]=Romantiese
-Name[ar]=رومانسي
-Name[az]=Romantik
-Name[be]=Рамантыка
-Name[bg]=Романтика
-Name[bn]=রোমান্টিক
-Name[bs]=Romantika
-Name[ca]=Romàntic
-Name[cs]=Romantika
-Name[cy]=Rhamantus
-Name[da]=Romantisk
-Name[de]=Romantisch
-Name[el]=Ρομαντικό
-Name[eo]=Romantiko
-Name[es]=Romántico
-Name[et]=Romantika
-Name[eu]=Erromantikoa
-Name[fa]=خیال‌انگیز
-Name[fi]=Romanttinen
-Name[fr]=Romantique
-Name[gl]=Romántica
-Name[he]=רומנטי
-Name[hi]=रूमानी
-Name[hr]=Romantika
-Name[hu]=Romantikus
-Name[is]=Rómantískt
-Name[it]=Romantico
-Name[km]=មនោសញ្ចេតនា
-Name[ko]=로맨틱
-Name[lt]=Romantika
-Name[lv]=Romantika
-Name[mk]=Романтика
-Name[mt]=Romantiku
-Name[nb]=Romantisk
-Name[nds]=Romantsch
-Name[ne]=रोमान्टिक
-Name[nl]=Romantisch
-Name[nn]=Romantisk
-Name[pa]=ਰੁਮਾਂਸਵਾਦੀ
-Name[pl]=Romantyczny
-Name[pt]=Romântico
-Name[pt_BR]=Romântico
-Name[ru]=Романтика
-Name[se]=Romántalaš
-Name[sk]=Romantické
-Name[sl]=Romantično
-Name[sr]=Романтичан
-Name[sr@Latn]=Romantičan
-Name[sv]=Romantisk
-Name[ta]=ரொமான்டிக்
-Name[tg]=Хаёлпарастӣ
-Name[th]=โรแมนติก
-Name[uk]=Романтичний
-Name[vi]=Lãng mạn 
-Name[wa]=Romantike
-Name[zh_CN]=浪漫
-Name[zh_TW]=浪漫的
-Name[zu]=I-Romantic
diff --git a/libkdegames/carddecks/decks/deck3.png b/libkdegames/carddecks/decks/deck3.png
deleted file mode 100644
index dced5af7..00000000
Binary files a/libkdegames/carddecks/decks/deck3.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck4.desktop b/libkdegames/carddecks/decks/deck4.desktop
deleted file mode 100644
index c23f4963..00000000
--- a/libkdegames/carddecks/decks/deck4.desktop
+++ /dev/null
@@ -1,93 +0,0 @@
-[KDE Cards]
-Name=Panda
-Name[ar]=باندا
-Name[be]=Панда
-Name[bg]=Панда
-Name[bn]=পান্ডা
-Name[el]=Πάντα
-Name[eo]=Pando
-Name[fa]=پاندا
-Name[he]=פנדה
-Name[hi]=पाण्डा
-Name[is]=Pandabjörn
-Name[ko]=팬더
-Name[mk]=Панда
-Name[ne]=पान्डा
-Name[pa]=ਪਾਂਡਾ
-Name[ru]=Панда
-Name[sr]=Панда
-Name[ta]=பாண்டா
-Name[tg]=Панда
-Name[th]=แพนด้า
-Name[uk]=Панда
-Name[uz@cyrillic]=Панда
-Name[ven]=Tshivhingwi
-Name[vi]=Gấu mèo 
-Name[xh]=Ibhere
-Name[zh_CN]=熊猫
-Name[zh_TW]=熊貓
-Name[zu]=Ibhele
-Comment=Dedicated to WWF
-Comment[af]=Opgedra  na Wwf
-Comment[ar]=إهداء إلى المؤسسة العالمية للحفاظ على البيئة (WWF) 
-Comment[az]=WWFyə hasr edilib
-Comment[be]=Прысвячаецца WWF
-Comment[bg]=Посвещава се на WWF
-Comment[bn]=WWF-এর প্রতি উত্‍সর্গীকৃত
-Comment[bs]=Posvećen WWFu
-Comment[ca]=Dedicat a WWF
-Comment[cs]=Věnované WWF
-Comment[cy]=Cyflwynedig i\'r WWF
-Comment[da]=Dedikeret til WWF
-Comment[de]=Dem WWF gewidmet
-Comment[el]=Αφιερωμένο στο WWF
-Comment[eo]=Dediĉita al WWF
-Comment[es]=Dedicado a WWF
-Comment[et]=Pühendatud organisatsioonile WWF
-Comment[eu]=WWF-ren ohorean
-Comment[fa]=مختص WWF
-Comment[fi]=Omistettu WWF:lle
-Comment[fr]=Dédicacé au WWF
-Comment[gl]=Adicado a WWF
-Comment[he]=מוקדש לקרן העולמית
-Comment[hi]=डब्लयूडब्लयूएफ को समर्पित
-Comment[hr]=Posvećeno WWF-u
-Comment[hu]=A WWF-nek dedikálva
-Comment[is]=Tileinkað WWF
-Comment[it]=Dedicato al WWF
-Comment[ja]=WWF に捧ぐ
-Comment[km]=ឧទ្ទិស​ជូន WWF
-Comment[ko]=WWF에 바침
-Comment[lt]=Skirta WWF
-Comment[lv]=Veltīts WWF
-Comment[mk]=Посветено на WWF (светска фондација за дивиот свет)
-Comment[mt]=Dedikat lill-WWF
-Comment[nb]=Dedikert til WWF
-Comment[nds]=Den WWF toeegt
-Comment[ne]=डब्लूडब्लूएफ प्रति समर्पित
-Comment[nl]=Opgedragen aan WWF (WereldNatuurFonds)
-Comment[nn]=Tileigna WWF
-Comment[pa]=WWF ਨੂੰ ਸਮਰਪਤ
-Comment[pl]=Przeznaczony do WWF
-Comment[pt]=Dedicado ao WWF
-Comment[pt_BR]=Dedicado ao WWF
-Comment[ro]=Dedicat lui WWF
-Comment[ru]=Посвящается WWF
-Comment[sk]=Venované WWF
-Comment[sl]=Posvečeno WWF
-Comment[sr]=Посвећено WWF-у
-Comment[sr@Latn]=Posvećeno WWF-u
-Comment[sv]=Tillägnad WWF
-Comment[ta]= WWF-க்கு அர்ப்பணிக்கப்பட்டது
-Comment[tg]=Бахшида шудааст ба WWF
-Comment[tr]=WWF'e adanmış
-Comment[uk]=Присвячено WWF
-Comment[uz]=WWF tashkilotiga bagʻishlangan
-Comment[uz@cyrillic]=WWF ташкилотига бағишланган
-Comment[ven]=Yo livhiswa kha WWF
-Comment[vi]=Dâng tặng WWF 
-Comment[wa]=Dicåçté å WWF
-Comment[xh]=Yenzelwe ku WWF
-Comment[zh_CN]=献给 WWF
-Comment[zh_TW]=獻給 WWF
-Comment[zu]=Inikelwe kwi-WWF
diff --git a/libkdegames/carddecks/decks/deck4.png b/libkdegames/carddecks/decks/deck4.png
deleted file mode 100644
index 23fa4010..00000000
Binary files a/libkdegames/carddecks/decks/deck4.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck5.desktop b/libkdegames/carddecks/decks/deck5.desktop
deleted file mode 100644
index 5cbe2d6f..00000000
--- a/libkdegames/carddecks/decks/deck5.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Water
-Name[ar]=ماء
-Name[az]=Su
-Name[be]=Вада
-Name[bg]=Вода
-Name[bn]=পানি
-Name[br]=Dou
-Name[bs]=Voda
-Name[ca]=Aigua
-Name[cs]=Voda
-Name[cy]=Dŵr
-Name[da]=Vand
-Name[de]=Wasser
-Name[el]=Νερό
-Name[eo]=Akvo
-Name[es]=Agua
-Name[et]=Vesi
-Name[eu]=Ura
-Name[fa]=آب
-Name[fi]=Vesi
-Name[fo]=Vatn
-Name[fr]=Eau
-Name[ga]=Uisce
-Name[gl]=Auga
-Name[he]=מים
-Name[hi]=पानी
-Name[hr]=Voda
-Name[hu]=Víz
-Name[is]=Vatn
-Name[it]=Acqua
-Name[ja]=水
-Name[km]=ទឹក
-Name[ko]=물
-Name[lt]=Vanduo
-Name[lv]=Ūdens
-Name[mk]=Вода
-Name[mt]=Ilma
-Name[nb]=Vann
-Name[ne]=पानी
-Name[nn]=Vatn
-Name[nso]=Meetse
-Name[pa]=ਪਾਣੀ
-Name[pl]=Woda
-Name[pt]=Água
-Name[pt_BR]=Água
-Name[ro]=Apă
-Name[ru]=Вода
-Name[se]=Čáhci
-Name[sk]=Voda
-Name[sl]=Voda
-Name[sr]=Вода
-Name[sr@Latn]=Voda
-Name[sv]=Vatten
-Name[ta]=தண்ணீர்
-Name[tg]=Об
-Name[th]=น้ำ
-Name[uk]=Вода
-Name[uz]=Suv
-Name[uz@cyrillic]=Сув
-Name[ven]=Madi
-Name[vi]=Nước 
-Name[wa]=Aiwe
-Name[xh]=Amanzi
-Name[zh_CN]=水
-Name[zh_TW]=水
-Name[zu]=Amanzi
diff --git a/libkdegames/carddecks/decks/deck5.png b/libkdegames/carddecks/decks/deck5.png
deleted file mode 100644
index 63cb6762..00000000
Binary files a/libkdegames/carddecks/decks/deck5.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck6.desktop b/libkdegames/carddecks/decks/deck6.desktop
deleted file mode 100644
index 6d84a8ad..00000000
--- a/libkdegames/carddecks/decks/deck6.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Beach
-Name[af]=Strand
-Name[ar]=شاطئ
-Name[az]=Çimərlik
-Name[be]=Пляж
-Name[bg]=Плаж
-Name[bn]=সৈকত
-Name[br]=Traezhenn
-Name[bs]=Plaža
-Name[ca]=Platja
-Name[cs]=Pláž
-Name[cy]=Traeth
-Name[da]=Strand
-Name[de]=Strand
-Name[el]=Παραλία
-Name[eo]=Plaĝo
-Name[es]=Playa
-Name[et]=Rand
-Name[eu]=Hondartza
-Name[fa]=ساحل
-Name[fi]=Ranta
-Name[fr]=Plage
-Name[gl]=Praia
-Name[he]=חוף
-Name[hi]=समुद्र तट
-Name[hr]=Plaža
-Name[hu]=Tengerpart
-Name[is]=Strönd
-Name[it]=Spiaggia
-Name[km]=ឆ្នេរ​ខ្សាច់
-Name[ko]=바닷가
-Name[lt]=Paplūdimys
-Name[lv]=Pludmale
-Name[mk]=Плажа
-Name[mt]=Ramla
-Name[nb]=Strand
-Name[nds]=Strand
-Name[ne]=किनारा
-Name[nl]=Strand
-Name[nn]=Strand
-Name[nso]=Lewatle
-Name[pa]=ਬੀਚ
-Name[pl]=Plaża
-Name[pt]=Praia
-Name[pt_BR]=Praia
-Name[ro]=Plajă
-Name[ru]=Пляж
-Name[se]=Fiervá
-Name[sk]=Pláž
-Name[sl]=Obala
-Name[sr]=Плажа
-Name[sr@Latn]=Plaža
-Name[sv]=Strand
-Name[ta]=கடல்
-Name[tg]=Пляж
-Name[th]=อ่าว
-Name[tr]=Sahil
-Name[uk]=Пляж
-Name[ven]=Bitshini
-Name[vi]=Bãi biển 
-Name[wa]=Pladje
-Name[xh]=Ulwande
-Name[zh_CN]=海滩
-Name[zh_TW]=海灘
-Name[zu]=Ulwandle
diff --git a/libkdegames/carddecks/decks/deck6.png b/libkdegames/carddecks/decks/deck6.png
deleted file mode 100644
index 1708d784..00000000
Binary files a/libkdegames/carddecks/decks/deck6.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck7.desktop b/libkdegames/carddecks/decks/deck7.desktop
deleted file mode 100644
index 3590a15e..00000000
--- a/libkdegames/carddecks/decks/deck7.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Sunset
-Name[af]=Sonsondergang
-Name[ar]=غروب الشمس
-Name[az]=Gün doğuşu
-Name[be]=Заход
-Name[bg]=Залез
-Name[bn]=সূর্যাস্ত
-Name[br]=Kuzh-heol
-Name[bs]=Zalazak
-Name[ca]=Posta de sol
-Name[cs]=Západ slunce
-Name[cy]=Machlud
-Name[da]=Solnedgang
-Name[de]=Sonnenuntergang
-Name[el]=Ηλιοβασίλεμα
-Name[eo]=Sunsubiro
-Name[es]=Puesta de sol
-Name[et]=Loojang
-Name[eu]=Eguzki-sartzea
-Name[fa]=غروب
-Name[fi]=Auringonlasku
-Name[fo]=Sólsetur
-Name[fr]=Soleil
-Name[gl]=Entre lusco e fusco
-Name[he]=שקיעה
-Name[hi]=सूर्यास्त
-Name[hr]=Zalazak sunca
-Name[hu]=Naplemente
-Name[is]=Sólsetur
-Name[it]=Tramonto
-Name[km]=សុរិយា​អស្ដង្គត
-Name[ko]=저녁놀
-Name[lt]=Saulėlydis
-Name[lv]=Saullēkts
-Name[mk]=Зајдисонце
-Name[mt]=Għabex
-Name[nb]=Solnedgang
-Name[nds]=Sünnünnergang
-Name[ne]=सुर्यास्त
-Name[nl]=Zonsondergang
-Name[nn]=Solrenning
-Name[pa]=ਡੁੱਬਦਾ ਸੂਰਜ
-Name[pl]=Zachód słońca
-Name[pt]=Pôr-do-Sol
-Name[pt_BR]=Pôr-do-sol
-Name[ro]=Asfinţit
-Name[ru]=Закат
-Name[sk]=Západ slnka
-Name[sl]=Sončni zahod
-Name[sr]=Залазак сунца
-Name[sr@Latn]=Zalazak sunca
-Name[sv]=Solnedgång
-Name[ta]=சூரிய அஸ்தமம்
-Name[tg]=Ғуруби Офтоб
-Name[th]=พระอาทิตย์ตก
-Name[tr]=Gündoğumu
-Name[uk]=Захід сонця
-Name[uz]=Oqshom
-Name[uz@cyrillic]=Оқшом
-Name[ven]=Vhukovhela
-Name[vi]=Hoàng hôn 
-Name[wa]=Solea djus
-Name[xh]=Ukutshona kwelanga
-Name[zh_CN]=日落
-Name[zh_TW]=日落
-Name[zu]=Ukushona kwelanga
diff --git a/libkdegames/carddecks/decks/deck7.png b/libkdegames/carddecks/decks/deck7.png
deleted file mode 100644
index c7f043db..00000000
Binary files a/libkdegames/carddecks/decks/deck7.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck8.desktop b/libkdegames/carddecks/decks/deck8.desktop
deleted file mode 100644
index 0c68bc9f..00000000
--- a/libkdegames/carddecks/decks/deck8.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Road
-Name[af]=Pad
-Name[ar]=طريق
-Name[az]=Yol
-Name[be]=Дарога
-Name[bg]=Път
-Name[bn]=পথ
-Name[bs]=Put
-Name[ca]=Carretera
-Name[cs]=Cesta
-Name[cy]=Ffordd
-Name[da]=Vej
-Name[de]=Straße
-Name[el]=Δρόμος
-Name[eo]=Strato
-Name[es]=Carretera
-Name[et]=Maantee
-Name[eu]=Errepidea
-Name[fa]=جاده
-Name[fi]=Tie
-Name[fo]=Vegur
-Name[fr]=Route
-Name[gl]=Estrada
-Name[he]=בדרכים
-Name[hi]=रास्ता
-Name[hr]=Cesta
-Name[hu]=Országút
-Name[is]=Vegur
-Name[it]=Strada
-Name[km]=ផ្លូវ
-Name[ko]=길
-Name[lt]=Kelias
-Name[lv]=Ceļš
-Name[mk]=Пат
-Name[mt]=Triq
-Name[nb]=Vei
-Name[nds]=Straat
-Name[ne]=बाटो
-Name[nl]=Weg
-Name[nn]=Veg
-Name[nso]=Tsela
-Name[pa]=ਰਾਹ
-Name[pl]=Droga
-Name[pt]=Estrada
-Name[pt_BR]=Estrada
-Name[ro]=Şosea
-Name[ru]=Дорога
-Name[se]=Geaidnu
-Name[sk]=Cesta
-Name[sl]=Cesta
-Name[sr]=Пут
-Name[sr@Latn]=Put
-Name[sv]=Väg
-Name[ta]=சாலை
-Name[tg]=Роҳ
-Name[th]=ถนน
-Name[tr]=Yol
-Name[uk]=Дорога
-Name[uz]=Yoʻl
-Name[uz@cyrillic]=Йўл
-Name[ven]=Bada
-Name[vi]=Con đường 
-Name[xh]=Indlela
-Name[zh_CN]=路
-Name[zh_TW]=道路
-Name[zu]=Umgwaqo
diff --git a/libkdegames/carddecks/decks/deck8.png b/libkdegames/carddecks/decks/deck8.png
deleted file mode 100644
index 4fed86e6..00000000
Binary files a/libkdegames/carddecks/decks/deck8.png and /dev/null differ
diff --git a/libkdegames/carddecks/decks/deck9.desktop b/libkdegames/carddecks/decks/deck9.desktop
deleted file mode 100644
index 2541e22a..00000000
--- a/libkdegames/carddecks/decks/deck9.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-[KDE Cards]
-Name=KDE
-Name[af]=Kde
-Name[bn]=কে.ডি.ই.
-Name[hi]=केडीई
-Name[ne]=केडीई
-Name[ta]=கேடிஇ
diff --git a/libkdegames/carddecks/decks/deck9.png b/libkdegames/carddecks/decks/deck9.png
deleted file mode 100644
index 35abd0a8..00000000
Binary files a/libkdegames/carddecks/decks/deck9.png and /dev/null differ
diff --git a/libkdegames/configure.in.in b/libkdegames/configure.in.in
deleted file mode 100644
index ffcaf9c9..00000000
--- a/libkdegames/configure.in.in
+++ /dev/null
@@ -1,49 +0,0 @@
-dnl AB: checking for a system-wide highscore file. If "no" then the default
-dnl (just kapp->config()) is used. See KHighscore for details.
-
-AC_MSG_CHECKING(whether to use system-wide highscores)
-AC_ARG_ENABLE(highscore-dir,
-AC_HELP_STRING([--enable-highscore-dir=DIR], [system-wide highscore table @<:@default=no@:>@]), [use_highscore_dir=yes], [use_highscore_dir=no])
-
-if test "$use_highscore_dir" = "no"; then
-  AC_MSG_RESULT(no)
-  AC_SUBST(HIGHSCORE_DIRECTORY, "")
-else
-  case "${enableval}" in
-    yes) highscore_dir='${localstatedir}/games' ;;
-    no) ;;
-    *) highscore_dir=${enableval} ;;
-  esac
-  AC_DEFINE_UNQUOTED(HIGHSCORE_DIRECTORY, "$highscore_dir", [The system-wide highscore directory])
-  AC_SUBST(HIGHSCORE_DIRECTORY, $highscore_dir)
-  AC_MSG_RESULT($use_highscore_dir)
-fi
-
-AC_MSG_CHECKING(whether to setgid binaries)
-AC_ARG_ENABLE(setgid,
-  [  --enable-setgid           Enable the use of setgid binaries],
-  [case "${enableval}" in
-    yes) 
-        case "$use_highscore_dir" in 
-           yes) setgid=true;; 
-           no) setgid=false;; 
-        esac ;;
-    no)  setgid=false ;;
-    *) AC_MSG_ERROR(bad value ${enableval} for --disable-setgid) ;;
-   esac],[setgid=false])
-AC_SUBST(setgid)
-AC_MSG_RESULT($setgid)
-
-AC_MSG_CHECKING(what group to use for the highscore tables and binaries)
-AC_ARG_WITH(highscore-group,
-[  --with-highscore-group=group    Group for the highscore tables and binaries],
-highscore_group="$withval",highscore_group="games")
-AC_SUBST(highscore_group)
-AC_MSG_RESULT($highscore_group)
-
-AC_MSG_CHECKING(what user to use for the highscore tables and binaries)
-AC_ARG_WITH(highscore-user,
-[  --with-highscore-user=user    User for the highscore tables],
-highscore_user="$withval",highscore_user="games")
-AC_SUBST(highscore_user)
-AC_MSG_RESULT($highscore_user)
diff --git a/libkdegames/highscore/INSTALL b/libkdegames/highscore/INSTALL
deleted file mode 100644
index 5f9116cf..00000000
--- a/libkdegames/highscore/INSTALL
+++ /dev/null
@@ -1,12 +0,0 @@
-Installation notes for the highscore files ; this is only relevant if you
-configured libtdegames with option --enable-highscore-dir=DIR (usually DIR is
-/var/games) for using system-wide highscore files.
-
-For each game using the highscore system :
-
-- the game executable "mygame" should be installed sgid "games"
-
-- an empty file "mygame.scores" should be created in the directory pointed by
-the configuration option. It should be owned by group "games" with read and
-write permissions and should -not- be world readable (since it can contains
-possibly sensitive information associating username with game usage).
diff --git a/libkdegames/highscore/Makefile.am b/libkdegames/highscore/Makefile.am
deleted file mode 100644
index 6fa18cc0..00000000
--- a/libkdegames/highscore/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-noinst_LTLIBRARIES = libkhighscore.la
-
-INCLUDES = $(all_includes)
-
-libkhighscore_la_SOURCES =  kconfigrawbackend.cpp \
-	                    kfilelock.cpp khighscore.cpp kscoredialog.cpp \
-                            kexthighscore_item.cpp kexthighscore_internal.cpp \
-                            kexthighscore_tab.cpp kexthighscore_gui.cpp \
-                            kexthighscore.cpp
-
-include_HEADERS = khighscore.h kscoredialog.h \
-                  kexthighscore_item.h kexthighscore.h
-
-noinst_HEADERS = kconfigrawbackend.h \
-                 kfilelock.h kexthighscore_internal.h kexthighscore_tab.h \
-                 kexthighscore_gui.h
-
-METASOURCES = kconfigrawbackend.moc khighscore.moc kscoredialog.moc \
-              kexthighscore_tab.moc kexthighscore_gui.moc
diff --git a/libkdegames/highscore/kconfigrawbackend.cpp b/libkdegames/highscore/kconfigrawbackend.cpp
deleted file mode 100644
index c2643056..00000000
--- a/libkdegames/highscore/kconfigrawbackend.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-   This file is part of the KDE games library
-   Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License version 2 as published by the Free Software Foundation.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
-*/
-
-#include "kconfigrawbackend.h"
-#include "kconfigrawbackend.moc"
-
-#include <unistd.h>
-#include <tqfile.h>
-
-
-KConfigRawBackEnd::KConfigRawBackEnd(KConfigBase *_config, int fd)
-    : KConfigINIBackEnd(_config, TQString(), "config", false),
-      _fd(fd), _stream(0)
-{
-    _file.open(IO_ReadOnly, _fd);
-}
-
-KConfigRawBackEnd::~KConfigRawBackEnd()
-{
-    if (_stream) fclose(_stream);
-}
-
-bool KConfigRawBackEnd::parseConfigFiles()
-{
-    _file.reset();
-    parseSingleConfigFile(_file);
-    return true;
-}
-
-void KConfigRawBackEnd::sync(bool bMerge)
-{
-  // write-sync is only necessary if there are dirty entries
-  if ( !pConfig->isDirty() || pConfig->isReadOnly() ) return;
-
-  _file.reset();
-  KEntryMap aTempMap;
-  getEntryMap(aTempMap, false, bMerge ? &_file : 0);
-
-  if ( _stream==0 ) {
-      _stream = fdopen(_fd, "w");
-      if ( _stream==0 ) return;
-  }
-  ftruncate(_fd, 0);
-  writeEntries(_stream, aTempMap);
-  fflush(_stream);
-}
diff --git a/libkdegames/highscore/kconfigrawbackend.h b/libkdegames/highscore/kconfigrawbackend.h
deleted file mode 100644
index 6a1ea4b9..00000000
--- a/libkdegames/highscore/kconfigrawbackend.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-   This file is part of the KDE games library
-   Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License version 2 as published by the Free Software Foundation.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
-*/
-
-#ifndef _KCONFIGRAWBACKEND_H
-#define _KCONFIGRAWBACKEND_H
-
-#include <tqfile.h>
-
-#include <kconfigbackend.h>
-#include <ksimpleconfig.h>
-
-
-class KConfigRawBackEnd : public KConfigINIBackEnd
-{
-public:
-    KConfigRawBackEnd(KConfigBase *_config, int fd);
-    ~KConfigRawBackEnd();
-
-    bool parseConfigFiles();
-
-    void sync(bool bMerge = true);
-
-private:
-    int   _fd;
-    FILE *_stream;
-    TQFile _file;
-
-    class KConfigRawBackEndPrivate;
-    KConfigRawBackEndPrivate *d;
-};
-
-class KRawConfig : public KSimpleConfig
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    KRawConfig(int fd, bool readOnly)
-        : KSimpleConfig(new KConfigRawBackEnd(this, fd), readOnly) {}
-};
-
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore.cpp b/libkdegames/highscore/kexthighscore.cpp
deleted file mode 100644
index d352a266..00000000
--- a/libkdegames/highscore/kexthighscore.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore.h"
-
-#include <tqlayout.h>
-
-#include <kdebug.h>
-
-#include "kexthighscore_internal.h"
-#include "kexthighscore_gui.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-ManagerPrivate *internal = 0;
-
-uint gameType()
-{
-    internal->checkFirst();
-    return internal->gameType();
-}
-
-void setGameType(uint type)
-{
-    internal->setGameType(type);
-}
-
-bool configure(TQWidget *parent)
-{
-    internal->checkFirst();
-    ConfigDialog *cd = new ConfigDialog(parent);
-    cd->exec();
-    bool saved = cd->hasBeenSaved();
-    delete cd;
-    return saved;
-}
-
-void show(TQWidget *parent, int rank)
-{
-    HighscoresDialog *hd = new HighscoresDialog(rank, parent);
-    hd->exec();
-    delete hd;
-}
-
-void submitScore(const Score &score, TQWidget *widget)
-{
-    int rank = internal->submitScore(score, widget,
-                                     internal->showMode!=Manager::NeverShow);
-
-    switch (internal->showMode) {
-    case Manager::AlwaysShow:
-        show(widget, -1);
-        break;
-    case Manager::ShowForHigherScore:
-        if ( rank!=-1) show(widget, rank);
-        break;
-    case Manager::ShowForHighestScore:
-        if ( rank==0 ) show(widget, rank);
-        break;
-    case Manager::NeverShow:
-        break;
-    }
-}
-
-void show(TQWidget *widget)
-{
-    internal->checkFirst();
-    show(widget, -1);
-}
-
-Score lastScore()
-{
-    internal->checkFirst();
-    internal->hsConfig().readCurrentConfig();
-    uint nb = internal->scoreInfos().maxNbEntries();
-    return internal->readScore(nb-1);
-}
-
-Score firstScore()
-{
-    internal->checkFirst();
-    internal->hsConfig().readCurrentConfig();
-    return internal->readScore(0);
-}
-
-
-//-----------------------------------------------------------------------------
-Manager::Manager(uint nbGameTypes, uint maxNbEntries)
-{
-    Q_ASSERT(nbGameTypes);
-    Q_ASSERT(maxNbEntries);
-    if (internal)
-        kdFatal(11002) << "A highscore object already exists" << endl;
-    internal = new ManagerPrivate(nbGameTypes, *this);
-    internal->init(maxNbEntries);
-}
-
-Manager::~Manager()
-{
-    delete internal;
-    internal = 0;
-}
-
-void Manager::setTrackLostGames(bool track)
-{
-    internal->trackLostGames = track;
-}
-
-void Manager::setTrackDrawGames(bool track)
-{
-    internal->trackDrawGames = track;
-}
-
-void Manager::setShowStatistics(bool show)
-{
-    internal->showStatistics = show;
-}
-
-void Manager::showStatistics(bool show)
-{
-    internal->showStatistics = show;
-}
-
-void Manager::setShowDrawGamesStatistic(bool show)
-{
-    internal->showDrawGames = show;
-}
-
-void Manager::setWWHighscores(const KURL &url, const TQString &version)
-{
-    Q_ASSERT( url.isValid() );
-    internal->serverURL = url;
-    const char *HS_WW_URL = "ww hs url";
-    ConfigGroup cg;
-    if ( cg.config()->hasKey(HS_WW_URL) )
-        internal->serverURL = cg.config()->readEntry(HS_WW_URL);
-    else cg.config()->writeEntry(HS_WW_URL, url.url());
-    internal->version = version;
-}
-
-void Manager::setScoreHistogram(const TQMemArray<uint> &scores,
-                                ScoreTypeBound type)
-{
-    Q_ASSERT( scores.size()>=2 );
-    for (uint i=0; i<scores.size()-1; i++)
-        Q_ASSERT( scores[i]<scores[i+1] );
-    internal->playerInfos().createHistoItems(scores, type==ScoreBound);
-}
-
-void Manager::setShowMode(ShowMode mode)
-{
-    internal->showMode = mode;
-}
-
-void Manager::setScoreType(ScoreType type)
-{
-    switch (type) {
-    case Normal:
-        return;
-    case MinuteTime: {
-        Item *item = createItem(ScoreDefault);
-        item->setPrettyFormat(Item::MinuteTime);
-        setScoreItem(0, item);
-
-        item = createItem(MeanScoreDefault);
-        item->setPrettyFormat(Item::MinuteTime);
-        setPlayerItem(MeanScore, item);
-
-        item = createItem(BestScoreDefault);
-        item->setPrettyFormat(Item::MinuteTime);
-        setPlayerItem(BestScore, item);
-        return;
-    }
-    }
-}
-
-void Manager::submitLegacyScore(const Score &score) const
-{
-    internal->submitLocal(score);
-}
-
-bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const
-{
-    return s1.score()<s2.score();
-}
-
-Item *Manager::createItem(ItemType type)
-{
-    Item *item = 0;
-    switch (type) {
-    case ScoreDefault:
-        item = new Item((uint)0, i18n("Score"), TQt::AlignRight);
-        break;
-    case MeanScoreDefault:
-        item = new Item((double)0, i18n("Mean Score"), TQt::AlignRight);
-        item->setPrettyFormat(Item::OneDecimal);
-        item->setPrettySpecial(Item::DefaultNotDefined);
-        break;
-    case BestScoreDefault:
-        item = new Item((uint)0, i18n("Best Score"), TQt::AlignRight);
-        item->setPrettySpecial(Item::DefaultNotDefined);
-        break;
-    case ElapsedTime:
-        item = new Item((uint)0, i18n("Elapsed Time"), TQt::AlignRight);
-        item->setPrettyFormat(Item::MinuteTime);
-        item->setPrettySpecial(Item::ZeroNotDefined);
-        break;
-    }
-    return item;
-}
-
-void Manager::setScoreItem(uint worstScore, Item *item)
-{
-    item->setDefaultValue(worstScore);
-    internal->scoreInfos().setItem("score", item);
-    internal->playerInfos().item("mean score")
-        ->item()->setDefaultValue(double(worstScore));
-    internal->playerInfos().item("best score")
-        ->item()->setDefaultValue(worstScore);
-}
-
-void Manager::addScoreItem(const TQString &name, Item *item)
-{
-    internal->scoreInfos().addItem(name, item, true);
-}
-
-void Manager::setPlayerItem(PlayerItemType type, Item *item)
-{
-    const Item *scoreItem = internal->scoreInfos().item("score")->item();
-    uint def = scoreItem->defaultValue().toUInt();
-    TQString name;
-    switch (type) {
-    case MeanScore:
-        name = "mean score";
-        item->setDefaultValue(double(def));
-        break;
-    case BestScore:
-        name = "best score";
-        item->setDefaultValue(def);
-        break;
-    }
-    internal->playerInfos().setItem(name, item);
-}
-
-TQString Manager::gameTypeLabel(uint gameType, LabelType type) const
-{
-    if ( gameType!=0 )
-        kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for "
-                       << "multiple game types" << endl;
-    switch (type) {
-    case Icon:
-    case Standard:
-    case I18N:     break;
-    case WW:       return "normal";
-    }
-    return TQString();
-}
-
-void Manager::addToQueryURL(KURL &url, const TQString &item,
-                               const TQString &content)
-{
-    Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() );
-
-    TQString query = url.query();
-    if ( !query.isEmpty() ) query += '&';
-	query += item + '=' + KURL::encode_string(content);
-	url.setQuery(query);
-}
-
-} // namescape
diff --git a/libkdegames/highscore/kexthighscore.h b/libkdegames/highscore/kexthighscore.h
deleted file mode 100644
index 5809a896..00000000
--- a/libkdegames/highscore/kexthighscore.h
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_H
-#define KEXTHIGHSCORE_H
-
-#include "kexthighscore_item.h"
-
-#include <kurl.h>
-#include <kdemacros.h>
-
-class TQTabWidget;
-
-
-namespace KExtHighscore
-{
-
-class Score;
-class Item;
-
-class ManagerPrivate;
-extern ManagerPrivate *internal;
-
-/**
- * Get the current game type.
- */
-KDE_EXPORT uint gameType();
-
-/**
- * Set the current game type.
- */
-KDE_EXPORT void setGameType(uint gameType);
-
-/**
- * Configure the highscores.
- * @return true if the configuration has been modified and saved
- */
-KDE_EXPORT bool configure(TQWidget *parent);
-
-/**
- * Show the highscores lists.
- */
-KDE_EXPORT void show(TQWidget *parent);
-
-/**
- * Submit a score. See @ref Manager for usage example.
- *
- * @param widget a widget used as parent for error message box.
- */
-KDE_EXPORT void submitScore(const Score &score, TQWidget *widget);
-
-/**
- * @return the last score in the local list of highscores. The worst possible
- * score if there are less items than the maximum number.
- */
-KDE_EXPORT Score lastScore();
-
-/**
- * @return the first score in the local list of highscores (the worst possible
- * score if there is no entry).
- */
-KDE_EXPORT Score firstScore();
-
-/**
- * This class manages highscores and players entries (several players can
- * share the same highscores list if the libkdegame library is built to
- * support a common highscores file; NOTE that to correctly implement such
- * feature we probably need a locking mechanism in @ref KHighscore).
- *
- * You need one instance of this class during the application lifetime ; in
- * main() just insert 
- * \code
- *   KExtHighscore::Manager highscoresManager;
- * \endcode
- * with the needed arguments. Use the derived class if you need to
- * reimplement some of the default methods.
- *
- * This class has three functions :
- * <ul>
- * <li> Update the highscores list when new entries are submitted </li>
- * <li> Display the highscores list and the players list </li>
- * <li> Send query to an optionnal web server to support world-wide
- *      highscores </li>
- * </ul>
- *
- * The highscores and the players lists contain several items described by
- * the @ref Item class.
- *
- * The highscores list contains by default :
- * <ul>
- * <li> the player name (automatically set from the config value)</li>
- * <li> the score value </li>
- * <li> the time and date of the highscore (automatically set) </li>
- * </ul>
- * You can replace the score item (for e.g. displaying it differently) with
- * setScoreItem or add an item with addScoreItem.
- *
- * The players list contains :
- * <ul>
- * <li> the player name (as defined by the user in the configuration
- *      dialog) </li>
- * <li> the number of games played </li>
- * <li> the mean score </li>
- * <li> the best score </li>
- * <li> the best score time and date </li>
- * <li> the player comment (as defined by the user in the
- *      configuration dialog) </li>
- * </ul>
- * You can replace the best score and the mean score items
- * by calling setPlayerItem.
- *
- * To submit a new score at game end, just construct a Score, set the
- * score data and then call submitScore().
- * \code
- *     KExtHighscore::Score score(KExtHighscore::Won);
- *     score.setScore(myScore);
- *     KExtHighscore::submitScore(score, widget);
- * \endcode
- * You only need to set the score value with Score::setScore()
- * and the value of the items that you have optionnally added
- * with Score::setData() ; player name and date are set automatically.
- */
-class KDE_EXPORT Manager
-{
- public:
-    /**
-     * Constructor
-     *
-     * @param nbGameTypes the number of different game types (usually one).
-     *        For example KMines has easy, normal and expert levels.
-     * @param maxNbEntries the maximum numbers of highscores entries (by game
-     *        types)
-     */
-    Manager(uint nbGameTypes = 1, uint maxNbEntries = 10);
-    virtual ~Manager();
-    
-    /**
-     * Set the world-wide highscores.
-     * By default there is no world-wide highscores.
-     *
-     * Note: should be called at construction time.
-     *
-     * @param url the web server url
-     * @param version the game version which is sent to the web server (it can
-     * be useful for backward compatibility on the server side).
-     */
-    void setWWHighscores(const KURL &url, const TQString &version);
-
-    /**
-     * Set if the number of lost games should be track for the world-wide
-     * highscores statistics. By default, there is no tracking.
-     * False by default.
-     *
-     * Note: should be called at construction time.
-     */
-    void setTrackLostGames(bool track);
-    
-    /**
-     * @since 3.3
-     * Set if the number of "draw" games should be track for the world-wide
-     * highscores statistics. By default, there is no tracking.
-     * False by default.
-     *
-     * Note: should be called at construction time.
-     */
-    void setTrackDrawGames(bool track);
-
-    /**
-     * @since 3.3
-     * Set if the statistics tab should be shown in the highscores dialog.
-     * You only want to show this tab if it makes sense to lose or to win the
-     * game (for e.g. it makes no sense for a tetris game but it does for a
-     * minesweeper game).
-     * False by default.
-     *
-     * Note: should be called at construction time.
-     */
-    void setShowStatistics(bool show);
-    
-    /** @obsolete */
-    // KDE4 remove this
-    void showStatistics(bool show) KDE_DEPRECATED;
-    
-    /**
-     * @since 3.3
-     * Set if draw games statistics should be shown (enable this if
-     * draws are possible in your game).
-     * False by default.
-     */
-    void setShowDrawGamesStatistic(bool show);
-
-    enum ScoreTypeBound { ScoreNotBound, ScoreBound };
-    /**
-     * Set the ranges for the score histogram.
-     *
-     * Note: should be called at construction time.
-     */
-    void setScoreHistogram(const TQMemArray<uint> &scores, ScoreTypeBound type);
-
-    /** 
-    * Enumerate different conditions under which to show the
-    * high score dialog.
-    */
-    enum ShowMode { AlwaysShow,          ///< Always show the dialog
-                    NeverShow,           ///< Never show the dialog
-                    ShowForHigherScore,  ///< Show if score has improved
-                    ShowForHighestScore  ///< Only for the top spot
-                  };
-    /**
-     * Set how the highscores dialog is shown at game end.
-     * By default, the mode is ShowForHigherScore.
-     *
-     * Note: should be called at construction time.
-     */
-    void setShowMode(ShowMode mode);
-
-    /**
-     * Score type (@see setScoreType).
-     * @p Normal default score (unsigned integer without upper bound)
-     * @p MinuteTime score by time bound at 3599 seconds (for e.g. kmines)
-     */
-    enum ScoreType { Normal, MinuteTime };
-    /**
-     * Set score type. Helper method to quickly set the type of score.
-     * By default the type is Normal.
-     *
-     * Note: should be called at construction time.
-     */
-    void setScoreType(ScoreType type);
-
-    /**
-     * Some predefined item types.
-     * @p ScoreDefault default item for the score in the highscores list.
-     * @p MeanScoreDefault default item for the mean score (only show one decimal and
-     * 0 is shown as "--".
-     * @p BestScoreDefault default item for the best score (0 is shown as "--").
-     * @p ElapsedTime optionnal item for elapsed time (maximum value is 3599 seconds).
-     */
-    enum ItemType { ScoreDefault, MeanScoreDefault, BestScoreDefault,
-                    ElapsedTime };
-    /**
-     * Create a predefined item.
-     */
-    static Item *createItem(ItemType type);
-
-    /**
-     * Replace the default score item in the highscores list by the given one.
-     * @p worstScore is the worst possible score. By default it is 0.
-     *
-     * Note : This method should be called at construction time.
-     */
-    void setScoreItem(uint worstScore, Item *item);
-
-    /**
-     * Add an item in the highscores list (it will add a column to this list).
-     *
-     * Note : This method should be called at construction time.
-     */
-    void addScoreItem(const TQString &name, Item *item);
-
-    enum PlayerItemType { MeanScore, BestScore };
-    /**
-     * Replace an item in the players list.
-     *
-     * Note : This method should be called at construction time.
-     */
-    void setPlayerItem(PlayerItemType type, Item *item);
-
-    /**
-     * @return true if the first score is strictly worse than the second one.
-     * By default return <pre>s1.score()<s2.score()</pre>. You can reimplement
-     * this method if additional items added to @ref Score can further
-     * differentiate the scores (for e.g. the time spent).
-     *
-     * Note that you do not need to use directly this method, simply write
-     * <pre>s1<s2</pre> since the operator calls this method.
-     */
-    virtual bool isStrictlyLess(const Score &s1, const Score &s2) const;
-
-    /**
-     * Possible type of label (@see gameTypeLabel).
-     * @p Standard label used in config file.
-     * @p I18N label used to display the game type.
-     * @p WW label used when contacting the world-wide highscores server.
-     * @p Icon label used to load the icon corresponding to the game type.
-     */
-    enum LabelType { Standard, I18N, WW, Icon };
-
-    /**
-     * @return the label corresponding to the game type. The default
-     * implementation works only for one game type : you need to reimplement
-     * this method if the number of game types is more than one.
-     */
-    virtual TQString gameTypeLabel(uint gameType, LabelType type) const;
-
- protected:
-    /**
-     * This method is called once for each player (ie for each user). You
-     * can reimplement it to convert old style highscores to the new mechanism
-     * (@see submitLegacyScore). By default this method does nothing.
-     *
-     * @param gameType the game type
-     */
-    virtual void convertLegacy(uint gameType) { Q_UNUSED(gameType); }
-
-    /**
-     * This method should be called from @ref convertLegacy. It is used
-     * to submit an old highscore (it will not be send over the network).
-     * For each score do something like:
-     * \code
-     * Score score(Won);
-     * score.setScore(oldScore);
-     * score.setData("name", name);
-     * submitLegacyScore(score);
-     * \endcode
-     * Note that here you can set the player "name" and the highscore "date"
-     * if they are known.
-     */
-    void submitLegacyScore(const Score &score) const;
-
-    /**
-     * This method is called before submitting a score to the world-wide
-     * highscores server. You can reimplement this method to add an entry
-     * with @ref addToQueryURL. By default this method does nothing.
-     *
-     * @param url the URL to query
-     * @param score the score to be submitted.
-     */
-    virtual void additionalQueryItems(KURL &url, const Score &score) const
-        { Q_UNUSED(url); Q_UNUSED(score); }
-
-    /**
-     * Add an entry to the url to be submitted (@see additionalQueryItems).
-     *
-     * @param url the URL to query
-     * @param item the item name
-     * @param content the item content
-     */
-    static void addToQueryURL(KURL &url, const TQString &item,
-                              const TQString &content);
-
-    friend class ManagerPrivate;
-
- private:
-    Manager(const Manager &);
-    Manager &operator =(const Manager &);
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_gui.cpp b/libkdegames/highscore/kexthighscore_gui.cpp
deleted file mode 100644
index 02ea99b6..00000000
--- a/libkdegames/highscore/kexthighscore_gui.cpp
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_gui.h"
-#include "kexthighscore_gui.moc"
-
-#include <tqlayout.h>
-#include <tqtextstream.h>
-#include <tqheader.h>
-#include <tqgrid.h>
-#include <tqvgroupbox.h>
-
-#include <kapplication.h>
-#include <kmessagebox.h>
-#include <kurllabel.h>
-#include <kopenwith.h>
-#include <krun.h>
-#include <kfiledialog.h>
-#include <ktempfile.h>
-#include <kio/netaccess.h>
-#include <kiconloader.h>
-
-#include "kexthighscore_internal.h"
-#include "kexthighscore.h"
-#include "kexthighscore_tab.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-ShowItem::ShowItem(TQListView *list, bool highlight)
-    : KListViewItem(list), _highlight(highlight)
-{}
-
-void ShowItem::paintCell(TQPainter *p, const TQColorGroup &cg,
-                         int column, int width, int align)
-{
-    TQColorGroup cgrp(cg);
-    if (_highlight) cgrp.setColor(TQColorGroup::Text, red);
-    KListViewItem::paintCell(p, cgrp, column, width, align);
-}
-
-//-----------------------------------------------------------------------------
-ScoresList::ScoresList(TQWidget *parent)
-    : KListView(parent)
-{
-    setSelectionMode(TQListView::NoSelection);
-    setItemMargin(3);
-    setAllColumnsShowFocus(true);
-    setSorting(-1);
-    header()->setClickEnabled(false);
-    header()->setMovingEnabled(false);
-}
-
-void ScoresList::addHeader(const ItemArray &items)
-{
-    addLineItem(items, 0, 0);
-}
-
-TQListViewItem *ScoresList::addLine(const ItemArray &items,
-                                   uint index, bool highlight)
-{
-    TQListViewItem *item = new ShowItem(this, highlight);
-    addLineItem(items, index, item);
-    return item;
-}
-
-void ScoresList::addLineItem(const ItemArray &items,
-                             uint index, TQListViewItem *line)
-{
-    uint k = 0;
-    for (uint i=0; i<items.size(); i++) {
-        const ItemContainer &container = *items[i];
-        if ( !container.item()->isVisible() ) continue;
-        if (line) line->setText(k, itemText(container, index));
-        else {
-            addColumn( container.item()->label() );
-            setColumnAlignment(k, container.item()->tqalignment());
-        }
-        k++;
-    }
-}
-
-//-----------------------------------------------------------------------------
-HighscoresList::HighscoresList(TQWidget *parent)
-    : ScoresList(parent)
-{}
-
-TQString HighscoresList::itemText(const ItemContainer &item, uint row) const
-{
-    return item.pretty(row);
-}
-
-void HighscoresList::load(const ItemArray &items, int highlight)
-{
-    clear();
-    TQListViewItem *line = 0;
-    for (int j=items.nbEntries()-1; j>=0; j--) {
-        TQListViewItem *item = addLine(items, j, j==highlight);
-        if ( j==highlight ) line = item;
-    }
-    if (line) ensureItemVisible(line);
-}
-
-//-----------------------------------------------------------------------------
-HighscoresWidget::HighscoresWidget(TQWidget *parent)
-    : TQWidget(parent, "show_highscores_widget"),
-      _scoresUrl(0), _playersUrl(0), _statsTab(0), _histoTab(0)
-{
-    const ScoreInfos &s = internal->scoreInfos();
-    const PlayerInfos &p = internal->playerInfos();
-
-    TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialogBase::spacingHint());
-
-    _tw = new TQTabWidget(this);
-    connect(_tw, TQT_SIGNAL(currentChanged(TQWidget *)), TQT_SLOT(tabChanged()));
-    vbox->addWidget(_tw);
-
-    // scores tab
-    _scoresList = new HighscoresList(_tw);
-    _scoresList->addHeader(s);
-    _tw->addTab(_scoresList, i18n("Best &Scores"));
-
-    // players tab
-    _playersList = new HighscoresList(_tw);
-    _playersList->addHeader(p);
-    _tw->addTab(_playersList, i18n("&Players"));
-
-    // statistics tab
-    if ( internal->showStatistics ) {
-        _statsTab = new StatisticsTab(_tw);
-        _tw->addTab(_statsTab, i18n("Statistics"));
-    }
-
-    // histogram tab
-    if ( p.histogram().size()!=0 ) {
-        _histoTab = new HistogramTab(_tw);
-        _tw->addTab(_histoTab, i18n("Histogram"));
-    }
-
-    // url labels
-    if ( internal->isWWHSAvailable() ) {
-        KURL url = internal->queryURL(ManagerPrivate::Scores);
-        _scoresUrl = new KURLLabel(url.url(),
-                                   i18n("View world-wide highscores"), this);
-        connect(_scoresUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
-                TQT_SLOT(showURL(const TQString &)));
-        vbox->addWidget(_scoresUrl);
-
-        url = internal->queryURL(ManagerPrivate::Players);
-        _playersUrl = new KURLLabel(url.url(),
-                                    i18n("View world-wide players"), this);
-        connect(_playersUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
-                TQT_SLOT(showURL(const TQString &)));
-        vbox->addWidget(_playersUrl);
-    }
-}
-
-void HighscoresWidget::changeTab(int i)
-{
-    if ( i!=_tw->currentPageIndex() )
-        _tw->setCurrentPage(i);
-}
-
-void HighscoresWidget::showURL(const TQString &url) const
-{
-    (void)new KRun(KURL(url));
-}
-
-void HighscoresWidget::load(int rank)
-{
-    _scoresList->load(internal->scoreInfos(), rank);
-    _playersList->load(internal->playerInfos(), internal->playerInfos().id());
-    if (_scoresUrl)
-        _scoresUrl->setURL(internal->queryURL(ManagerPrivate::Scores).url());
-    if (_playersUrl)
-        _playersUrl->setURL(internal->queryURL(ManagerPrivate::Players).url());
-    if (_statsTab) _statsTab->load();
-    if (_histoTab) _histoTab->load();
-}
-
-//-----------------------------------------------------------------------------
-HighscoresDialog::HighscoresDialog(int rank, TQWidget *parent)
-    : KDialogBase(internal->nbGameTypes()>1 ? TreeList : Plain,
-                  i18n("Highscores"), Close|User1|User2, Close,
-                  parent, "show_highscores", true, true,
-                  KGuiItem(i18n("Configure..."), "configure"),
-                  KGuiItem(i18n("Export..."))), _rank(rank), _tab(0)
-{
-    _widgets.resize(internal->nbGameTypes(), 0);
-
-    if ( internal->nbGameTypes()>1 ) {
-        for (uint i=0; i<internal->nbGameTypes(); i++) {
-            TQString title = internal->manager.gameTypeLabel(i, Manager::I18N);
-            TQString icon = internal->manager.gameTypeLabel(i, Manager::Icon);
-            TQWidget *w = addVBoxPage(title, TQString(),
-                                     BarIcon(icon, KIcon::SizeLarge));
-            if ( i==internal->gameType() ) createPage(w);
-        }
-
-        connect(this, TQT_SIGNAL(aboutToShowPage(TQWidget *)),
-                TQT_SLOT(createPage(TQWidget *)));
-        showPage(internal->gameType());
-    } else {
-        TQVBoxLayout *vbox = new TQVBoxLayout(plainPage());
-        createPage(plainPage());
-        vbox->addWidget(_widgets[0]);
-        setMainWidget(_widgets[0]);
-    }
-}
-
-void HighscoresDialog::createPage(TQWidget *page)
-{
-    internal->hsConfig().readCurrentConfig();
-    _current = page;
-    bool several = ( internal->nbGameTypes()>1 );
-    int i = (several ? pageIndex(page) : 0);
-    if ( _widgets[i]==0 ) {
-        _widgets[i] = new HighscoresWidget(page);
-        connect(_widgets[i], TQT_SIGNAL(tabChanged(int)), TQT_SLOT(tabChanged(int)));
-    }
-    uint type = internal->gameType();
-    if (several) internal->setGameType(i);
-    _widgets[i]->load(uint(i)==type ? _rank : -1);
-    if (several) setGameType(type);
-    _widgets[i]->changeTab(_tab);
-}
-
-void HighscoresDialog::slotUser1()
-{
-    if ( KExtHighscore::configure(this) )
-        createPage(_current);
-}
-
-void HighscoresDialog::slotUser2()
-{
-    KURL url = KFileDialog::getSaveURL(TQString(), TQString(), this);
-    if ( url.isEmpty() ) return;
-    if ( KIO::NetAccess::exists(url, true, this) ) {
-        KGuiItem gi = KStdGuiItem::save();
-        gi.setText(i18n("Overwrite"));
-        int res = KMessageBox::warningContinueCancel(this,
-                                 i18n("The file already exists. Overwrite?"),
-                                 i18n("Export"), gi);
-        if ( res==KMessageBox::Cancel ) return;
-    }
-    KTempFile tmp;
-    internal->exportHighscores(*tmp.textStream());
-    tmp.close();
-    KIO::NetAccess::upload(tmp.name(), url, this);
-    tmp.unlink();
-}
-
-//-----------------------------------------------------------------------------
-LastMultipleScoresList::LastMultipleScoresList(
-                            const TQValueVector<Score> &scores, TQWidget *parent)
-    : ScoresList(parent), _scores(scores)
-{
-    const ScoreInfos &s = internal->scoreInfos();
-    addHeader(s);
-    for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
-}
-
-void LastMultipleScoresList::addLineItem(const ItemArray &si,
-                                         uint index, TQListViewItem *line)
-{
-    uint k = 1; // skip "id"
-    for (uint i=0; i<si.size()-2; i++) {
-        if ( i==3 ) k = 5; // skip "date"
-        const ItemContainer *container = si[k];
-        k++;
-        if (line) line->setText(i, itemText(*container, index));
-        else {
-            addColumn(  container->item()->label() );
-            setColumnAlignment(i, container->item()->tqalignment());
-        }
-    }
-}
-
-TQString LastMultipleScoresList::itemText(const ItemContainer &item,
-                                         uint row) const
-{
-    TQString name = item.name();
-    if ( name=="rank" )
-        return (_scores[row].type()==Won ? i18n("Winner") : TQString());
-    TQVariant v = _scores[row].data(name);
-    if ( name=="name" ) return v.toString();
-    return item.item()->pretty(row, v);
-}
-
-//-----------------------------------------------------------------------------
-TotalMultipleScoresList::TotalMultipleScoresList(
-                            const TQValueVector<Score> &scores, TQWidget *parent)
-    : ScoresList(parent), _scores(scores)
-{
-    const ScoreInfos &s = internal->scoreInfos();
-    addHeader(s);
-    for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
-}
-
-void TotalMultipleScoresList::addLineItem(const ItemArray &si,
-                                          uint index, TQListViewItem *line)
-{
-    const PlayerInfos &pi = internal->playerInfos();
-    uint k = 1; // skip "id"
-    for (uint i=0; i<4; i++) { // skip additional fields
-        const ItemContainer *container;
-        if ( i==2 ) container = pi.item("nb games");
-        else if ( i==3 ) container = pi.item("mean score");
-        else {
-            container = si[k];
-            k++;
-        }
-        if (line) line->setText(i, itemText(*container, index));
-        else {
-            TQString label =
-                (i==2 ? i18n("Won Games") : container->item()->label());
-            addColumn(label);
-            setColumnAlignment(i, container->item()->tqalignment());
-        }
-    }
-}
-
-TQString TotalMultipleScoresList::itemText(const ItemContainer &item,
-                                          uint row) const
-{
-    TQString name = item.name();
-    if ( name=="rank" ) return TQString::number(_scores.size()-row);
-    if ( name=="nb games" )
-        return TQString::number( _scores[row].data("nb won games").toUInt() );
-    TQVariant v = _scores[row].data(name);
-    if ( name=="name" ) return v.toString();
-    return item.item()->pretty(row, v);
-}
-
-
-//-----------------------------------------------------------------------------
-ConfigDialog::ConfigDialog(TQWidget *parent)
-    : KDialogBase(Swallow, i18n("Configure Highscores"),
-                  Ok|Apply|Cancel, Cancel,
-                  parent, "configure_highscores", true, true),
-      _saved(false), _WWHEnabled(0)
-{
-    TQWidget *page = 0;
-    TQTabWidget *tab = 0;
-    if ( internal->isWWHSAvailable() ) {
-        tab = new TQTabWidget(this);
-        setMainWidget(tab);
-        page = new TQWidget(tab);
-        tab->addTab(page, i18n("Main"));
-    } else {
-        page = new TQWidget(this);
-        setMainWidget(page);
-    }
-
-    TQGridLayout *pageTop =
-        new TQGridLayout(page, 2, 2, spacingHint(), spacingHint());
-
-    TQLabel *label = new TQLabel(i18n("Nickname:"), page);
-    pageTop->addWidget(label, 0, 0);
-    _nickname = new TQLineEdit(page);
-    connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
-            TQT_SLOT(modifiedSlot()));
-    connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
-            TQT_SLOT(nickNameChanged(const TQString &)));
-
-    _nickname->setMaxLength(16);
-    pageTop->addWidget(_nickname, 0, 1);
-
-    label = new TQLabel(i18n("Comment:"), page);
-    pageTop->addWidget(label, 1, 0);
-    _comment = new TQLineEdit(page);
-    connect(_comment, TQT_SIGNAL(textChanged(const TQString &)),
-            TQT_SLOT(modifiedSlot()));
-    _comment->setMaxLength(50);
-    pageTop->addWidget(_comment, 1, 1);
-
-    if (tab) {
-        _WWHEnabled
-            = new TQCheckBox(i18n("World-wide highscores enabled"), page);
-        connect(_WWHEnabled, TQT_SIGNAL(toggled(bool)),
-                TQT_SLOT(modifiedSlot()));
-        pageTop->addMultiCellWidget(_WWHEnabled, 2, 2, 0, 1);
-
-        // advanced tab
-        TQWidget *page = new TQWidget(tab);
-        tab->addTab(page, i18n("Advanced"));
-        TQVBoxLayout *pageTop =
-            new TQVBoxLayout(page, spacingHint(), spacingHint());
-
-        TQVGroupBox *group = new TQVGroupBox(i18n("Registration Data"), page);
-        pageTop->addWidget(group);
-        TQGrid *grid = new TQGrid(2, group);
-        grid->setSpacing(spacingHint());
-
-        label = new TQLabel(i18n("Nickname:"), grid);
-        _registeredName = new KLineEdit(grid);
-        _registeredName->setReadOnly(true);
-
-        label = new TQLabel(i18n("Key:"), grid);
-        _key = new KLineEdit(grid);
-        _key->setReadOnly(true);
-
-        KGuiItem gi = KStdGuiItem::clear();
-        gi.setText(i18n("Remove"));
-        _removeButton = new KPushButton(gi, grid);
-        connect(_removeButton, TQT_SIGNAL(clicked()), TQT_SLOT(removeSlot()));
-    }
-
-    load();
-    enableButtonOK( !_nickname->text().isEmpty() );
-    enableButtonApply(false);
-}
-
-void ConfigDialog::nickNameChanged(const TQString &text)
-{
-    enableButtonOK( !text.isEmpty() );
-}
-
-
-void ConfigDialog::modifiedSlot()
-{
-    enableButtonApply(true && !_nickname->text().isEmpty() );
-}
-
-void ConfigDialog::accept()
-{
-    if ( save() ) {
-        KDialogBase::accept();
-        kapp->config()->sync(); // safer
-    }
-}
-
-void ConfigDialog::removeSlot()
-{
-    KGuiItem gi = KStdGuiItem::clear();
-    gi.setText(i18n("Remove"));
-    int res = KMessageBox::warningContinueCancel(this,
-                               i18n("This will permanently remove your "
-                               "registration key. You will not be able to use "
-                               "the currently registered nickname anymore."),
-                               TQString(), gi);
-    if ( res==KMessageBox::Continue ) {
-        internal->playerInfos().removeKey();
-        _registeredName->clear();
-        _key->clear();
-        _removeButton->setEnabled(false);
-        _WWHEnabled->setChecked(false);
-        modifiedSlot();
-    }
-}
-
-void ConfigDialog::load()
-{
-    internal->hsConfig().readCurrentConfig();
-    const PlayerInfos &infos = internal->playerInfos();
-    _nickname->setText(infos.isAnonymous() ? TQString() : infos.name());
-    _comment->setText(infos.comment());
-    if (_WWHEnabled) {
-        _WWHEnabled->setChecked(infos.isWWEnabled());
-        if ( !infos.key().isEmpty() ) {
-            _registeredName->setText(infos.registeredName());
-            _registeredName->home(false);
-            _key->setText(infos.key());
-            _key->home(false);
-        }
-        _removeButton->setEnabled(!infos.key().isEmpty());
-    }
-}
-
-bool ConfigDialog::save()
-{
-    bool enabled = (_WWHEnabled ? _WWHEnabled->isChecked() : false);
-
-    // do not bother the user with "nickname empty" if he has not
-    // messed with nickname settings ...
-    TQString newName = _nickname->text();
-    if ( newName.isEmpty() && !internal->playerInfos().isAnonymous()
-         && !enabled ) return true;
-
-    if ( newName.isEmpty() ) {
-        KMessageBox::sorry(this, i18n("Please choose a non empty nickname."));
-        return false;
-    }
-    if ( internal->playerInfos().isNameUsed(newName) ) {
-        KMessageBox::sorry(this, i18n("Nickname already in use. Please "
-                                      "choose another one"));
-        return false;
-    }
-
-    int res =
-        internal->modifySettings(newName, _comment->text(), enabled, this);
-    if (res) {
-        load(); // needed to update view when "apply" is clicked
-        enableButtonApply(false);
-    }
-    _saved = true;
-    return res;
-}
-
-//-----------------------------------------------------------------------------
-AskNameDialog::AskNameDialog(TQWidget *parent)
-    : KDialogBase(Plain, i18n("Enter Your Nickname"), Ok | Cancel, Ok,
-                  parent, "ask_name_dialog")
-{
-    internal->hsConfig().readCurrentConfig();
-
-    TQVBoxLayout *top =
-        new TQVBoxLayout(plainPage(), marginHint(), spacingHint());
-    TQLabel *label =
-        new TQLabel(i18n("Congratulations, you have won!"), plainPage());
-    top->addWidget(label);
-
-    TQHBoxLayout *hbox = new TQHBoxLayout(top);
-    label = new TQLabel(i18n("Enter your nickname:"), plainPage());
-    hbox->addWidget(label);
-    _edit = new TQLineEdit(plainPage());
-    _edit->setFocus();
-    connect(_edit, TQT_SIGNAL(textChanged(const TQString &)), TQT_SLOT(nameChanged()));
-    hbox->addWidget(_edit);
-
-    top->addSpacing(spacingHint());
-    _checkbox = new TQCheckBox(i18n("Do not ask again."),  plainPage());
-    top->addWidget(_checkbox);
-
-    nameChanged();
-}
-
-void AskNameDialog::nameChanged()
-{
-    enableButtonOK( !name().isEmpty()
-                    && !internal->playerInfos().isNameUsed(name()) );
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_gui.h b/libkdegames/highscore/kexthighscore_gui.h
deleted file mode 100644
index f6b2336a..00000000
--- a/libkdegames/highscore/kexthighscore_gui.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_GUI_H
-#define KEXTHIGHSCORE_GUI_H
-
-#include <tqcheckbox.h>
-#include <tqlabel.h>
-#include <tqvbox.h>
-#include <tqtabwidget.h>
-
-#include <klistview.h>
-#include <klineedit.h>
-#include <kpushbutton.h>
-#include <kdialogbase.h>
-
-#include "kexthighscore.h"
-
-
-namespace KExtHighscore
-{
-
-class ItemContainer;
-class ItemArray;
-class Score;
-class AdditionalTab;
-
-//-----------------------------------------------------------------------------
-class ShowItem : public KListViewItem
-{
- public:
-    ShowItem(TQListView *, bool highlight);
-
- protected:
-    virtual void paintCell(TQPainter *, const TQColorGroup &, int column,
-						   int width, int align);
-
- private:
-    bool _highlight;
-};
-
-class ScoresList : public KListView
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    ScoresList(TQWidget *parent);
-
-    void addHeader(const ItemArray &);
-
- protected:
-    TQListViewItem *addLine(const ItemArray &, uint index, bool highlight);
-    virtual TQString itemText(const ItemContainer &, uint row) const = 0;
-
- private:
-    virtual void addLineItem(const ItemArray &, uint index,
-                             TQListViewItem *item);
-};
-
-//-----------------------------------------------------------------------------
-class HighscoresList : public ScoresList
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    HighscoresList(TQWidget *parent);
-
-    void load(const ItemArray &, int highlight);
-
- protected:
-    TQString itemText(const ItemContainer &, uint row) const;
-};
-
-class HighscoresWidget : public TQWidget
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    HighscoresWidget(TQWidget *parent);
-
-    void load(int rank);
-
- signals:
-    void tabChanged(int i);
-
- public slots:
-    void changeTab(int i);
-
- private slots:
-    void showURL(const TQString &) const;
-    void tabChanged() { emit tabChanged(_tw->currentPageIndex()); }
-
- private:
-    TQTabWidget     *_tw;
-    HighscoresList *_scoresList, *_playersList;
-    KURLLabel      *_scoresUrl, *_playersUrl;
-    AdditionalTab  *_statsTab, *_histoTab;
-};
-
-class HighscoresDialog : public KDialogBase
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    HighscoresDialog(int rank, TQWidget *parent);
-
- private slots:
-    void slotUser1();
-    void slotUser2();
-    void tabChanged(int i) { _tab = i; }
-    void createPage(TQWidget *);
-
- private:
-    int _rank, _tab;
-    TQWidget *_current;
-    TQValueVector<HighscoresWidget *> _widgets;
-};
-
-//-----------------------------------------------------------------------------
-class LastMultipleScoresList : public ScoresList
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    LastMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
-
-private:
-    void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
-    TQString itemText(const ItemContainer &, uint row) const;
-
-private:
-    const TQValueVector<Score> &_scores;
-};
-
-class TotalMultipleScoresList : public ScoresList
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    TotalMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
-
-private:
-    void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
-    TQString itemText(const ItemContainer &, uint row) const;
-
-private:
-    const TQValueVector<Score> &_scores;
-};
-
-//-----------------------------------------------------------------------------
-class ConfigDialog : public KDialogBase
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    ConfigDialog(TQWidget *parent);
-
-    bool hasBeenSaved() const { return _saved; }
-
- private slots:
-    void modifiedSlot();
-    void removeSlot();
-    void accept();
-    void slotApply() { save(); }
-    void nickNameChanged(const TQString &);
-
- private:
-    bool         _saved;
-    TQCheckBox   *_WWHEnabled;
-    TQLineEdit   *_nickname, *_comment;
-    KLineEdit   *_key, *_registeredName;
-    KPushButton *_removeButton;
-
-    void load();
-    bool save();
-};
-
-//-----------------------------------------------------------------------------
-class AskNameDialog : public KDialogBase
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    AskNameDialog(TQWidget *parent);
-
-    TQString name() const { return _edit->text(); }
-    bool dontAskAgain() const { return _checkbox->isChecked(); }
-
- private slots:
-    void nameChanged();
-
- private:
-    TQLineEdit *_edit;
-    TQCheckBox *_checkbox;
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_internal.cpp b/libkdegames/highscore/kexthighscore_internal.cpp
deleted file mode 100644
index a679002c..00000000
--- a/libkdegames/highscore/kexthighscore_internal.cpp
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_internal.h"
-
-#include <pwd.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <tqfile.h>
-#include <tqlayout.h>
-#include <tqdom.h>
-
-#include <kglobal.h>
-#include <kio/netaccess.h>
-#include <kio/job.h>
-#include <kmessagebox.h>
-#include <kmdcodec.h>
-#include <kdebug.h>
-
-#include "config.h"
-#include "kexthighscore.h"
-#include "kexthighscore_gui.h"
-#include "kemailsettings.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-const char ItemContainer::ANONYMOUS[] = "_";
-const char ItemContainer::ANONYMOUS_LABEL[] = I18N_NOOP("anonymous");
-
-ItemContainer::ItemContainer()
-    : _item(0)
-{}
-
-ItemContainer::~ItemContainer()
-{
-    delete _item;
-}
-
-void ItemContainer::setItem(Item *item)
-{
-    delete _item;
-    _item = item;
-}
-
-TQString ItemContainer::entryName() const
-{
-    if ( _subGroup.isEmpty() ) return _name;
-    return _name + "_" + _subGroup;
-}
-
-TQVariant ItemContainer::read(uint i) const
-{
-    Q_ASSERT(_item);
-
-    TQVariant v = _item->defaultValue();
-    if ( isStored() ) {
-        internal->hsConfig().setHighscoreGroup(_group);
-        v = internal->hsConfig().readPropertyEntry(i+1, entryName(), v);
-    }
-    return _item->read(i, v);
-}
-
-TQString ItemContainer::pretty(uint i) const
-{
-    Q_ASSERT(_item);
-    return _item->pretty(i, read(i));
-}
-
-void ItemContainer::write(uint i, const TQVariant &value) const
-{
-    Q_ASSERT( isStored() );
-    Q_ASSERT( internal->hsConfig().isLocked() );
-    internal->hsConfig().setHighscoreGroup(_group);
-    internal->hsConfig().writeEntry(i+1, entryName(), value);
-}
-
-uint ItemContainer::increment(uint i) const
-{
-    uint v = read(i).toUInt() + 1;
-    write(i, v);
-    return v;
-}
-
-//-----------------------------------------------------------------------------
-ItemArray::ItemArray()
-    : _group(""), _subGroup("") // no null groups
-{}
-
-ItemArray::~ItemArray()
-{
-    for (uint i=0; i<size(); i++) delete at(i);
-}
-
-int ItemArray::findIndex(const TQString &name) const
-{
-    for (uint i=0; i<size(); i++)
-        if ( at(i)->name()==name ) return i;
-    return -1;
-}
-
-const ItemContainer *ItemArray::item(const TQString &name) const
-{
-    int i = findIndex(name);
-    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
-                                << "\"" << endl;
-    return at(i);
-}
-
-ItemContainer *ItemArray::item(const TQString &name)
-{
-    int i = findIndex(name);
-    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
-                                << "\"" << endl;
-    return at(i);
-}
-
-void ItemArray::setItem(const TQString &name, Item *item)
-{
-    int i = findIndex(name);
-    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
-                                << "\"" << endl;
-    bool stored = at(i)->isStored();
-    bool canHaveSubGroup = at(i)->canHaveSubGroup();
-    _setItem(i, name, item, stored, canHaveSubGroup);
-}
-
-void ItemArray::addItem(const TQString &name, Item *item,
-                        bool stored, bool canHaveSubGroup)
-{
-    if ( findIndex(name)!=-1 )
-        kdError(11002) << "item already exists \"" << name << "\"" << endl;
-    uint i = size();
-    resize(i+1);
-    at(i) = new ItemContainer;
-    _setItem(i, name, item, stored, canHaveSubGroup);
-}
-
-void ItemArray::_setItem(uint i, const TQString &name, Item *item,
-                         bool stored, bool canHaveSubGroup)
-{
-    at(i)->setItem(item);
-    at(i)->setName(name);
-    at(i)->setGroup(stored ? _group : TQString());
-    at(i)->setSubGroup(canHaveSubGroup ? _subGroup : TQString());
-}
-
-void ItemArray::setGroup(const TQString &group)
-{
-    Q_ASSERT( !group.isNull() );
-    _group = group;
-    for (uint i=0; i<size(); i++)
-        if ( at(i)->isStored() ) at(i)->setGroup(group);
-}
-
-void ItemArray::setSubGroup(const TQString &subGroup)
-{
-    Q_ASSERT( !subGroup.isNull() );
-    _subGroup = subGroup;
-    for (uint i=0; i<size(); i++)
-        if ( at(i)->canHaveSubGroup() ) at(i)->setSubGroup(subGroup);
-}
-
-void ItemArray::read(uint k, Score &data) const
-{
-    for (uint i=0; i<size(); i++) {
-        if ( !at(i)->isStored() ) continue;
-        data.setData(at(i)->name(), at(i)->read(k));
-    }
-}
-
-void ItemArray::write(uint k, const Score &data, uint nb) const
-{
-    for (uint i=0; i<size(); i++) {
-        if ( !at(i)->isStored() ) continue;
-        for (uint j=nb-1; j>k; j--)  at(i)->write(j, at(i)->read(j-1));
-        at(i)->write(k, data.data(at(i)->name()));
-    }
-}
-
-void ItemArray::exportToText(TQTextStream &s) const
-{
-    for (uint k=0; k<nbEntries()+1; k++) {
-        for (uint i=0; i<size(); i++) {
-            const Item *item = at(i)->item();
-            if ( item->isVisible() ) {
-                if ( i!=0 ) s << '\t';
-                if ( k==0 ) s << item->label();
-                else s << at(i)->pretty(k-1);
-            }
-        }
-        s << endl;
-    }
-}
-
-//-----------------------------------------------------------------------------
-class ScoreNameItem : public NameItem
-{
- public:
-    ScoreNameItem(const ScoreInfos &score, const PlayerInfos &infos)
-        : _score(score), _infos(infos) {}
-
-    TQString pretty(uint i, const TQVariant &v) const {
-        uint id = _score.item("id")->read(i).toUInt();
-        if ( id==0 ) return NameItem::pretty(i, v);
-        return _infos.prettyName(id-1);
-    }
-
- private:
-    const ScoreInfos  &_score;
-    const PlayerInfos &_infos;
-};
-
-//-----------------------------------------------------------------------------
-ScoreInfos::ScoreInfos(uint maxNbEntries, const PlayerInfos &infos)
-    : _maxNbEntries(maxNbEntries)
-{
-    addItem("id", new Item((uint)0));
-    addItem("rank", new RankItem, false);
-    addItem("name", new ScoreNameItem(*this, infos));
-    addItem("score", Manager::createItem(Manager::ScoreDefault));
-    addItem("date", new DateItem);
-}
-
-uint ScoreInfos::nbEntries() const
-{
-    uint i = 0;
-    for (; i<_maxNbEntries; i++)
-        if ( item("score")->read(i)==item("score")->item()->defaultValue() )
-            break;
-    return i;
-}
-
-//-----------------------------------------------------------------------------
-const char *HS_ID              = "player id";
-const char *HS_REGISTERED_NAME = "registered name";
-const char *HS_KEY             = "player key";
-const char *HS_WW_ENABLED      = "ww hs enabled";
-
-PlayerInfos::PlayerInfos()
-{
-    setGroup("players");
-
-    // standard items
-    addItem("name", new NameItem);
-    Item *it = new Item((uint)0, i18n("Games Count"),TQt::AlignRight);
-    addItem("nb games", it, true, true);
-    it = Manager::createItem(Manager::MeanScoreDefault);
-    addItem("mean score", it, true, true);
-    it = Manager::createItem(Manager::BestScoreDefault);
-    addItem("best score", it, true, true);
-    addItem("date", new DateItem, true, true);
-    it = new Item(TQString(), i18n("Comment"), TQt::AlignLeft);
-    addItem("comment", it);
-
-    // statistics items
-    addItem("nb black marks", new Item((uint)0), true, true); // legacy
-    addItem("nb lost games", new Item((uint)0), true, true);
-    addItem("nb draw games", new Item((uint)0), true, true);
-    addItem("current trend", new Item((int)0), true, true);
-    addItem("max lost trend", new Item((uint)0), true, true);
-    addItem("max won trend", new Item((uint)0), true, true);
-
-    struct passwd *pwd = getpwuid(getuid());
-    TQString username = pwd->pw_name;
-#ifdef HIGHSCORE_DIRECTORY
-    internal->hsConfig().setHighscoreGroup("players");
-    for (uint i=0; ;i++) {
-        if ( !internal->hsConfig().hasEntry(i+1, "username") ) {
-            _newPlayer = true;
-            _id = i;
-            break;
-        }
-        if ( internal->hsConfig().readEntry(i+1, "username")==username ) {
-            _newPlayer = false;
-            _id = i;
-            return;
-        }
-    }
-#endif
-    internal->hsConfig().lockForWriting();
-	KEMailSettings emailConfig;
-	emailConfig.setProfile(emailConfig.defaultProfileName());
-	TQString name = emailConfig.getSetting(KEMailSettings::RealName);
-	if ( name.isEmpty() || isNameUsed(name) ) name = username;
-	if ( isNameUsed(name) ) name= TQString(ItemContainer::ANONYMOUS);
-#ifdef HIGHSCORE_DIRECTORY
-    internal->hsConfig().writeEntry(_id+1, "username", username);
-    item("name")->write(_id, name);
-#endif
-
-    ConfigGroup cg;
-    _oldLocalPlayer = cg.config()->hasKey(HS_ID);
-    _oldLocalId = cg.config()->readUnsignedNumEntry(HS_ID);
-#ifdef HIGHSCORE_DIRECTORY
-    if (_oldLocalPlayer) { // player already exists in local config file
-        // copy player data
-        TQString prefix = TQString("%1_").tqarg(_oldLocalId+1);
-        TQMap<TQString, TQString> entries =
-            cg.config()->entryMap("KHighscore_players");
-        TQMap<TQString, TQString>::const_iterator it;
-        for (it=entries.begin(); it!=entries.end(); ++it) {
-            TQString key = it.key();
-            if ( key.find(prefix)==0 ) {
-                TQString name = key.right(key.length()-prefix.length());
-                if ( name!="name" || !isNameUsed(it.data()) )
-                    internal->hsConfig().writeEntry(_id+1, name, it.data());
-            }
-        }
-    }
-#else
-    _newPlayer = !_oldLocalPlayer;
-    if (_oldLocalPlayer) _id = _oldLocalId;
-    else {
-        _id = nbEntries();
-        cg.config()->writeEntry(HS_ID, _id);
-        item("name")->write(_id, name);
-    }
-#endif
-    _bound = true;
-    internal->hsConfig().writeAndUnlock();
-}
-
-void PlayerInfos::createHistoItems(const TQMemArray<uint> &scores, bool bound)
-{
-    Q_ASSERT( _histogram.size()==0 );
-    _bound = bound;
-    _histogram = scores;
-    for (uint i=1; i<histoSize(); i++)
-        addItem(histoName(i), new Item((uint)0), true, true);
-}
-
-bool PlayerInfos::isAnonymous() const
-{
-    return ( name()==ItemContainer::ANONYMOUS );
-}
-
-uint PlayerInfos::nbEntries() const
-{
-    internal->hsConfig().setHighscoreGroup("players");
-    TQStringList list = internal->hsConfig().readList("name", -1);
-    return list.count();
-}
-
-TQString PlayerInfos::key() const
-{
-    ConfigGroup cg;
-    return cg.config()->readEntry(HS_KEY, TQString());
-}
-
-bool PlayerInfos::isWWEnabled() const
-{
-    ConfigGroup cg;
-    return cg.config()->readBoolEntry(HS_WW_ENABLED, false);
-}
-
-TQString PlayerInfos::histoName(uint i) const
-{
-    const TQMemArray<uint> &sh = _histogram;
-    Q_ASSERT( i<sh.size() || (_bound || i==sh.size()) );
-    if ( i==sh.size() )
-        return TQString("nb scores greater than %1").tqarg(sh[sh.size()-1]);
-    return TQString("nb scores less than %1").tqarg(sh[i]);
-}
-
-uint PlayerInfos::histoSize() const
-{
-     return _histogram.size() + (_bound ? 0 : 1);
-}
-
-void PlayerInfos::submitScore(const Score &score) const
-{
-    // update counts
-    uint nbGames = item("nb games")->increment(_id);
-    switch (score.type()) {
-    case Lost:
-        item("nb lost games")->increment(_id);
-        break;
-    case Won: break;
-    case Draw:
-        item("nb draw games")->increment(_id);
-        break;
-    };
-
-    // update mean
-    if ( score.type()==Won ) {
-        uint nbWonGames = nbGames - item("nb lost games")->read(_id).toUInt()
-                        - item("nb draw games")->read(_id).toUInt()
-                        - item("nb black marks")->read(_id).toUInt(); // legacy
-        double mean = (nbWonGames==1 ? 0.0
-                       : item("mean score")->read(_id).toDouble());
-        mean += (double(score.score()) - mean) / nbWonGames;
-        item("mean score")->write(_id, mean);
-    }
-
-    // update best score
-    Score best = score; // copy optionnal fields (there are not taken into account here)
-    best.setScore( item("best score")->read(_id).toUInt() );
-    if ( best<score ) {
-        item("best score")->write(_id, score.score());
-        item("date")->write(_id, score.data("date").toDateTime());
-    }
-
-    // update trends
-    int current = item("current trend")->read(_id).toInt();
-    switch (score.type()) {
-    case Won: {
-        if ( current<0 ) current = 0;
-        current++;
-        uint won = item("max won trend")->read(_id).toUInt();
-        if ( (uint)current>won ) item("max won trend")->write(_id, current);
-        break;
-    }
-    case Lost: {
-        if ( current>0 ) current = 0;
-        current--;
-        uint lost = item("max lost trend")->read(_id).toUInt();
-        uint clost = -current;
-        if ( clost>lost ) item("max lost trend")->write(_id, clost);
-        break;
-    }
-    case Draw:
-        current = 0;
-        break;
-    }
-    item("current trend")->write(_id, current);
-
-    // update histogram
-    if ( score.type()==Won ) {
-        const TQMemArray<uint> &sh = _histogram;
-        for (uint i=1; i<histoSize(); i++)
-            if ( i==sh.size() || score.score()<sh[i] ) {
-                item(histoName(i))->increment(_id);
-                break;
-            }
-    }
-}
-
-bool PlayerInfos::isNameUsed(const TQString &newName) const
-{
-    if ( newName==name() ) return false; // own name...
-    for (uint i=0; i<nbEntries(); i++)
-        if ( newName.lower()==item("name")->read(i).toString().lower() ) return true;
-    if ( newName==i18n(ItemContainer::ANONYMOUS_LABEL) ) return true;
-    return false;
-}
-
-void PlayerInfos::modifyName(const TQString &newName) const
-{
-    item("name")->write(_id, newName);
-}
-
-void PlayerInfos::modifySettings(const TQString &newName,
-                                 const TQString &comment, bool WWEnabled,
-                                 const TQString &newKey) const
-{
-    modifyName(newName);
-    item("comment")->write(_id, comment);
-    ConfigGroup cg;
-    cg.config()->writeEntry(HS_WW_ENABLED, WWEnabled);
-    if ( !newKey.isEmpty() ) cg.config()->writeEntry(HS_KEY, newKey);
-    if (WWEnabled) cg.config()->writeEntry(HS_REGISTERED_NAME, newName);
-}
-
-TQString PlayerInfos::registeredName() const
-{
-    ConfigGroup cg;
-    return cg.config()->readEntry(HS_REGISTERED_NAME, TQString());
-}
-
-void PlayerInfos::removeKey()
-{
-    ConfigGroup cg;
-
-    // save old key/nickname
-    uint i = 0;
-    TQString str = "%1 old #%2";
-    TQString sk;
-    do {
-        i++;
-        sk = str.tqarg(HS_KEY).tqarg(i);
-    } while ( !cg.config()->readEntry(sk, TQString()).isEmpty() );
-    cg.config()->writeEntry(sk, key());
-    cg.config()->writeEntry(str.tqarg(HS_REGISTERED_NAME).tqarg(i),
-                            registeredName());
-
-    // clear current key/nickname
-    cg.config()->deleteEntry(HS_KEY);
-    cg.config()->deleteEntry(HS_REGISTERED_NAME);
-    cg.config()->writeEntry(HS_WW_ENABLED, false);
-}
-
-//-----------------------------------------------------------------------------
-ManagerPrivate::ManagerPrivate(uint nbGameTypes, Manager &m)
-    : manager(m), showStatistics(false), showDrawGames(false),
-      trackLostGames(false), trackDrawGames(false), 
-      showMode(Manager::ShowForHigherScore),
-      _first(true), _nbGameTypes(nbGameTypes), _gameType(0)
-{}
-
-void ManagerPrivate::init(uint maxNbEntries)
-{
-    _hsConfig = new KHighscore(false, 0);
-    _playerInfos = new PlayerInfos;
-    _scoreInfos = new ScoreInfos(maxNbEntries, *_playerInfos);
-}
-
-ManagerPrivate::~ManagerPrivate()
-{
-    delete _scoreInfos;
-    delete _playerInfos;
-    delete _hsConfig;
-}
-
-KURL ManagerPrivate::queryURL(QueryType type, const TQString &newName) const
-{
-    KURL url = serverURL;
-    TQString nameItem = "nickname";
-    TQString name = _playerInfos->registeredName();
-    bool withVersion = true;
-    bool key = false;
-    bool level = false;
-
-	switch (type) {
-        case Submit:
-            url.addPath("submit.php");
-            level = true;
-            key = true;
-            break;
-        case Register:
-            url.addPath("register.php");
-            name = newName;
-            break;
-        case Change:
-            url.addPath("change.php");
-            key = true;
-            if ( newName!=name )
-                Manager::addToQueryURL(url, "new_nickname", newName);
-            break;
-        case Players:
-            url.addPath("players.php");
-            nameItem = "highlight";
-            withVersion = false;
-            break;
-        case Scores:
-            url.addPath("highscores.php");
-            withVersion = false;
-            if ( _nbGameTypes>1 ) level = true;
-            break;
-	}
-
-    if (withVersion) Manager::addToQueryURL(url, "version", version);
-    if ( !name.isEmpty() ) Manager::addToQueryURL(url, nameItem, name);
-    if (key) Manager::addToQueryURL(url, "key", _playerInfos->key());
-    if (level) {
-        TQString label = manager.gameTypeLabel(_gameType, Manager::WW);
-        if ( !label.isEmpty() ) Manager::addToQueryURL(url, "level", label);
-    }
-
-    return url;
-}
-
-// strings that needs to be translated (coming from the highscores server)
-const char *DUMMY_STRINGS[] = {
-    I18N_NOOP("Undefined error."),
-    I18N_NOOP("Missing argument(s)."),
-    I18N_NOOP("Invalid argument(s)."),
-
-    I18N_NOOP("Unable to connect to MySQL server."),
-    I18N_NOOP("Unable to select database."),
-    I18N_NOOP("Error on database query."),
-    I18N_NOOP("Error on database insert."),
-
-    I18N_NOOP("Nickname already registered."),
-    I18N_NOOP("Nickname not registered."),
-    I18N_NOOP("Invalid key."),
-    I18N_NOOP("Invalid submit key."),
-
-    I18N_NOOP("Invalid level."),
-    I18N_NOOP("Invalid score.")
-};
-
-const char *UNABLE_TO_CONTACT =
-    I18N_NOOP("Unable to contact world-wide highscore server");
-
-bool ManagerPrivate::doQuery(const KURL &url, TQWidget *parent,
-                                TQDomNamedNodeMap *map)
-{
-    KIO::http_update_cache(url, true, 0); // remove cache !
-
-    TQString tmpFile;
-    if ( !KIO::NetAccess::download(url, tmpFile, parent) ) {
-        TQString details = i18n("Server URL: %1").tqarg(url.host());
-        KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
-        return false;
-    }
-
-	TQFile file(tmpFile);
-	if ( !file.open(IO_ReadOnly) ) {
-        KIO::NetAccess::removeTempFile(tmpFile);
-        TQString details = i18n("Unable to open temporary file.");
-        KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
-        return false;
-    }
-
-	TQTextStream t(&file);
-	TQString content = t.read().stripWhiteSpace();
-	file.close();
-    KIO::NetAccess::removeTempFile(tmpFile);
-
-	TQDomDocument doc;
-    if ( doc.setContent(content) ) {
-        TQDomElement root = doc.documentElement();
-        TQDomElement element = root.firstChild().toElement();
-        if ( element.tagName()=="success" ) {
-            if (map) *map = element.attributes();
-            return true;
-        }
-        if ( element.tagName()=="error" ) {
-            TQDomAttr attr = element.attributes().namedItem("label").toAttr();
-            if ( !attr.isNull() ) {
-                TQString msg = i18n(attr.value().latin1());
-                TQString caption = i18n("Message from world-wide highscores "
-                                       "server");
-                KMessageBox::sorry(parent, msg, caption);
-                return false;
-            }
-        }
-    }
-    TQString msg = i18n("Invalid answer from world-wide highscores server.");
-    TQString details = i18n("Raw message: %1").tqarg(content);
-    KMessageBox::detailedSorry(parent, msg, details);
-    return false;
-}
-
-bool ManagerPrivate::getFromQuery(const TQDomNamedNodeMap &map,
-                                  const TQString &name, TQString &value,
-                                  TQWidget *parent)
-{
-    TQDomAttr attr = map.namedItem(name).toAttr();
-    if ( attr.isNull() ) {
-	    KMessageBox::sorry(parent,
-               i18n("Invalid answer from world-wide "
-                    "highscores server (missing item: %1).").tqarg(name));
-		return false;
-    }
-    value = attr.value();
-    return true;
-}
-
-Score ManagerPrivate::readScore(uint i) const
-{
-    Score score(Won);
-    _scoreInfos->read(i, score);
-    return score;
-}
-
-int ManagerPrivate::rank(const Score &score) const
-{
-    uint nb = _scoreInfos->nbEntries();
-    uint i = 0;
-	for (; i<nb; i++)
-        if ( readScore(i)<score ) break;
-	return (i<_scoreInfos->maxNbEntries() ? (int)i : -1);
-}
-
-bool ManagerPrivate::modifySettings(const TQString &newName,
-                                    const TQString &comment, bool WWEnabled,
-                                    TQWidget *widget)
-{
-    TQString newKey;
-    bool newPlayer = false;
-
-    if (WWEnabled) {
-        newPlayer = _playerInfos->key().isEmpty()
-                    || _playerInfos->registeredName().isEmpty();
-        KURL url = queryURL((newPlayer ? Register : Change), newName);
-        Manager::addToQueryURL(url, "comment", comment);
-
-        TQDomNamedNodeMap map;
-        bool ok = doQuery(url, widget, &map);
-        if ( !ok || (newPlayer && !getFromQuery(map, "key", newKey, widget)) )
-            return false;
-    }
-
-    bool ok = _hsConfig->lockForWriting(widget); // no GUI when locking
-    if (ok) {
-        // check again name in case the config file has been changed...
-        // if it has, it is unfortunate because the WWW name is already
-        // committed but should be very rare and not really problematic
-        ok = ( !_playerInfos->isNameUsed(newName) );
-        if (ok)
-            _playerInfos->modifySettings(newName, comment, WWEnabled, newKey);
-        _hsConfig->writeAndUnlock();
-    }
-    return ok;
-}
-
-void ManagerPrivate::convertToGlobal()
-{
-    // read old highscores
-    KHighscore *tmp = _hsConfig;
-    _hsConfig = new KHighscore(true, 0);
-    TQValueVector<Score> scores(_scoreInfos->nbEntries());
-    for (uint i=0; i<scores.count(); i++)
-        scores[i] = readScore(i);
-
-    // commit them
-    delete _hsConfig;
-    _hsConfig = tmp;
-    _hsConfig->lockForWriting();
-    for (uint i=0; i<scores.count(); i++)
-        if ( scores[i].data("id").toUInt()==_playerInfos->oldLocalId()+1 )
-            submitLocal(scores[i]);
-    _hsConfig->writeAndUnlock();
-}
-
-void ManagerPrivate::setGameType(uint type)
-{
-    if (_first) {
-        _first = false;
-        if ( _playerInfos->isNewPlayer() ) {
-            // convert legacy highscores
-            for (uint i=0; i<_nbGameTypes; i++) {
-                setGameType(i);
-                manager.convertLegacy(i);
-            }
-
-#ifdef HIGHSCORE_DIRECTORY
-            if ( _playerInfos->isOldLocalPlayer() ) {
-                // convert local to global highscores
-                for (uint i=0; i<_nbGameTypes; i++) {
-                    setGameType(i);
-                    convertToGlobal();
-                }
-            }
-#endif
-        }
-    }
-
-    Q_ASSERT( type<_nbGameTypes );
-    _gameType = kMin(type, _nbGameTypes-1);
-    TQString str = "scores";
-    TQString lab = manager.gameTypeLabel(_gameType, Manager::Standard);
-    if ( !lab.isEmpty() ) {
-        _playerInfos->setSubGroup(lab);
-        str += "_" + lab;
-    }
-    _scoreInfos->setGroup(str);
-}
-
-void ManagerPrivate::checkFirst()
-{
-    if (_first) setGameType(0);
-}
-
-int ManagerPrivate::submitScore(const Score &ascore,
-                                TQWidget *widget, bool askIfAnonymous)
-{
-    checkFirst();
-
-    Score score = ascore;
-    score.setData("id", _playerInfos->id() + 1);
-    score.setData("date", TQDateTime::tqcurrentDateTime());
-
-    // ask new name if anonymous and winner
-    const char *dontAskAgainName = "highscore_ask_name_dialog";
-    TQString newName;
-    KMessageBox::ButtonCode dummy;
-    if ( score.type()==Won && askIfAnonymous && _playerInfos->isAnonymous()
-     && KMessageBox::shouldBeShownYesNo(dontAskAgainName, dummy) ) {
-         AskNameDialog d(widget);
-         if ( d.exec()==TQDialog::Accepted ) newName = d.name();
-         if ( d.dontAskAgain() )
-             KMessageBox::saveDontShowAgainYesNo(dontAskAgainName,
-                                                 KMessageBox::No);
-    }
-
-    int rank = -1;
-    if ( _hsConfig->lockForWriting(widget) ) { // no GUI when locking
-        // check again new name in case the config file has been changed...
-        if ( !newName.isEmpty() && !_playerInfos->isNameUsed(newName) )
-             _playerInfos->modifyName(newName);
-
-        // commit locally
-        _playerInfos->submitScore(score);
-        if ( score.type()==Won ) rank = submitLocal(score);
-        _hsConfig->writeAndUnlock();
-    }
-
-    if ( _playerInfos->isWWEnabled() )
-        submitWorldWide(score, widget);
-
-    return rank;
-}
-
-int ManagerPrivate::submitLocal(const Score &score)
-{
-    int r = rank(score);
-    if ( r!=-1 ) {
-        uint nb = _scoreInfos->nbEntries();
-        if ( nb<_scoreInfos->maxNbEntries() ) nb++;
-        _scoreInfos->write(r, score, nb);
-    }
-    return r;
-}
-
-bool ManagerPrivate::submitWorldWide(const Score &score,
-                                     TQWidget *widget) const
-{
-    if ( score.type()==Lost && !trackLostGames ) return true;
-    if ( score.type()==Draw && !trackDrawGames ) return true;
-
-    KURL url = queryURL(Submit);
-    manager.additionalQueryItems(url, score);
-    int s = (score.type()==Won ? score.score() : (int)score.type());
-    TQString str =  TQString::number(s);
-    Manager::addToQueryURL(url, "score", str);
-    KMD5 context(TQString(_playerInfos->registeredName() + str).latin1());
-    Manager::addToQueryURL(url, "check", context.hexDigest());
-
-    return doQuery(url, widget);
-}
-
-void ManagerPrivate::exportHighscores(TQTextStream &s)
-{
-    uint tmp = _gameType;
-
-    for (uint i=0; i<_nbGameTypes; i++) {
-        setGameType(i);
-        if ( _nbGameTypes>1 ) {
-            if ( i!=0 ) s << endl;
-            s << "--------------------------------" << endl;
-            s << "Game type: "
-              << manager.gameTypeLabel(_gameType, Manager::I18N)
-              << endl;
-            s << endl;
-        }
-        s << "Players list:" << endl;
-        _playerInfos->exportToText(s);
-        s << endl;
-        s << "Highscores list:" << endl;
-        _scoreInfos->exportToText(s);
-    }
-
-    setGameType(tmp);
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_internal.h b/libkdegames/highscore/kexthighscore_internal.h
deleted file mode 100644
index 0bd4f9ef..00000000
--- a/libkdegames/highscore/kexthighscore_internal.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_INTERNAL_H
-#define KEXTHIGHSCORE_INTERNAL_H
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <klocale.h>
-#include <kurl.h>
-
-#include "khighscore.h"
-#include "kexthighscore.h"
-
-class TQTextStream;
-class TQTabWidget;
-class TQDomNamedNodeMap;
-
-
-namespace KExtHighscore
-{
-
-class PlayerInfos;
-class Score;
-class Manager;
-
-
-//-----------------------------------------------------------------------------
-class RankItem : public Item
-{
- public:
-    RankItem()
-        : Item((uint)0, i18n("Rank"), TQt::AlignRight) {}
-
-    TQVariant read(uint rank, const TQVariant &) const  { return rank; }
-    TQString pretty(uint rank, const TQVariant &) const
-        { return TQString::number(rank+1); }
-};
-
-class NameItem : public Item
-{
- public:
-    NameItem()
-        : Item(TQString(), i18n("Name"), TQt::AlignLeft) {
-            setPrettySpecial(Anonymous);
-    }
-};
-
-class DateItem : public Item
-{
- public:
-    DateItem()
-        : Item(TQDateTime(), i18n("Date"), TQt::AlignRight) {
-            setPrettyFormat(DateTime);
-    }
-};
-
-class SuccessPercentageItem : public Item
-{
- public:
-    SuccessPercentageItem()
-        : Item((double)-1, i18n("Success"), TQt::AlignRight) {
-            setPrettyFormat(Percentage);
-            setPrettySpecial(NegativeNotDefined);
-    }
-};
-
-//-----------------------------------------------------------------------------
-class ItemContainer
-{
- public:
-    ItemContainer();
-    ~ItemContainer();
-
-    void setItem(Item *item);
-    const Item *item() const { return _item; }
-    Item *item() { return _item; }
-
-    void setName(const TQString &name) { _name = name; }
-    TQString name() const { return _name; }
-
-    void setGroup(const TQString &group) { _group = group; }
-    bool isStored() const { return !_group.isNull(); }
-
-    void setSubGroup(const TQString &subGroup) { _subGroup = subGroup; }
-    bool canHaveSubGroup() const { return !_subGroup.isNull(); }
-
-    static const char ANONYMOUS[]; // name assigned to anonymous players
-    static const char ANONYMOUS_LABEL[];
-
-    TQVariant read(uint i) const;
-    TQString pretty(uint i) const;
-    void write(uint i, const TQVariant &value) const;
-    // for UInt TQVariant (return new value)
-    uint increment(uint i) const;
-
- private:
-    Item    *_item;
-    TQString  _name, _group, _subGroup;
-
-    TQString entryName() const;
-
-    ItemContainer(const ItemContainer &);
-    ItemContainer &operator =(const ItemContainer &);
-};
-
-//-----------------------------------------------------------------------------
-/**
- * Manage a bunch of @ref Item which are saved under the same group
- * in KHighscores config file.
- */
-class ItemArray : public TQMemArray<ItemContainer *>
-{
- public:
-    ItemArray();
-    virtual ~ItemArray();
-
-    virtual uint nbEntries() const = 0;
-
-    const ItemContainer *item(const TQString &name) const;
-    ItemContainer *item(const TQString &name);
-
-    void addItem(const TQString &name, Item *, bool stored = true,
-                 bool canHaveSubGroup = false);
-    void setItem(const TQString &name, Item *);
-    int findIndex(const TQString &name) const;
-
-    void setGroup(const TQString &group);
-    void setSubGroup(const TQString &subGroup);
-
-    void read(uint k, Score &data) const;
-    void write(uint k, const Score &data, uint maxNbLines) const;
-
-    void exportToText(TQTextStream &) const;
-
- private:
-    TQString _group, _subGroup;
-
-    void _setItem(uint i, const TQString &name, Item *, bool stored,
-                  bool canHaveSubGroup);
-
-    ItemArray(const ItemArray &);
-    ItemArray &operator =(const ItemArray &);
-};
-
-//-----------------------------------------------------------------------------
-class ScoreInfos : public ItemArray
-{
- public:
-    ScoreInfos(uint maxNbEntries, const PlayerInfos &infos);
-
-    uint nbEntries() const;
-    uint maxNbEntries() const { return _maxNbEntries; }
-
- private:
-    uint _maxNbEntries;
-};
-
-//-----------------------------------------------------------------------------
-class ConfigGroup : public KConfigGroupSaver
-{
- public:
-    ConfigGroup(const TQString &group = TQString())
-        : KConfigGroupSaver(kapp->config(), group) {}
-};
-
-//-----------------------------------------------------------------------------
-class PlayerInfos : public ItemArray
-{
- public:
-    PlayerInfos();
-
-    bool isNewPlayer() const { return _newPlayer; }
-    bool isOldLocalPlayer() const { return _oldLocalPlayer; }
-    uint nbEntries() const;
-    TQString name() const { return item("name")->read(_id).toString(); }
-    bool isAnonymous() const;
-    TQString prettyName() const { return prettyName(_id); }
-    TQString prettyName(uint id) const { return item("name")->pretty(id); }
-    TQString registeredName() const;
-    TQString comment() const { return item("comment")->pretty(_id); }
-    bool isWWEnabled() const;
-    TQString key() const;
-    uint id() const { return _id; }
-    uint oldLocalId() const { return _oldLocalId; }
-
-    void createHistoItems(const TQMemArray<uint> &scores, bool bound);
-    TQString histoName(uint i) const;
-    uint histoSize() const;
-    const TQMemArray<uint> &histogram() const { return _histogram; }
-
-    void submitScore(const Score &) const;
-    // return true if the nickname is already used locally
-    bool isNameUsed(const TQString &name) const;
-    void modifyName(const TQString &newName) const;
-    void modifySettings(const TQString &newName, const TQString &comment,
-                        bool WWEnabled, const TQString &newKey) const;
-    void removeKey();
-
- private:
-    bool _newPlayer, _bound, _oldLocalPlayer;
-    uint _id, _oldLocalId;
-    TQMemArray<uint> _histogram;
-};
-
-//-----------------------------------------------------------------------------
-class ManagerPrivate
-{
- public:
-    ManagerPrivate(uint nbGameTypes, Manager &manager);
-    void init(uint maxNbentries);
-    ~ManagerPrivate();
-
-    bool modifySettings(const TQString &newName, const TQString &comment,
-                        bool WWEnabled, TQWidget *widget);
-
-    void setGameType(uint type);
-    void checkFirst();
-    int submitLocal(const Score &score);
-    int submitScore(const Score &score, TQWidget *widget, bool askIfAnonymous);
-    Score readScore(uint i) const;
-
-    uint gameType() const        { return _gameType; }
-    uint nbGameTypes() const     { return _nbGameTypes; }
-    bool isWWHSAvailable() const { return !serverURL.isEmpty(); }
-    ScoreInfos &scoreInfos()     { return *_scoreInfos; }
-    PlayerInfos &playerInfos()   { return *_playerInfos; }
-    KHighscore &hsConfig()       { return *_hsConfig; }
-    enum QueryType { Submit, Register, Change, Players, Scores };
-    KURL queryURL(QueryType type, const TQString &newName=TQString()) const;
-
-    void exportHighscores(TQTextStream &);
-
-    Manager &manager;
-    KURL     serverURL;
-    TQString  version;
-    bool     showStatistics, showDrawGames, trackLostGames, trackDrawGames;
-    Manager::ShowMode showMode;
-
- private:
-    KHighscore   *_hsConfig;
-    PlayerInfos  *_playerInfos;
-    ScoreInfos   *_scoreInfos;
-    bool          _first;
-    const uint    _nbGameTypes;
-    uint          _gameType;
-
-    // return -1 if not a local best score
-    int rank(const Score &score) const;
-
-    bool submitWorldWide(const Score &score, TQWidget *parent) const;
-    static bool doQuery(const KURL &url, TQWidget *parent,
-                        TQDomNamedNodeMap *map = 0);
-    static bool getFromQuery(const TQDomNamedNodeMap &map, const TQString &name,
-                             TQString &value, TQWidget *parent);
-    void convertToGlobal();
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_item.cpp b/libkdegames/highscore/kexthighscore_item.cpp
deleted file mode 100644
index 4b48a0ee..00000000
--- a/libkdegames/highscore/kexthighscore_item.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_item.h"
-
-#include <tqlayout.h>
-#include <kglobal.h>
-#include <kdialogbase.h>
-#include <kdebug.h>
-
-#include "khighscore.h"
-#include "kexthighscore_internal.h"
-#include "kexthighscore_gui.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-Item::Item(const TQVariant &def, const TQString &label, int tqalignment)
-    : _default(def), _label(label), _tqalignment(tqalignment),
-      _format(NoFormat), _special(NoSpecial)
-{}
-
-Item::~Item()
-{}
-
-TQVariant Item::read(uint, const TQVariant &value) const
-{
-    return value;
-}
-
-void Item::setPrettyFormat(Format format)
-{
-    bool buint = ( _default.type()==TQVariant::UInt );
-    bool bdouble = ( _default.type()==TQVariant::Double );
-    bool bnum = ( buint || bdouble || _default.type()==TQVariant::Int );
-
-    switch (format) {
-    case OneDecimal:
-    case Percentage:
-        Q_ASSERT(bdouble);
-        break;
-    case MinuteTime:
-        Q_ASSERT(bnum);
-        break;
-    case DateTime:
-    	Q_ASSERT( _default.type()==TQVariant::DateTime );
-	break;
-    case NoFormat:
-        break;
-    }
-
-    _format = format;
-}
-
-void Item::setPrettySpecial(Special special)
-{
-    bool buint = ( _default.type()==TQVariant::UInt );
-    bool bnum = ( buint || _default.type()==TQVariant::Double
-                  || _default.type()==TQVariant::Int );
-
-    switch (special) {
-    case ZeroNotDefined:
-        Q_ASSERT(bnum);
-        break;
-    case NegativeNotDefined:
-        Q_ASSERT(bnum && !buint);
-        break;
-    case DefaultNotDefined:
-        break;
-    case Anonymous:
-        Q_ASSERT( _default.type()==TQVariant::String );
-        break;
-    case NoSpecial:
-        break;
-    }
-
-     _special = special;
-}
-
-TQString Item::timeFormat(uint n)
-{
-    Q_ASSERT( n<=3600 && n!=0 );
-    n = 3600 - n;
-    return TQString::number(n / 60).rightJustify(2, '0') + ':'
-        + TQString::number(n % 60).rightJustify(2, '0');
-}
-
-TQString Item::pretty(uint, const TQVariant &value) const
-{
-    switch (_special) {
-    case ZeroNotDefined:
-        if ( value.toUInt()==0 ) return "--";
-        break;
-    case NegativeNotDefined:
-        if ( value.toInt()<0 ) return "--";
-        break;
-    case DefaultNotDefined:
-        if ( value==_default ) return "--";
-        break;
-    case Anonymous:
-        if ( value.toString()==ItemContainer::ANONYMOUS )
-            return i18n(ItemContainer::ANONYMOUS_LABEL);
-        break;
-    case NoFormat:
-        break;
-    }
-
-    switch (_format) {
-    case OneDecimal:
-        return TQString::number(value.toDouble(), 'f', 1);
-    case Percentage:
-        return TQString::number(value.toDouble(), 'f', 1) + "%";
-    case MinuteTime:
-        return timeFormat(value.toUInt());
-    case DateTime:
-        if ( value.toDateTime().isNull() ) return "--";
-        return KGlobal::locale()->formatDateTime(value.toDateTime());
-    case NoSpecial:
-        break;
-    }
-
-    return value.toString();
-}
-
-//-----------------------------------------------------------------------------
-Score::Score(ScoreType type)
-    : _type(type)
-{
-    const ItemArray &items = internal->scoreInfos();
-    for (uint i=0; i<items.size(); i++)
-        _data[items[i]->name()] = items[i]->item()->defaultValue();
-}
-
-Score::~Score()
-{}
-
-const TQVariant &Score::data(const TQString &name) const
-{
-    Q_ASSERT( _data.contains(name) );
-    return _data[name];
-}
-
-void Score::setData(const TQString &name, const TQVariant &value)
-{
-    Q_ASSERT( _data.contains(name) );
-    Q_ASSERT( _data[name].type()==value.type() );
-    _data[name] = value;
-}
-
-bool Score::isTheWorst() const
-{
-    Score s;
-    return score()==s.score();
-}
-
-bool Score::operator <(const Score &score)
-{
-    return internal->manager.isStrictlyLess(*this, score);
-}
-
-TQDataStream &operator <<(TQDataStream &s, const Score &score)
-{
-    s << (TQ_UINT8)score.type();
-    s << score._data;
-    return s;
-}
-
-TQDataStream &operator >>(TQDataStream &s, Score &score)
-{
-    TQ_UINT8 type;
-    s >> type;
-    score._type = (ScoreType)type;
-    s >> score._data;
-    return s;
-}
-
-//-----------------------------------------------------------------------------
-MultiplayerScores::MultiplayerScores()
-{}
-
-MultiplayerScores::~MultiplayerScores()
-{}
-
-void MultiplayerScores::clear()
-{
-    Score score;
-    for (uint i=0; i<_scores.size(); i++) {
-        _nbGames[i] = 0;
-        TQVariant name = _scores[i].data("name");
-        _scores[i] = score;
-        _scores[i].setData("name", name);
-        _scores[i]._data["mean score"] = double(0);
-        _scores[i]._data["nb won games"] = uint(0);
-    }
-}
-
-void MultiplayerScores::setPlayerCount(uint nb)
-{
-    _nbGames.resize(nb);
-    _scores.resize(nb);
-    clear();
-}
-
-void MultiplayerScores::setName(uint i, const TQString &name)
-{
-    _scores[i].setData("name", name);
-}
-
-void MultiplayerScores::addScore(uint i, const Score &score)
-{
-    TQVariant name = _scores[i].data("name");
-    double mean = _scores[i].data("mean score").toDouble();
-    uint won = _scores[i].data("nb won games").toUInt();
-    _scores[i] = score;
-    _scores[i].setData("name", name);
-    _nbGames[i]++;
-    mean += (double(score.score()) - mean) / _nbGames[i];
-    _scores[i]._data["mean score"] = mean;
-    if ( score.type()==Won ) won++;
-    _scores[i]._data["nb won games"] = won;
-}
-
-void MultiplayerScores::show(TQWidget *parent)
-{
-    // check consistency
-    if ( _nbGames.size()<2 ) kdWarning(11002) << "less than 2 players" << endl;
-    else {
-        bool ok = true;
-        uint nb = _nbGames[0];
-        for (uint i=1; i<_nbGames.size(); i++)
-            if ( _nbGames[i]!=nb ) ok = false;
-        if (!ok)
-           kdWarning(11002) << "players have not same number of games" << endl;
-    }
-
-    // order the players according to the number of won games
-    TQValueVector<Score> ordered;
-    for (uint i=0; i<_scores.size(); i++) {
-        uint won = _scores[i].data("nb won games").toUInt();
-        double mean = _scores[i].data("mean score").toDouble();
-        TQValueVector<Score>::iterator it;
-        for(it = ordered.begin(); it!=ordered.end(); ++it) {
-            uint cwon = (*it).data("nb won games").toUInt();
-            double cmean = (*it).data("mean score").toDouble();
-            if ( won<cwon || (won==cwon && mean<cmean) ) {
-                ordered.insert(it, _scores[i]);
-                break;
-            }
-        }
-        if ( it==ordered.end() ) ordered.push_back(_scores[i]);
-    }
-
-    // show the scores
-    KDialogBase dialog(KDialogBase::Plain, i18n("Multiplayers Scores"),
-                       KDialogBase::Close, KDialogBase::Close,
-                       parent, "show_multiplayers_score", true, true);
-    TQHBoxLayout *hbox = new TQHBoxLayout(dialog.plainPage(),
-                                KDialog::marginHint(), KDialog::spacingHint());
-
-    TQVBox *vbox = new TQVBox(dialog.plainPage());
-    hbox->addWidget(vbox);
-    if ( _nbGames[0]==0 ) (void)new TQLabel(i18n("No game played."), vbox);
-    else {
-        (void)new TQLabel(i18n("Scores for last game:"), vbox);
-        (void)new LastMultipleScoresList(ordered, vbox);
-    }
-
-    if ( _nbGames[0]>1 ) {
-        vbox = new TQVBox(dialog.plainPage());
-        hbox->addWidget(vbox);
-        (void)new TQLabel(i18n("Scores for the last %1 games:")
-                         .tqarg(_nbGames[0]), vbox);
-        (void)new TotalMultipleScoresList(ordered, vbox);
-    }
-
-    dialog.enableButtonSeparator(false);
-    dialog.exec();
-}
-
-TQDataStream &operator <<(TQDataStream &s, const MultiplayerScores &score)
-{
-    s << score._scores;
-    s << score._nbGames;
-    return s;
-}
-
-TQDataStream &operator >>(TQDataStream &s, MultiplayerScores &score)
-{
-    s >> score._scores;
-    s >> score._nbGames;
-    return s;
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_item.h b/libkdegames/highscore/kexthighscore_item.h
deleted file mode 100644
index b32f32e7..00000000
--- a/libkdegames/highscore/kexthighscore_item.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_ITEM_H
-#define KEXTHIGHSCORE_ITEM_H
-
-#include <tqvariant.h>
-#include <tqnamespace.h>
-#include <tqmap.h>
-#include <tqvaluevector.h>
-#include <kdemacros.h>
-class TQWidget;
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-/**
- * This class defines how to convert and how to display
- * a highscore element (such as the score, the date, ...) or a player
- * info (such as the player name, the best score, ...).
- */
-class KDE_EXPORT Item
-{
- public:
-    /**
-     * Possible display format.
-     * <ul>
-     * <li> @p NoFormat : no formatting (default) </li>
-     * <li> @p OneDecimal : with one decimal (only for Double) </li>
-     * <li> @p Percentage : with one decimal + % (only for Double) </li>
-     * <li> @p MinuteTime : MM:SS ie 3600 is 00:00, 1 is 59:59 and 0 is
-     *      undefined (only for UInt, Int and Double) </li>
-     * <li> @p DateTime : date and time according to locale (only for
-     *      DateTime) </li>
-     * </ul>
-     */
-    enum Format { NoFormat, OneDecimal, Percentage, MinuteTime,
-		          DateTime };
-
-    /**
-     * Possible special value for display format.
-     * <ul>
-     * <li> @p NoSpecial : no special value ; a null DateTime is replaced by
-     *      "--" (default) </li>
-     * <li> ZeroNotDefined : 0 is replaced by "--" (only for UInt, Int and
-     *      Double) </li>
-     * <li> @p NegativeNotDefined : negative values are replaced by "--" (only
-     *      for Int and Double) </li>
-     * <li> @p DefaultNotDefined : default value is replaced by "--" </li>
-     * <li> @p Anonymous : replace the special value ItemBase::ANONYMOUS
-     *      by i18n("anonymous") (only for String) </li>
-     * </ul>
-     */
-    enum Special { NoSpecial, ZeroNotDefined, NegativeNotDefined,
-                   DefaultNotDefined, Anonymous };
-
-    /**
-     * Constructor.
-     *
-     * @param def default value ; the TQVariant also gives the type of data.
-     * Be sure to cast the value to the required type (for e.g. with uint).
-     * @param label the label corresponding to the item. If empty, the item
-     *              is not shown.
-     * @param tqalignment the tqalignment of the item.
-     */
-    Item(const TQVariant &def = TQVariant::Invalid,
-         const TQString &label = TQString(), int tqalignment = TQt::AlignRight);
-
-    virtual ~Item();
-
-    /**
-     * Set the display format.
-     * @see Format
-     */
-    void setPrettyFormat(Format format);
-
-    /**
-     * Set the special value for display.
-     * @see Special
-     */
-    void setPrettySpecial(Special special);
-
-    /**
-     * @return if the item is shown.
-     */
-    bool isVisible() const    { return !_label.isEmpty(); }
-
-    /**
-     * Set the label.
-     */
-    void setLabel(const TQString &label) { _label = label; }
-
-    /**
-     * @return the label.
-     */
-    TQString label() const { return _label; }
-
-    /**
-     * @return the tqalignment.
-     */
-    int tqalignment() const { return _tqalignment; }
-
-    /**
-     * Set default value.
-     */
-    void setDefaultValue(const TQVariant &value) { _default = value; }
-
-    /**
-     * @return the default value.
-     */
-    const TQVariant &defaultValue() const { return _default; }
-
-    /**
-     * @return the converted value (by default the value is left
-     * unchanged). Most of the time you don't need to reimplement this method.
-     *
-     * @param i the element index ("rank" for score / "id" for player)
-     * @param value the value to convert
-     */
-    virtual TQVariant read(uint i, const TQVariant &value) const;
-
-    /**
-     * @return the string to be displayed. You may need to reimplement this
-     * method for special formatting (different from the standard ones).
-     *
-     * @param i the element index ("rank" for score / "id" for player)
-     * @param value the value to convert
-     */
-    virtual TQString pretty(uint i, const TQVariant &value) const;
-
- private:
-    TQVariant _default;
-    TQString  _label;
-    int      _tqalignment;
-    Format   _format;
-    Special  _special;
-
-    class ItemPrivate;
-    ItemPrivate *d;
-
-    static TQString timeFormat(uint);
-};
-
-//-----------------------------------------------------------------------------
-/**
- * Possible score type.
- * @p Won the game has been won.
- * @p Lost the game has been lost or has been aborted.
- * @p Draw the game is a draw.
- */
-enum ScoreType { Won = 0, Lost = -1, Draw = -2 };
-
-/**
- * This class contains data for a score. You should not inherit from
- * this class but reimplement the methods in Highscores.
- */
-class KDE_EXPORT Score
-{
- public:
-    Score(ScoreType type = Won);
-
-    ~Score();
-
-    /**
-     * @return the game type.
-     */
-    ScoreType type() const { return _type; }
-
-    /**
-     * Set the game type.
-     */
-    void setType(ScoreType type) { _type = type; }
-
-    /**
-     * @return the data associated with the named Item.
-     */
-    const TQVariant &data(const TQString &name) const;
-
-    /**
-     * Set the data associated with the named Item. Note that the
-     * value should have the type of the default value of the
-     * Item.
-     */
-    void setData(const TQString &name, const TQVariant &value);
-
-    /**
-     * @return the score value.
-     *
-     * Equivalent to <pre>data("score").toUInt()</pre>.
-     */
-    uint score() const { return data("score").toUInt(); }
-
-    /**
-     * Set the score value.
-     *
-     * Equivalent to <pre>setData("score", score)</pre>.
-     */
-    void setScore(uint score) { setData("score", score); }
-
-    /**
-     * @return true if this is the worst possible score (ie the default
-     * argument of ScoreItem).
-     */
-    bool isTheWorst() const;
-
-    /**
-     * Comparison operator.
-     *
-     * @see Manager::isStrictlyLess
-     */
-    bool operator <(const Score &score);
-
- private:
-    ScoreType  _type;
-    TQMap<TQString, TQVariant> _data;
-
-    class ScorePrivate;
-    ScorePrivate *d;
-
-    friend class MultiplayerScores;
-
-    friend TQDataStream &operator <<(TQDataStream &stream, const Score &score);
-    friend TQDataStream &operator >>(TQDataStream &stream, Score &score);
-};
-
-KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const Score &score);
-KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, Score &score);
-
-/**
- * This class is used to store and show scores for multiplayer games.
- *
- * Example of use:
- * Initialize the class:
- * <pre>
- * KExtHighscore::MultiScore ms(2);
- * ms.setPlayerName(0, "player 1");
- * ms.setPlayerName(1, "player 2");
- * </pre>
- * At the end of each game, add the score of each players:
- * <pre>
- * KExtHighscore::Score score(KExtHighscore::Won);
- * score.setScore(100);
- * ms.addScore(0, score);
- * score.setType(KExtHighscore::Lost);
- * score.setScore(20);
- * ms.addScore(1, score);
- * </pre>
- */
-class KDE_EXPORT MultiplayerScores
-{
- public:
-    MultiplayerScores();
-
-    ~MultiplayerScores();
-
-    /**
-     * Set the number of players and clear the scores.
-     */
-    void setPlayerCount(uint nb);
-
-    /**
-     * Set the name of player.
-     */
-    void setName(uint player, const TQString &name);
-
-    /**
-     * Add the score of player.
-     */
-    void addScore(uint player, const Score &score);
-
-    /**
-     * Clear all scores.
-     */
-    void clear();
-
-    /**
-     * Show scores.
-     */
-    void show(TQWidget *parent);
-
- private:
-    TQValueVector<uint>  _nbGames;
-    TQValueVector<Score> _scores;
-
-    class MultiplayerScoresPrivate;
-    MultiplayerScoresPrivate *d;
-
-    friend TQDataStream &operator <<(TQDataStream &stream,
-                                    const MultiplayerScores &score);
-    friend TQDataStream &operator >>(TQDataStream &stream,
-                                    MultiplayerScores &score);
-};
-
-KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const MultiplayerScores &score);
-KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, MultiplayerScores &score);
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_tab.cpp b/libkdegames/highscore/kexthighscore_tab.cpp
deleted file mode 100644
index d47b35a6..00000000
--- a/libkdegames/highscore/kexthighscore_tab.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_tab.h"
-#include "kexthighscore_tab.moc"
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqvgroupbox.h>
-#include <tqgrid.h>
-#include <tqheader.h>
-
-#include <kdialogbase.h>
-#include <klistview.h>
-#include <kdebug.h>
-#include <kglobal.h>
-
-#include "kexthighscore.h"
-#include "kexthighscore_internal.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-PlayersCombo::PlayersCombo(TQWidget *parent, const char *name)
-    : TQComboBox(parent, name)
-{
-    const PlayerInfos &p = internal->playerInfos();
-    for (uint i = 0; i<p.nbEntries(); i++)
-        insertItem(p.prettyName(i));
-    insertItem(TQString("<") + i18n("all") + '>');
-    connect(this, TQT_SIGNAL(activated(int)), TQT_SLOT(activatedSlot(int)));
-}
-
-void PlayersCombo::activatedSlot(int i)
-{
-    const PlayerInfos &p = internal->playerInfos();
-    if ( i==(int)p.nbEntries() ) emit allSelected();
-    else if ( i==(int)p.nbEntries()+1 ) emit noneSelected();
-    else emit playerSelected(i);
-}
-
-void PlayersCombo::load()
-{
-    const PlayerInfos &p = internal->playerInfos();
-    for (uint i = 0; i<p.nbEntries(); i++)
-        changeItem(p.prettyName(i), i);
-}
-
-//-----------------------------------------------------------------------------
-AdditionalTab::AdditionalTab(TQWidget *parent, const char *name)
-    : TQWidget(parent, name)
-{
-    TQVBoxLayout *top = new TQVBoxLayout(this, KDialogBase::marginHint(),
-                                       KDialogBase::spacingHint());
-
-    TQHBoxLayout *hbox = new TQHBoxLayout(top);
-    TQLabel *label = new TQLabel(i18n("Select player:"), this);
-    hbox->addWidget(label);
-    _combo = new PlayersCombo(this);
-    connect(_combo, TQT_SIGNAL(playerSelected(uint)),
-            TQT_SLOT(playerSelected(uint)));
-    connect(_combo, TQT_SIGNAL(allSelected()), TQT_SLOT(allSelected()));
-    hbox->addWidget(_combo);
-    hbox->addStretch(1);
-}
-
-void AdditionalTab::init()
-{
-    uint id = internal->playerInfos().id();
-    _combo->setCurrentItem(id);
-    playerSelected(id);
-}
-
-void AdditionalTab::allSelected()
-{
-    display(internal->playerInfos().nbEntries());
-}
-
-TQString AdditionalTab::percent(uint n, uint total, bool withBraces)
-{
-    if ( n==0 || total==0 ) return TQString();
-    TQString s =  TQString("%1%").tqarg(100.0 * n / total, 0, 'f', 1);
-    return (withBraces ? TQString("(") + s + ")" : s);
-}
-
-void AdditionalTab::load()
-{
-    _combo->load();
-}
-
-
-//-----------------------------------------------------------------------------
-const char *StatisticsTab::COUNT_LABELS[Nb_Counts] = {
-    I18N_NOOP("Total:"), I18N_NOOP("Won:"), I18N_NOOP("Lost:"),
-    I18N_NOOP("Draw:")
-};
-const char *StatisticsTab::TREND_LABELS[Nb_Trends] = {
-    I18N_NOOP("Current:"), I18N_NOOP("Max won:"), I18N_NOOP("Max lost:")
-};
-
-StatisticsTab::StatisticsTab(TQWidget *parent)
-    : AdditionalTab(parent, "statistics_tab")
-{
-    // construct GUI
-    TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
-
-    TQHBoxLayout *hbox = new TQHBoxLayout(top);
-    TQVBoxLayout *vbox = new TQVBoxLayout(hbox);
-    TQVGroupBox *group = new TQVGroupBox(i18n("Game Counts"), this);
-    vbox->addWidget(group);
-    TQGrid *grid = new TQGrid(3, group);
-    grid->setSpacing(KDialogBase::spacingHint());
-    for (uint k=0; k<Nb_Counts; k++) {
-        if ( Count(k)==Draw && !internal->showDrawGames ) continue;
-        (void)new TQLabel(i18n(COUNT_LABELS[k]), grid);
-        _nbs[k] = new TQLabel(grid);
-        _percents[k] = new TQLabel(grid);
-    }
-
-    group = new TQVGroupBox(i18n("Trends"), this);
-    vbox->addWidget(group);
-    grid = new TQGrid(2, group);
-    grid->setSpacing(KDialogBase::spacingHint());
-    for (uint k=0; k<Nb_Trends; k++) {
-        (void)new TQLabel(i18n(TREND_LABELS[k]), grid);
-        _trends[k] = new TQLabel(grid);
-    }
-
-    hbox->addStretch(1);
-    top->addStretch(1);
-}
-
-void StatisticsTab::load()
-{
-    AdditionalTab::load();
-    const PlayerInfos &pi = internal->playerInfos();
-    uint nb = pi.nbEntries();
-    _data.resize(nb+1);
-    for (uint i=0; i<_data.size()-1; i++) {
-        _data[i].count[Total] = pi.item("nb games")->read(i).toUInt();
-        _data[i].count[Lost] = pi.item("nb lost games")->read(i).toUInt()
-                       + pi.item("nb black marks")->read(i).toUInt(); // legacy
-        _data[i].count[Draw] = pi.item("nb draw games")->read(i).toUInt();
-        _data[i].count[Won] = _data[i].count[Total] - _data[i].count[Lost]
-                              - _data[i].count[Draw];
-        _data[i].trend[CurrentTrend] =
-            pi.item("current trend")->read(i).toInt();
-        _data[i].trend[WonTrend] = pi.item("max won trend")->read(i).toUInt();
-        _data[i].trend[LostTrend] =
-            -(int)pi.item("max lost trend")->read(i).toUInt();
-    }
-
-    for (uint k=0; k<Nb_Counts; k++) _data[nb].count[k] = 0;
-    for (uint k=0; k<Nb_Trends; k++) _data[nb].trend[k] = 0;
-    for (uint i=0; i<_data.size()-1; i++) {
-        for (uint k=0; k<Nb_Counts; k++)
-            _data[nb].count[k] += _data[i].count[k];
-        for (uint k=0; k<Nb_Trends; k++)
-            _data[nb].trend[k] += _data[i].trend[k];
-    }
-    for (uint k=0; k<Nb_Trends; k++)
-        _data[nb].trend[k] /= (_data.size()-1);
-
-    init();
-}
-
-TQString StatisticsTab::percent(const Data &d, Count count) const
-{
-    if ( count==Total ) return TQString();
-    return AdditionalTab::percent(d.count[count], d.count[Total], true);
-}
-
-void StatisticsTab::display(uint i)
-{
-    const Data &d = _data[i];
-    for (uint k=0; k<Nb_Counts; k++) {
-        if ( Count(k) && !internal->showDrawGames ) continue;
-        _nbs[k]->setText(TQString::number(d.count[k]));
-        _percents[k]->setText(percent(d, Count(k)));
-    }
-    for (uint k=0; k<Nb_Trends; k++) {
-        TQString s;
-        if ( d.trend[k]>0 ) s = '+';
-        int prec = (i==internal->playerInfos().nbEntries() ? 1 : 0);
-        _trends[k]->setText(s + TQString::number(d.trend[k], 'f', prec));
-    }
-}
-
-//-----------------------------------------------------------------------------
-HistogramTab::HistogramTab(TQWidget *parent)
-    : AdditionalTab(parent, "histogram_tab")
-{
-    // construct GUI
-    TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
-
-    _list = new KListView(this);
-    _list->setSelectionMode(TQListView::NoSelection);
-    _list->setItemMargin(3);
-    _list->setAllColumnsShowFocus(true);
-    _list->setSorting(-1);
-    _list->header()->setClickEnabled(false);
-    _list->header()->setMovingEnabled(false);
-    top->addWidget(_list);
-
-    _list->addColumn(i18n("From"));
-    _list->addColumn(i18n("To"));
-    _list->addColumn(i18n("Count"));
-    _list->addColumn(i18n("Percent"));
-    for (uint i=0; i<4; i++) _list->setColumnAlignment(i, AlignRight);
-    _list->addColumn(TQString());
-
-    const Item *sitem = internal->scoreInfos().item("score")->item();
-    const PlayerInfos &pi = internal->playerInfos();
-    const TQMemArray<uint> &sh = pi.histogram();
-    for (uint k=1; k<pi.histoSize(); k++) {
-        TQString s1 = sitem->pretty(0, sh[k-1]);
-        TQString s2;
-        if ( k==sh.size() ) s2 = "...";
-        else if ( sh[k]!=sh[k-1]+1 ) s2 = sitem->pretty(0, sh[k]);
-        (void)new KListViewItem(_list, s1, s2);
-    }
-}
-
-void HistogramTab::load()
-{
-    AdditionalTab::load();
-    const PlayerInfos &pi = internal->playerInfos();
-    uint n = pi.nbEntries();
-    uint s = pi.histoSize() - 1;
-    _counts.resize((n+1) * s);
-    _data.fill(0, n+1);
-    for (uint k=0; k<s; k++) {
-        _counts[n*s + k] = 0;
-        for (uint i=0; i<n; i++) {
-            uint nb = pi.item(pi.histoName(k+1))->read(i).toUInt();
-            _counts[i*s + k] = nb;
-            _counts[n*s + k] += nb;
-            _data[i] += nb;
-            _data[n] += nb;
-        }
-    }
-
-    init();
-}
-
-void HistogramTab::display(uint i)
-{
-    const PlayerInfos &pi = internal->playerInfos();
-    TQListViewItem *item = _list->firstChild();
-    uint s = pi.histoSize() - 1;
-    for (int k=s-1; k>=0; k--) {
-        uint nb = _counts[i*s + k];
-        item->setText(2, TQString::number(nb));
-        item->setText(3, percent(nb, _data[i]));
-        uint width = (_data[i]==0 ? 0 : tqRound(150.0 * nb / _data[i]));
-        TQPixmap pixmap(width, 10);
-        pixmap.fill(blue);
-        item->setPixmap(4, pixmap);
-        item = item->nextSibling();
-    }
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_tab.h b/libkdegames/highscore/kexthighscore_tab.h
deleted file mode 100644
index d59afeb5..00000000
--- a/libkdegames/highscore/kexthighscore_tab.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_TAB_H
-#define KEXTHIGHSCORE_TAB_H
-
-#include <tqcombobox.h>
-#include <tqmemarray.h>
-
-class TQLabel;
-class KListView;
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-class PlayersCombo : public TQComboBox
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    PlayersCombo(TQWidget *parent = 0, const char *name = 0);
-
-    void load();
-
- signals:
-    void playerSelected(uint i);
-    void allSelected();
-    void noneSelected();
-
- private slots:
-    void activatedSlot(int i);
-};
-
-//-----------------------------------------------------------------------------
-class AdditionalTab : public TQWidget
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    AdditionalTab(TQWidget *parent, const char *name);
-
-    virtual void load();
-
- private slots:
-    void playerSelected(uint i) { display(i) ; }
-    void allSelected();
-
- protected:
-    void init();
-    static TQString percent(uint n, uint total, bool withBraces = false);
-    virtual void display(uint i) = 0;
-
- private:
-    PlayersCombo *_combo;
-};
-
-//-----------------------------------------------------------------------------
-class StatisticsTab : public AdditionalTab
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    StatisticsTab(TQWidget *parent);
-
-    void load();
-
- private:
-    enum Count { Total = 0, Won, Lost, Draw, Nb_Counts };
-    static const char *COUNT_LABELS[Nb_Counts];
-    enum Trend { CurrentTrend = 0, WonTrend, LostTrend, Nb_Trends };
-    static const char *TREND_LABELS[Nb_Trends];
-    struct Data {
-        uint count[Nb_Counts];
-        double trend[Nb_Trends];
-    };
-    TQMemArray<Data> _data;
-    TQLabel *_nbs[Nb_Counts], *_percents[Nb_Counts], *_trends[Nb_Trends];
-
-    TQString percent(const Data &, Count) const;
-    void display(uint i);
-};
-
-//-----------------------------------------------------------------------------
-class HistogramTab : public AdditionalTab
-{
- Q_OBJECT
-  TQ_OBJECT
- public:
-    HistogramTab(TQWidget *parent);
-
-    void load();
-
- private:
-    TQMemArray<uint> _counts;
-    TQMemArray<uint> _data;
-    KListView       *_list;
-
-    void display(uint i);
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kfilelock.cpp b/libkdegames/highscore/kfilelock.cpp
deleted file mode 100644
index 7dc83b96..00000000
--- a/libkdegames/highscore/kfilelock.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kfilelock.h"
-
-#include <unistd.h>
-#include <sys/file.h>
-#include <errno.h>
-
-#include <kdebug.h>
-
-
-KFileLock::KFileLock(int fd)
-    : _fd(fd), _locked(false)
-{}
-
-int KFileLock::lock()
-{
-    kdDebug(11002) << "lock fd=" << _fd << endl;
-#ifdef F_SETLK
-# ifndef SEEK_SET
-#  define SEEK_SET 0
-# endif
-    struct flock lock_data;
-    lock_data.l_type = F_WRLCK;
-    lock_data.l_whence = SEEK_SET;
-    lock_data.l_start = lock_data.l_len = 0;
-    if ( fcntl(_fd, F_SETLK, &lock_data)==-1 ) {
-        if ( errno==EAGAIN ) return -2;
-        return -1;
-    }
-#else
-# ifdef LOCK_EX
-    if ( flock (_fd, LOCK_EX|LOCK_NB)==-1 ) {
-        if ( errno==EWOULDBLOCK ) return -2;
-        return -1;
-    }
-# else
-    if ( lockf(_fd, F_TLOCK, 0)==-1 ) {
-        if ( errno==EACCES ) return -2;
-        return -1;
-    }
-# endif
-#endif
-    _locked = true;
-    return 0;
-}
-
-KFileLock::~KFileLock()
-{
-    unlock();
-}
-
-void KFileLock::unlock()
-{
-    if ( !_locked ) return;
-    kdDebug(11002) << "unlock" << endl;
-# ifdef F_SETLK
-    struct flock lock_data;
-    lock_data.l_type = F_UNLCK;
-    lock_data.l_whence = SEEK_SET;
-    lock_data.l_start = lock_data.l_len = 0;
-    (void)fcntl(_fd, F_SETLK, &lock_data);
-# else
-#  ifdef F_ULOCK
-    lockf(_fd, F_ULOCK, 0);
-#  else
-    flock(_fd, LOCK_UN);
-#  endif
-# endif
-    _locked = false;
-}
diff --git a/libkdegames/highscore/kfilelock.h b/libkdegames/highscore/kfilelock.h
deleted file mode 100644
index 2e1841ba..00000000
--- a/libkdegames/highscore/kfilelock.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-#ifndef KFILELOCK_H
-#define KFILELOCK_H
-
-
-class KFileLock
-{
-public:
-    KFileLock(int fd);
-
-    /** Call unlock(). */
-    ~KFileLock();
-
-    /** @return the file descriptor. */
-    int fd() const { return _fd; }
-
-    /*
-     * Lock the file.
-     * @return 0 on success, -1 on failure (no permission) and -2 if another
-     * process is currently locking the file.
-     */
-    int lock();
-
-    /** Unlock the file. */
-    void unlock();
-
-    /** @return true if we currently lock the file. */
-    bool isLocked() const { return _locked; }
-
-private:
-    int   _fd;
-    bool  _locked;
-};
-
-
-#endif
diff --git a/libkdegames/highscore/khighscore.cpp b/libkdegames/highscore/khighscore.cpp
deleted file mode 100644
index 6d696020..00000000
--- a/libkdegames/highscore/khighscore.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include <config.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/file.h>
-
-#include <kapplication.h>
-#include <ksimpleconfig.h>
-#include <kglobal.h>
-#include <kstdguiitem.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <kdebug.h>
-#include <kstaticdeleter.h>
-
-#include "khighscore.h"
-#include "kconfigrawbackend.h"
-#include "kfilelock.h"
-
-#define GROUP "KHighscore"
-
-class KHighscorePrivate
-{
-public:
-    KHighscorePrivate() {}
-
-    TQString  group;
-    bool     global;
-};
-
-KFileLock *KHighscore::_lock = 0;
-KRawConfig *KHighscore::_config = 0;
-static KStaticDeleter<KFileLock> lockSD;
-static KStaticDeleter<KRawConfig> configSD;
-
-
-KHighscore::KHighscore(TQObject* parent)
-    : TQObject(parent)
-{
-    init(true);
-}
-
-KHighscore::KHighscore(bool forceLocal, TQObject* parent)
-    : TQObject(parent)
-{
-    init(forceLocal);
-}
-
-void KHighscore::init(bool forceLocal)
-{
-    d = new KHighscorePrivate;
-#ifdef HIGHSCORE_DIRECTORY
-    d->global = !forceLocal;
-    if ( d->global && _lock==0 )
-        kdFatal(11002) << "KHighscore::init should be called before!!" << endl;
-#else
-    d->global = false;
-    Q_UNUSED(forceLocal);
-#endif
-    readCurrentConfig();
-}
-
-bool KHighscore::isLocked() const
-{
-    return (d->global ? _lock->isLocked() : true);
-}
-
-void KHighscore::readCurrentConfig()
-{
-    if ( d->global ) _config->reparseConfiguration();
-}
-
-void KHighscore::init(const char *appname)
-{
-#ifdef HIGHSCORE_DIRECTORY
-    const TQString filename =  TQString::fromLocal8Bit("%1/%2.scores")
-                              .tqarg(HIGHSCORE_DIRECTORY).tqarg(appname);
-    int fd = open(filename.local8Bit(), O_RDWR);
-    if ( fd<0 ) kdFatal(11002) << "cannot open global highscore file \""
-                               << filename << "\"" << endl;
-    lockSD.setObject(_lock, new KFileLock(fd));
-    configSD.setObject(_config, new KRawConfig(fd, true)); // read-only
-
-    // drop the effective gid
-    int gid = getgid();
-    setregid(gid, gid);
-#else
-    Q_UNUSED(appname);
-#endif
-}
-
-bool KHighscore::lockForWriting(TQWidget *widget)
-{
-    if ( isLocked() ) return true;
-
-    bool first = true;
-    for (;;) {
-        kdDebug(11002) << "try locking" << endl;
-        // lock the highscore file (it should exist)
-        int result = _lock->lock();
-        bool ok = ( result==0 );
-        kdDebug(11002) << "locking system-wide highscore file res="
-                       <<  result << " (ok=" << ok << ")" << endl;
-        if (ok) {
-            readCurrentConfig();
-            _config->setReadOnly(false);
-            return true;
-        }
-
-        if ( !first ) {
-            KGuiItem item = KStdGuiItem::cont();
-            item.setText(i18n("Retry"));
-            int res = KMessageBox::warningContinueCancel(widget, i18n("Cannot access the highscore file. Another user is probably currently writing to it."), TQString(), item, "ask_lock_global_highscore_file");
-            if ( res==KMessageBox::Cancel ) break;
-        } else sleep(1);
-        first = false;
-    }
-    return false;
-}
-
-void KHighscore::writeAndUnlock()
-{
-    if ( !d->global ) {
-        kapp->config()->sync();
-        return;
-    }
-    if ( !isLocked() ) return;
-
-    kdDebug(11002) << "unlocking" << endl;
-    _config->sync(); // write config
-    _lock->unlock();
-    _config->setReadOnly(true);
-}
-
-KHighscore::~KHighscore()
-{
-    writeAndUnlock();
-    delete d;
-}
-
-KConfig* KHighscore::config() const
-{
-    return (d->global ? _config : kapp->config());
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, const TQVariant& value)
-{
- Q_ASSERT( isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, int value)
-{
- Q_ASSERT( isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, const TQString &value)
-{
- Q_ASSERT (isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-TQVariant KHighscore::readPropertyEntry(int entry, const TQString& key, const TQVariant& pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readPropertyEntry(confKey, pDefault);
-}
-
-TQString KHighscore::readEntry(int entry, const TQString& key, const TQString& pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readEntry(confKey, pDefault);
-}
-
-int KHighscore::readNumEntry(int entry, const TQString& key, int pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readNumEntry(confKey, pDefault);
-}
-
-bool KHighscore::hasEntry(int entry, const TQString& key) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->hasKey(confKey);
-}
-
-TQStringList KHighscore::readList(const TQString& key, int lastEntry) const
-{
- TQStringList list;
- for (int i = 1; hasEntry(i, key) && ((lastEntry > 0) ? (i <= lastEntry) : true); i++) {
-	list.append(readEntry(i, key));
- }
- return list;
-}
-
-void KHighscore::writeList(const TQString& key, const TQStringList& list)
-{
- for (int unsigned i = 1; i <= list.count(); i++) {
-	writeEntry(i, key, list[i - 1]);
- }
-}
-
-void KHighscore::setHighscoreGroup(const TQString& group)
-{
- d->group = group;
-}
-
-const TQString& KHighscore::highscoreGroup() const
-{
- return d->group;
-}
-
-TQString KHighscore::group() const
-{
-    if ( highscoreGroup().isNull() )
-        return (d->global ? TQString() : GROUP);
-    return (d->global ? highscoreGroup()
-            : TQString("%1_%2").tqarg(GROUP).tqarg(highscoreGroup()));
-}
-
-bool KHighscore::hasTable() const
-{ return config()->hasGroup(group()); }
-
-void KHighscore::sync()
-{
-    writeAndUnlock();
-}
-
-#include "khighscore.moc"
diff --git a/libkdegames/highscore/khighscore.h b/libkdegames/highscore/khighscore.h
deleted file mode 100644
index b7b6fb5e..00000000
--- a/libkdegames/highscore/khighscore.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KHIGHSCORE_H__
-#define __KHIGHSCORE_H__
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KConfig;
-class KFileLock;
-class KRawConfig;
-class KHighscorePrivate;
-
-/**
- * @short Class for managing highscore tables
- *
- * This is the KDE class for saving and reading highscore tables. It offers the
- * possibility for system-wide highscore tables (configure with e.g.
- * --enable-highscore-dir=/var/games) and a theoretically unlimited number of
- * entries.
- *
- * You can specify different "keys" for an entry - just like the KConfig
- * keys. But it will be prefixed with the number of the entry. For example you
- * will probably use something like this to save the name of the player on the
- * top of the list (ie the winner):
- * \code
- * highscore->writeEntry(1, "name", myPlayer->name());
- * \endcode
- * Note that it doesn't really matter if you use "0" or "1" as the first entry
- * of the list as long as your program always uses the same for the first
- * entry. I recommend to use "1", as several convenience methods use this.
- *
- * You can also specify different groups using setHighscoreGroup. Just
- * like the keys mentioned above the groups behave like groups in KConfig
- * but are prefixed with "KHighscore_". The default group is just "KHighscore".
- * You might use this e.g. to create different highscore tables like
- * \code
- * table->setHighscoreGroup("Easy");
- * // write the highscores for level "easy" to the table
- * writeEasyHighscores(table);
- *
- * table->setHighscore("Player_1");
- * // write player specific highscores to the table
- * writePlayerHighscores(table);
- * \endcode
- * As you can see above you can also use this to write the highscores of a
- * single player, so the "best times" of a player. To write highscores for a
- * specific player in a specific level you will have to use a more complex way:
- * \code
- * TQString group = TQString("%1_%2").tqarg(player).tqarg(level);
- * table->setGroup(group);
- * writeHighscore(table, player, level);
- * \endcode
- *
- * Also note that you MUST NOT mark the key or the group for translation! I.e.
- * don't use i18n() for the keys or groups! Here is the code to read the above
- * written entry:
- * \code
- * TQString firstName = highscore->readEntry(0, "name");
- * \endcode
- * Easy, what?
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KHighscore : public TQObject
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-        /** @obsolete
-         * Constructor. The highscore file is forced to be local to support
-         * games using the old behaviour.
-         */
-	KHighscore(TQObject* parent = 0);
-
-        /**
-         * Constructor.
-         *
-         * @param forceLocal if true, the local highscore file is used even
-         * when the configuration has been set to use a system-wide file. This
-         * is convenient for converting highscores from legacy applications.
-	 * @param parent parent widget for this widget
-	 * @since 3.2
-         */
-        KHighscore(bool forceLocal, TQObject *parent);
-
-        /**
-         * Read the current state of the highscore file. Remember that when
-         * it's not locked for writing, this file can change at any time.
-         * (This method is only useful for a system-wide highscore file).
-	 * @since 3.2
-         */
-        void readCurrentConfig();
-
-        /** @since 3.2
-         * This method open the system-wide highscore file using the effective
-         * group id of the game executable (which should be "games"). The
-         * effective group id is completely dropped afterwards.
-         *
-         * Note: this method should be called in main() before creating a
-         * KApplication and doing anything else (KApplication checks that the
-         * program is not suid/sgid and will exit the program for security
-         * reason if it is the case).
-         */
-        static void init(const char *appname);
-
-        /** @since 3.2
-         * Lock the system-wide highscore file for writing (does nothing and
-         * return true if the local file is used).
-         * You should perform writing without GUI interaction to avoid
-         * blocking and don't forget to unlock the file as soon as possible
-         * with writeAndUnlock().
-         *
-         * If the config file cannot be locked,
-         * the method waits for 1 second and, if it failed again, displays
-         * a message box asking for retry or cancel.
-         * @param widget used as the parent of the message box.
-         *
-         * @return false on error or if the config file is locked by another
-         * process. In such case, the config stays read-only.
-         */
-        bool lockForWriting(TQWidget *widget = 0);
-
-        /**
-         * Effectively write and unlock the system-wide highscore file
-         * (@see lockForWriting).
-         * If using a local highscore file, it will sync the config.
-	 * @since 3.2
-         */
-        void writeAndUnlock();
-
-        /**
-         * @return true if the highscore file is locked or if a local
-         * file is used.
-	 *  @since 3.2
-         */
-        bool isLocked() const;
-
-        /**
-         * Destructor.
-         * If necessary, write and unlock the highscore file.
-         */
-	~KHighscore();
-
-	/**
-	 * @param entry The number of the entry / the placing of the player
-	 * @param key A key for this entry. E.g. "name" for the name of the
-	 * player. Nearly the same as the usual keys in KConfig - but they
-	 * are prefixed with the entry number
-	 * @param value The value of this entry
-	 **/
-	void writeEntry(int entry, const TQString& key, const TQString& value);
-
-	/**
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 **/
-	void writeEntry(int entry, const TQString& key, int value);
-
-	/**
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 * See KConfigBase documentation for allowed TQVariant::Type.
-	 **/
-	void writeEntry(int entry, const TQString& key, const TQVariant &value);
-
-	/**
-	 * Reads an entry from the highscore table.
-	 * @param entry The number of the entry / the placing to be read
-	 * @param key The key of the entry. E.g. "name" for the name of the
-	 * player. Nearly the same as the usual keys in KConfig - but they
-	 * are prefixed with the entry number
-	 * @param pDefault This will be used as default value if the key+pair
-	 * entry can't be found.
-	 * @return The value of this entry+key pair or pDefault if the entry+key
-	 * pair doesn't exist
-	 **/
-	TQString readEntry(int entry, const TQString& key, const TQString& pDefault = TQString()) const;
-
-	/**
-	 * Read a numeric value.
-	 * @param entry The number of the entry / the placing to be read
-	 * @param key The key of the entry. E.g. "name" for the name of the
-	 * player. Nearly the same as the usual keys in KConfig - but they
-	 * are prefixed with the entry number
-	 * @param pDefault This will be used as default value if the key+pair
-	 * entry can't be found.
-	 * @return The value of this entry+key pair or pDefault if the entry+key
-	 * pair doesn't exist
-	 **/
-	int readNumEntry(int entry, const TQString& key, int pDefault = -1) const;
-
-    /**
-     * Read a TQVariant entry.
-     * See KConfigBase documentation for allowed TQVariant::Type.
-     *
-     * @return the value of this entry+key pair or pDefault if the entry+key
-     * pair doesn't exist or
-     */
-    TQVariant readPropertyEntry(int entry, const TQString &key, const TQVariant &pDefault) const;
-
-	/**
-	 * @return True if the highscore table conatins the entry/key pair,
-	 * otherwise false
-	 **/
-	bool hasEntry(int entry, const TQString& key) const;
-
-	/**
-	 * Reads a list of entries from the highscore table starting at 1 until
-	 * lastEntry. If an entry between those numbers doesn't exist the
-	 * function aborts reading even if after the missing entry is an
-	 * existing one. The first entry of the list is the first placing, the
-	 * last on is the last placing.
-	 * @return A list of the entries of this key. You could also call
-	 * readEntry(i, key) where i is from 1 to 20. Note that this function
-	 * depends on "1" as the first entry!
-	 * @param key The key of the entry. E.g. "name" for the name of the
-	 * player. Nearly the same as the usual keys in KConfig - but they
-	 * are prefixed with the entry number
-	 * @param lastEntry the last entry which will be includes into the list.
-	 * 1 will include a list with maximal 1 entry - 20 a list with maximal
-	 * 20 entries. If lastEntry is <= 0 then rading is only stopped when when an
-	 * entry does not exist.
-	 **/
-	TQStringList readList(const TQString& key, int lastEntry = 20) const;
-
-	/**
-	 * Writes a list of entries to the highscore table.
-	 *
-	 * The first entry is prefixed with "1". Using this method is a short
-	 * way of calling writeEntry(i, key, list[i]) from i = 1 to
-	 * list.count()
-	 * @param key A key for the entry. E.g. "name" for the name of the
-	 * player. Nearly the same as the usual keys in KConfig - but they
-	 * are prefixed with the entry number
-	 * @param list The list of values
-	 **/
-	void writeList(const TQString& key, const TQStringList& list);
-
-	/**
-	 * @return Whether a highscore table exists. You can use this
-	 * function to indicate whether KHighscore created a highscore table
-	 * before and - if not - read your old (non-KHighscore) table instead.
-	 * This way you can safely read an old table and save it using
-	 * KHighscore without losing any data
-	 **/
-	bool hasTable() const;
-
-        /** @obsolete
-         * This does the same as writeAndUnlock().
-         */
-	void sync();
-
-	/**
-	 * Set the new highscore group. The group is being prefixed with
-	 * "KHighscore_" in the table.
-	 * @param groupname The new groupname. E.g. use "easy" for the easy
-	 * level of your game. If you use TQString() (the default) the
-	 * default group is used.
-	 **/
-	void setHighscoreGroup(const TQString& groupname = TQString());
-
-	/**
-	 * @return The currently used group. This doesn't contain the prefix
-	 * ("KHighscore_") but the same as setHighscoreGroup uses. The
-         * default is TQString()
-	 **/
-	const TQString& highscoreGroup() const;
-
-protected:
-	/**
-	 * @return A groupname to be used in KConfig. Used internally to
-	 * prefix the value from highscoreGroup() with "KHighscore_"
-	 **/
-	TQString group() const;
-
-	/**
-	 * @return A pointer to the KConfig object to be used. This is
-	 * either kapp->config() (default) or a KSimpleConfig object for
-         * a system-wide highscore file.
-	 **/
-	KConfig* config() const;
-
-        void init(bool forceLocal);
-
-private:
-	KHighscorePrivate* d;
-
-        static KFileLock *_lock; // lock on system-wide highscore file
-        static KRawConfig *_config; // config for system-wide highscore file
-};
-
-#endif
diff --git a/libkdegames/highscore/kscoredialog.cpp b/libkdegames/highscore/kscoredialog.cpp
deleted file mode 100644
index e799883b..00000000
--- a/libkdegames/highscore/kscoredialog.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/****************************************************************
-Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
-Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of the author not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-The author disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness.  In no event shall the author be liable for any
-special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#include "config.h"
-
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqlineedit.h>
-#include <tqwidgetstack.h>
-#include <tqtimer.h>
-#include <tqevent.h>
-#include <tqptrvector.h>
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <klocale.h>
-#include <kseparator.h>
-
-#include "kscoredialog.h"
-
-class KScoreDialog::KScoreDialogPrivate
-{ 
-public:  
-   TQPtrList<FieldInfo> scores;
-   TQWidget *page;
-   TQGridLayout *tqlayout;
-   TQLineEdit *edit;
-   TQPtrVector<TQWidgetStack> stack;
-   TQPtrVector<TQLabel> labels;
-   TQLabel *commentLabel;
-   TQString comment;
-   int fields;
-   int newName;
-   int latest;
-   int nrCols;
-   bool loaded;
-   TQString configGroup;
-   
-   TQMap<int, int> col;
-   TQMap<int, TQString> header;
-   TQMap<int, TQString> key;
-   TQString player;
-};
-
-
-KScoreDialog::KScoreDialog(int fields, TQWidget *parent, const char *oname)
-        : KDialogBase(parent, oname, true, i18n("High Scores"), Ok, Ok, true)
-{
-   d = new KScoreDialogPrivate();
-   d->edit = 0;
-   d->fields = fields;
-   d->newName = -1;
-   d->latest = -1;
-   d->loaded = false;
-   d->nrCols = 0;
-   d->configGroup = "High Score";
-   
-   d->scores.setAutoDelete(true);
-   d->header[Name] = i18n("Name");
-   d->key[Name] = "Name";
-   
-   d->header[Date] = i18n("Date");
-   d->key[Date] = "Date";
-   
-   d->header[Level] = i18n("Level");
-   d->key[Level] = "Level";
-   
-   d->header[Score] = i18n("Score");
-   d->key[Score] = "Score";
-   d->page = makeMainWidget();
-   
-   connect(this, TQT_SIGNAL(okClicked()), TQT_SLOT(slotGotName()));
-}
-
-KScoreDialog::~KScoreDialog()
-{
-   delete d;
-}
-
-void KScoreDialog::setConfigGroup(const TQString &group)
-{
-   d->configGroup = group;
-   d->loaded = false;
-}
-
-void KScoreDialog::setComment(const TQString &comment)
-{
-   d->comment = comment;
-}
-
-void KScoreDialog::addField(int field, const TQString &header, const TQString &key)
-{
-   d->fields |= field;
-   d->header[field] = header;
-   d->key[field] = key;
-}
-
-void KScoreDialog::setupDialog()
-{
-   d->nrCols = 1;
-   
-   for(int field = 1; field < d->fields; field = field * 2)
-   {
-      if (d->fields & field)
-         d->col[field] = d->nrCols++;
-   }
-      
-   d->tqlayout = new TQGridLayout(d->page, 15, d->nrCols, marginHint() + 20, spacingHint());
-   d->tqlayout->addRowSpacing(4, 15);
-
-   d->commentLabel = new TQLabel(d->page);
-   d->commentLabel->tqsetAlignment(AlignVCenter | AlignHCenter);
-   d->tqlayout->addMultiCellWidget(d->commentLabel, 1, 1, 0, d->nrCols-1);
-
-   TQFont bold = font();
-   bold.setBold(true);
-
-   TQLabel *label;
-   d->tqlayout->addColSpacing(0, 50);
-   label = new TQLabel(i18n("Rank"), d->page);
-   d->tqlayout->addWidget(label, 3, 0);
-   label->setFont(bold);
-
-   for(int field = 1; field < d->fields; field = field * 2)
-   {
-      if (d->fields & field)
-      {
-         d->tqlayout->addColSpacing(d->col[field], 50);
-
-         label = new TQLabel(d->header[field], d->page);
-         d->tqlayout->addWidget(label, 3, d->col[field], field <= Name ? AlignLeft : AlignRight);
-         label->setFont(bold);
-      }
-   }
-
-   KSeparator *sep = new KSeparator(Qt::Horizontal, d->page);
-   d->tqlayout->addMultiCellWidget(sep, 4, 4, 0, d->nrCols-1);
-
-   d->labels.resize(d->nrCols * 10);
-   d->stack.resize(10);
-
-   TQString num;
-   for (int i = 1; i <= 10; ++i) {
-      TQLabel *label;
-      num.setNum(i);
-      label = new TQLabel(i18n("#%1").tqarg(num), d->page);
-      d->labels.insert((i-1)*d->nrCols + 0, label);
-      d->tqlayout->addWidget(label, i+4, 0);
-      if (d->fields & Name)
-      {
-         TQWidgetStack *stack = new TQWidgetStack(d->page);
-         d->stack.insert(i-1, stack);
-         d->tqlayout->addWidget(stack, i+4, d->col[Name]);
-         label = new TQLabel(d->page);
-         d->labels.insert((i-1)*d->nrCols + d->col[Name], label);
-         stack->addWidget(label);
-         stack->raiseWidget(label);
-      }
-      for(int field = Name * 2; field < d->fields; field = field * 2)
-      {
-         if (d->fields & field)
-         {
-           label = new TQLabel(d->page);
-           d->labels.insert((i-1)*d->nrCols + d->col[field], label);
-           d->tqlayout->addWidget(label, i+4, d->col[field], AlignRight);
-         }
-      }
-   }
-}
-
-void KScoreDialog::aboutToShow()
-{
-   if (!d->loaded)
-      loadScores();
-      
-   if (!d->nrCols)
-      setupDialog();
-
-   d->commentLabel->setText(d->comment);
-   if (d->comment.isEmpty())
-   {
-      d->commentLabel->setMinimumSize(TQSize(1,1));
-      d->commentLabel->hide();    
-      d->tqlayout->addRowSpacing(0, -15);
-      d->tqlayout->addRowSpacing(2, -15);
-   } 
-   else
-   {
-      d->commentLabel->setMinimumSize(d->commentLabel->tqsizeHint());
-      d->commentLabel->show();
-      d->tqlayout->addRowSpacing(0, -10);
-      d->tqlayout->addRowSpacing(2, 10);
-   }
-   d->comment = TQString();
-
-   TQFont normal = font();
-   TQFont bold = normal;
-   bold.setBold(true);
-
-   TQString num;
-   for (int i = 1; i <= 10; ++i) {
-      TQLabel *label;
-      num.setNum(i);
-      FieldInfo *score = d->scores.at(i-1);
-      label = d->labels[(i-1)*d->nrCols + 0];
-      if (i == d->latest) 
-         label->setFont(bold);
-      else
-         label->setFont(normal);
-
-      if (d->fields & Name)
-      {
-         if (d->newName == i)
-         {
-           TQWidgetStack *stack = d->stack[i-1];
-           d->edit = new TQLineEdit(d->player, stack);
-           d->edit->setMinimumWidth(40);
-           stack->addWidget(d->edit);
-           stack->raiseWidget(d->edit);
-           d->edit->setFocus();
-           connect(d->edit, TQT_SIGNAL(returnPressed()), 
-                 this, TQT_SLOT(slotGotReturn()));
-         }
-         else
-         {
-           label = d->labels[(i-1)*d->nrCols + d->col[Name]];
-           if (i == d->latest) 
-             label->setFont(bold);
-           else
-             label->setFont(normal);
-           label->setText((*score)[Name]);
-         }
-         
-      }
-      for(int field = Name * 2; field < d->fields; field = field * 2)
-      {
-         if (d->fields & field)
-         {
-           label = d->labels[(i-1)*d->nrCols + d->col[field]];
-           if (i == d->latest) 
-             label->setFont(bold);
-           else
-             label->setFont(normal);
-           label->setText((*score)[field]);
-         }
-      }
-   }
-   d->latest = -1;
-   setFixedSize(tqminimumSizeHint());
-}
-
-void KScoreDialog::loadScores()
-{
-   TQString key, value;
-   d->loaded = true;
-   d->scores.clear();
-   KConfigGroup config(kapp->config(), d->configGroup.utf8());
-
-   d->player = config.readEntry("LastPlayer");
-
-   TQString num;
-   for (int i = 1; i <= 10; ++i) {
-      num.setNum(i);
-      FieldInfo *score = new FieldInfo();
-      for(int field = 1; field < d->fields; field = field * 2)
-      {
-         if (d->fields & field)
-         {
-            key = "Pos" + num + d->key[field];
-            (*score)[field] = config.readEntry(key, "-");
-         }
-      }
-      d->scores.append(score);
-   }
-}
-
-void KScoreDialog::saveScores()
-{
-   TQString key, value;
-   KConfigGroup config(kapp->config(), d->configGroup.utf8());
-
-   config.writeEntry("LastPlayer", d->player);
-
-   TQString num;
-   for (int i = 1; i <= 10; ++i) {
-      num.setNum(i);
-      FieldInfo *score = d->scores.at(i-1);
-      for(int field = 1; field < d->fields; field = field * 2)
-      {
-         if (d->fields & field)
-         {
-            key = "Pos" + num + d->key[field];
-            config.writeEntry(key, (*score)[field]);
-         }
-      }
-   }
-   kapp->config()->sync();
-}
-
-int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName)
-{
-   return addScore(newScore, newInfo, askName, false);
-}
-
-int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore)
-{
-   if (!d->loaded)
-      loadScores();
-   FieldInfo *score = d->scores.first();
-   int i = 1;
-   for(; score; score = d->scores.next(), i++)
-   {
-      bool ok;
-      int num_score = (*score)[Score].toLong(&ok);
-      if (lessIsMore && !ok)
-         num_score = 1 << 30;
-      if (((newScore > num_score) && !lessIsMore) ||
-          ((newScore < num_score) && lessIsMore))
-      {
-        score = new FieldInfo(newInfo);
-        (*score)[Score].setNum(newScore);
-        d->scores.insert(i-1, score);
-        d->scores.remove(10);
-        d->latest = i;
-        if (askName)
-          d->newName = i;
-        else
-          saveScores();
-        if (i == 1)
-          d->comment = i18n("Excellent!\nYou have a new high score!");
-        else
-          d->comment = i18n("Well done!\nYou made it to the high score list!");
-        return i;
-      }
-   }
-   return 0;
-}
-
-void KScoreDialog::show()
-{
-   aboutToShow();
-   KDialogBase::show();
-}
-
-void KScoreDialog::slotGotReturn()
-{
-   TQTimer::singleShot(0, this, TQT_SLOT(slotGotName()));
-}
-
-void KScoreDialog::slotGotName()
-{
-   if (d->newName == -1) return;
-   
-   d->player = d->edit->text();
-   
-   (*d->scores.at(d->newName-1))[Name] = d->player;
-   saveScores();
-
-   TQFont bold = font();
-   bold.setBold(true);
-   
-   TQLabel *label = d->labels[(d->newName-1)*d->nrCols + d->col[Name]];
-   label->setFont(bold);
-   label->setText(d->player);
-   d->stack[(d->newName-1)]->raiseWidget(label);
-   delete d->edit;
-   d->edit = 0;
-   d->newName = -1;
-}
-
-int KScoreDialog::highScore()
-{
-   if (!d->loaded)
-      loadScores();
-
-   return (*d->scores.first())[Score].toInt();
-}
-
-void KScoreDialog::keyPressEvent( TQKeyEvent *ev)
-{
-   if ((d->newName != -1) && (ev->key() == Key_Return))
-   {
-       ev->ignore();
-       return;
-   }
-   KDialogBase::keyPressEvent(ev);
-}
-
-
-#include "kscoredialog.moc"
diff --git a/libkdegames/highscore/kscoredialog.h b/libkdegames/highscore/kscoredialog.h
deleted file mode 100644
index 99a9f70b..00000000
--- a/libkdegames/highscore/kscoredialog.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************
-Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
-Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of the author not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-The author disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness.  In no event shall the author be liable for any
-special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#ifndef KSCOREDIALOG_H
-#define KSCOREDIALOG_H
-
-#include <tqmap.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-class TQGridLayout;
-class TQLineEdit;
-class TQWidgetStack;
-
-/**
- * A simple high score dialog.
- */
-class KDE_EXPORT KScoreDialog : public KDialogBase {
-   Q_OBJECT
-  TQ_OBJECT
-   
-public:
-   enum Fields { Name = 1 << 0, 
-                 Level = 1 << 1, 
-                 
-                 Custom1 = 1 << 10,
-                 Custom2 = 1 << 11,
-                 Custom3 = 1 << 12,   	
-                 
-                 Date = 1 << 27, 
-                 Time = 1 << 28, 
-                 Score = 1 << 29 };
-        
-   typedef TQMap<int, TQString> FieldInfo;
-
-   /**
-    * @param fields Which fields should be listed.
-    * @param parent passed to parent TQWidget constructor
-    * @param name passed to parent TQWidget constructor
-    */
-   KScoreDialog(int fields, TQWidget *parent=0, const char *name=0);
-
-   ~KScoreDialog();
-
-   /**
-    * @param group to use for reading/writing highscores from/to. By default
-    * the class will use "High Score"
-    */
-   void setConfigGroup(const TQString &group);
-
-   /**
-    * @param comment to add when showing high-scores.
-    * The comment is only used once.  
-    */
-   void setComment(const TQString &comment);
-
-   /**
-    * Define an extra FieldInfo entry.
-    * @param field Id of this field
-    * @param header Header shown in the dialog for this field
-    * @param key used to store this field with.
-    */
-   void addField(int field, const TQString &header, const TQString &key); 
-
-   /**
-    * Adds a new score to the list.
-    *
-    * @param newScore the score of this game.
-    * @param newInfo additional info about the score.
-    * @param askName Whether to prompt for the players name.
-    * @param lessIsMore If true, the lowest score is the best score.
-    *
-    * @returns The highscore position if the score was good enough to 
-    * make it into the list (1 being topscore) or 0 otherwise.
-    */   
-   int addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore);
-   int addScore(int newScore, const FieldInfo &newInfo, bool askName=true);
-
-   /**
-    * Returns the current best score.
-    */
-   int highScore();
-
-   virtual void show();
-
-private slots:
-   void slotGotReturn();
-   void slotGotName();
-
-private:
-   /* read scores */
-   void loadScores();   
-   void saveScores();
-   
-   void aboutToShow();
-   void setupDialog();
-   void keyPressEvent( TQKeyEvent *ev);
-
-private:           
-   class KScoreDialogPrivate;
-   KScoreDialogPrivate *d;
-};
-
-#endif // !KSCOREDIALOG_H
diff --git a/libkdegames/kcanvasrootpixmap.cpp b/libkdegames/kcanvasrootpixmap.cpp
deleted file mode 100644
index 20440458..00000000
--- a/libkdegames/kcanvasrootpixmap.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kcanvasrootpixmap.h"
-
-#include <tqcanvas.h>
-
-
-KCanvasRootPixmap::KCanvasRootPixmap(TQCanvasView *view, const char *name)
-    : KRootPixmap(view, name), _view(view)
-{
-    setCustomPainting(true);
-    connect(this, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)),
-            TQT_SLOT(backgroundUpdatedSlot(const TQPixmap &)));
-}
-
-void KCanvasRootPixmap::backgroundUpdatedSlot(const TQPixmap &pixmap)
-{
-    if ( _view && _view->canvas() )
-        _view->canvas()->tqsetBackgroundPixmap(pixmap);
-}
-
-#include "kcanvasrootpixmap.moc"
diff --git a/libkdegames/kcanvasrootpixmap.h b/libkdegames/kcanvasrootpixmap.h
deleted file mode 100644
index 91dfa8bd..00000000
--- a/libkdegames/kcanvasrootpixmap.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KCANVASROOTPIXMAP_H
-#define KCANVASROOTPIXMAP_H
-
-#include <krootpixmap.h>
-#include <kdemacros.h>
-
-class TQCanvasView;
-
-/**
- * Implement KRootPixmap for a TQCanvasView.
- *
- * The pixmap will be set as the background of the
- * TQCanvas associated with the view :
- * <ul>
- * <li>for correct positioning of the background pixmap, the given
- * TQCanvasView should be positioned at the origin of the canvas.</li>
- * <li>no other view of the same canvas should use KCanvasRootPixmap.</li>
- * <li>other views of the canvas will have the same background pixmap.</li>
- * </ul>
- */
-class KDE_EXPORT KCanvasRootPixmap : public KRootPixmap
-{
- Q_OBJECT
-  TQ_OBJECT
-
- public:
-    /**
-     * Constructor.
-     */
-    KCanvasRootPixmap(TQCanvasView *view, const char *name = 0);
-
- private slots:
-    void backgroundUpdatedSlot(const TQPixmap &);
-
- private:
-    TQCanvasView *_view;
-
-    class KCanvasRootPixmapPrivate;
-    KCanvasRootPixmapPrivate *d;
-};
-
-#endif
-
diff --git a/libkdegames/kcarddialog.cpp b/libkdegames/kcarddialog.cpp
deleted file mode 100644
index fc73de22..00000000
--- a/libkdegames/kcarddialog.cpp
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2000 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include <stdio.h>
-#include <assert.h>
-
-#include <tqgroupbox.h>
-#include <tqlabel.h>
-#include <tqcheckbox.h>
-#include <tqlayout.h>
-#include <tqtooltip.h>
-#include <tqslider.h>
-#include <tqwmatrix.h>
-
-#include <kapplication.h>
-#include <klocale.h>
-#include <kstandarddirs.h>
-#include <kiconview.h>
-#include <ksimpleconfig.h>
-
-#include "kcarddialog.h"
-#include <tqpushbutton.h>
-#include <kdebug.h>
-
-#define KCARD_DEFAULTDECK TQString::tqfromLatin1("deck0.png")
-#define KCARD_DEFAULTCARD TQString::tqfromLatin1("11.png")
-#define KCARD_DEFAULTCARDDIR TQString::tqfromLatin1("cards-default/")
-
-// values for the resize slider
-#define SLIDER_MIN 400
-#define SLIDER_MAX 3000
-
-// KConfig entries
-#define CONF_GROUP "KCardDialog"
-#define CONF_RANDOMDECK TQString::tqfromLatin1("RandomDeck")
-#define CONF_DECK TQString::tqfromLatin1("Deck")
-#define CONF_CARDDIR TQString::tqfromLatin1("CardDir")
-#define CONF_RANDOMCARDDIR TQString::tqfromLatin1("RandomCardDir")
-#define CONF_USEGLOBALDECK TQString::tqfromLatin1("GlobalDeck")
-#define CONF_USEGLOBALCARDDIR TQString::tqfromLatin1("GlobalCardDir")
-#define CONF_SCALE TQString::tqfromLatin1("Scale")
-
-#define CONF_GLOBAL_GROUP TQString::tqfromLatin1("KCardDialog Settings")
-#define CONF_GLOBAL_DECK TQString::tqfromLatin1("GlobalDeck")
-#define CONF_GLOBAL_CARDDIR TQString::tqfromLatin1("GlobalCardDir")
-#define CONF_GLOBAL_RANDOMDECK TQString::tqfromLatin1("GlobalRandomDeck")
-#define CONF_GLOBAL_RANDOMCARDDIR TQString::tqfromLatin1("GlobalRandomCardDir")
-
-
-class KCardDialogPrivate
-{
-public:
-    KCardDialogPrivate()
-    {
-       deckLabel = 0;
-       cardLabel = 0;
-       deckIconView = 0;
-       cardIconView = 0;
-       randomDeck = 0;
-       randomCardDir = 0;
-       cPreview = 0;
-       scaleSlider = 0;
-       globalDeck = 0;
-       globalCardDir = 0;
-
-       cScale = 1;
-    }
-
-    TQLabel* deckLabel;
-    TQLabel* cardLabel;
-    KIconView* deckIconView;
-    KIconView* cardIconView;
-    TQCheckBox* randomDeck;
-    TQCheckBox* randomCardDir;
-    TQCheckBox* globalDeck;
-    TQCheckBox* globalCardDir;
-
-    TQSlider* scaleSlider;
-    TQPixmap cPreviewPix;
-    TQLabel* cPreview;
-
-    TQMap<TQIconViewItem*, TQString> deckMap;
-    TQMap<TQIconViewItem*, TQString> cardMap;
-    TQMap<TQString, TQString> helpMap;
-
-    //set query variables
-    KCardDialog::CardFlags cFlags;
-    TQString cDeck;
-    TQString cCardDir;
-    double cScale;
-};
-
-int KCardDialog::getCardDeck(TQString &pDeck, TQString &pCardDir, TQWidget *pParent,
-                             CardFlags pFlags, bool* pRandomDeck, bool* pRandomCardDir,
-			     double* pScale, KConfig* pConf)
-{
-    KCardDialog dlg(pParent, "dlg", pFlags);
-
-    dlg.setDeck(pDeck);
-    dlg.setCardDir(pCardDir);
-
-    dlg.setupDialog(pScale != 0);
-    dlg.loadConfig(pConf);
-    dlg.showRandomDeckBox(pRandomDeck != 0);
-    dlg.showRandomCardDirBox(pRandomCardDir != 0);
-    int result=dlg.exec();
-    if (result==TQDialog::Accepted)
-    {
-    // TODO check for global cards/decks!!!!
-        pDeck=dlg.deck();
-        pCardDir=dlg.cardDir();
-        if (!pCardDir.isNull() && pCardDir.right(1)!=TQString::tqfromLatin1("/"))
-        {
-            pCardDir+=TQString::tqfromLatin1("/");
-        }
-        if (pRandomDeck)
-        {
-            *pRandomDeck = dlg.isRandomDeck();
-        }
-        if (pRandomCardDir)
-        {
-            *pRandomCardDir = dlg.isRandomCardDir();
-        }
-	if (pScale)
-	{
-            *pScale = dlg.cardScale();
-	}
-
-        if (dlg.isGlobalDeck())
-	{
-	    kdDebug(11000) << "use global deck" << endl;
-	    bool random;
-	    getGlobalDeck(pDeck, random);
-	    kdDebug(11000) << "use: " << pDeck<< endl;
-	    if (pRandomDeck)
-	    {
-	        *pRandomDeck=random;
-		if (random)
-	        kdDebug(11000) << "use random deck" << endl;
-	    }
-	}
-        if (dlg.isGlobalCardDir())
-	{
-	    kdDebug(11000) << "use global carddir" << endl;
-	    bool random;
-	    getGlobalCardDir(pCardDir, random);
-	    kdDebug(11000) << "use: " << pCardDir << endl;
-	    if (pRandomCardDir)
-	    {
-	        *pRandomCardDir=random;
-		if (random)
-	        kdDebug(11000) << "use random carddir" << endl;
-	    }
-	}
-    }
-    dlg.saveConfig(pConf);
-    return result;
-}
-
-void KCardDialog::getConfigCardDeck(KConfig* conf, TQString &pDeck, TQString &pCardDir, double& pScale)
-{
-// TODO check for global cards/decks!!!!
- if (!conf) {
-	return;
- }
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (conf->readBoolEntry(CONF_RANDOMDECK) || !conf->hasKey(CONF_DECK)) {
-	pDeck = getRandomDeck();
- } else {
-	pDeck = conf->readEntry(CONF_DECK);
- }
- if (conf->readBoolEntry(CONF_RANDOMCARDDIR) || !conf->hasKey(CONF_CARDDIR)) {
-	pCardDir = getRandomCardDir();
- } else {
-	pCardDir = conf->readPathEntry(CONF_CARDDIR);
- }
- pScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
-
- if (conf->readBoolEntry(CONF_USEGLOBALDECK, false)) {
-	bool random;
-	getGlobalDeck(pCardDir, random);
-	if (random || pDeck.isNull() ) {
-		pDeck = getRandomDeck();
-	}
- }
- if (conf->readBoolEntry(CONF_USEGLOBALCARDDIR, false)) {
-	bool random;
-	getGlobalCardDir(pCardDir, random);
-	if (random || pCardDir.isNull() ) {
-		pCardDir = getRandomCardDir();
-	}
- }
-
- conf->setGroup(origGroup);
-}
-
-TQString KCardDialog::getDefaultDeck()
-{
-    KCardDialog::init();
-    return locate("cards", TQString::tqfromLatin1("decks/") + KCARD_DEFAULTDECK);
-}
-
-TQString KCardDialog::getDefaultCardDir()
-{
-    KCardDialog::init();
-
-    TQString file = KCARD_DEFAULTCARDDIR + KCARD_DEFAULTCARD;
-    return KGlobal::dirs()->findResourceDir("cards",file) + KCARD_DEFAULTCARDDIR;
-}
-
-TQString KCardDialog::getCardPath(const TQString &carddir, int index)
-{
-    KCardDialog::init();
-
-    TQString entry = carddir + TQString::number(index);
-    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
-        return entry + TQString::tqfromLatin1(".png");
-
-    // rather theoretical
-    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
-        return entry + TQString::tqfromLatin1(".xpm");
-
-    return TQString();
-}
-
-const TQString& KCardDialog::deck() const { return d->cDeck; }
-void KCardDialog::setDeck(const TQString& file) { d->cDeck=file; }
-const TQString& KCardDialog::cardDir() const { return d->cCardDir; }
-void KCardDialog::setCardDir(const TQString& dir) { d->cCardDir=dir; }
-KCardDialog::CardFlags KCardDialog::flags() const { return d->cFlags; }
-double KCardDialog::cardScale() const { return d->cScale; }
-bool KCardDialog::isRandomDeck() const
-{ return (d->randomDeck ? d->randomDeck->isChecked() : false); }
-bool KCardDialog::isRandomCardDir() const
-{ return (d->randomCardDir ? d->randomCardDir->isChecked() : false); }
-bool KCardDialog::isGlobalDeck() const
-{ return (d->globalDeck ? d->globalDeck->isChecked() : false); }
-bool KCardDialog::isGlobalCardDir() const
-{ return (d->globalCardDir ? d->globalCardDir->isChecked() : false); }
-
-void KCardDialog::setupDialog(bool showResizeBox)
-{
-  TQHBoxLayout* topLayout = new TQHBoxLayout(plainPage(), spacingHint());
-  TQVBoxLayout* cardLayout = new TQVBoxLayout(topLayout);
-  TQString path, file;
-  TQWMatrix m;
-  m.scale(0.8,0.8);
-
-  setInitialSize(TQSize(600,400));
-
-  if (! (flags() & NoDeck))
-  {
-    TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
-
-    // Deck iconview
-    TQGroupBox* grp1 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Backside"), plainPage());
-    tqlayout->addWidget(grp1);
-
-    d->deckIconView = new KIconView(grp1,"decks");
-    d->deckIconView->setSpacing(8);
-    /*
-    deckIconView->setGridX(-1);
-    deckIconView->setGridY(50);
-    */
-    d->deckIconView->setGridX(82);
-    d->deckIconView->setGridY(106);
-    d->deckIconView->setSelectionMode(TQIconView::Single);
-    d->deckIconView->setResizeMode(TQIconView::Adjust);
-    d->deckIconView->setMinimumWidth(360);
-    d->deckIconView->setMinimumHeight(170);
-    d->deckIconView->setWordWrapIconText(false);
-    d->deckIconView->showToolTips();
-
-    // deck select
-    TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
-    TQGroupBox* grp3 = new TQGroupBox(i18n("Backside"), plainPage());
-    grp3->setFixedSize(100, 130);
-    l->addWidget(grp3, 0, AlignTop|AlignHCenter);
-    d->deckLabel = new TQLabel(grp3);
-    d->deckLabel->setText(i18n("empty"));
-    d->deckLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
-    d->deckLabel->setGeometry(10, 20, 80, 90);
-
-    d->randomDeck = new TQCheckBox(plainPage());
-    d->randomDeck->setChecked(false);
-    connect(d->randomDeck, TQT_SIGNAL(toggled(bool)), this,
-            TQT_SLOT(slotRandomDeckToggled(bool)));
-    d->randomDeck->setText(i18n("Random backside"));
-    l->addWidget(d->randomDeck, 0, AlignTop|AlignHCenter);
-
-    d->globalDeck = new TQCheckBox(plainPage());
-    d->globalDeck->setChecked(false);
-    d->globalDeck->setText(i18n("Use global backside"));
-    l->addWidget(d->globalDeck, 0, AlignTop|AlignHCenter);
-
-    TQPushButton* b = new TQPushButton(i18n("Make Backside Global"), plainPage());
-    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalDeck()));
-    l->addWidget(b, 0, AlignTop|AlignHCenter);
-
-    connect(d->deckIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
-            this,TQT_SLOT(slotDeckClicked(TQIconViewItem *)));
-  }
-
-  if (! (flags() & NoCards))
-  {
-    // Cards iconview
-    TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
-    TQGroupBox* grp2 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Frontside"), plainPage());
-    tqlayout->addWidget(grp2);
-
-    d->cardIconView =new KIconView(grp2,"cards");
-    /*
-    cardIconView->setGridX(36);
-    cardIconView->setGridY(50);
-    */
-    d->cardIconView->setGridX(82);
-    d->cardIconView->setGridY(106);
-    d->cardIconView->setResizeMode(TQIconView::Adjust);
-    d->cardIconView->setMinimumWidth(360);
-    d->cardIconView->setMinimumHeight(170);
-    d->cardIconView->setWordWrapIconText(false);
-    d->cardIconView->showToolTips();
-
-    // Card select
-    TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
-    TQGroupBox* grp4 = new TQGroupBox(i18n("Frontside"), plainPage());
-    grp4->setFixedSize(100, 130);
-    l->addWidget(grp4, 0, AlignTop|AlignHCenter);
-    d->cardLabel = new TQLabel(grp4);
-    d->cardLabel->setText(i18n("empty"));
-    d->cardLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
-    d->cardLabel->setGeometry(10, 20, 80, 90 );
-
-    d->randomCardDir = new TQCheckBox(plainPage());
-    d->randomCardDir->setChecked(false);
-    connect(d->randomCardDir, TQT_SIGNAL(toggled(bool)), this,
-            TQT_SLOT(slotRandomCardDirToggled(bool)));
-    d->randomCardDir->setText(i18n("Random frontside"));
-    l->addWidget(d->randomCardDir, 0, AlignTop|AlignHCenter);
-
-    d->globalCardDir = new TQCheckBox(plainPage());
-    d->globalCardDir->setChecked(false);
-    d->globalCardDir->setText(i18n("Use global frontside"));
-    l->addWidget(d->globalCardDir, 0, AlignTop|AlignHCenter);
-
-    TQPushButton* b = new TQPushButton(i18n("Make Frontside Global"), plainPage());
-    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalCardDir()));
-    l->addWidget(b, 0, AlignTop|AlignHCenter);
-
-    connect(d->cardIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
-            this,TQT_SLOT(slotCardClicked(TQIconViewItem *)));
-  }
-
-  // Insert deck icons
-  // First find the default or alternate path
-  if (! (flags() & NoDeck))
-  {
-      insertDeckIcons();
-      d->deckIconView->arrangeItemsInGrid();
-
-      // Set default icons if given
-      if (!deck().isNull())
-      {
-          file=deck();
-          TQPixmap pixmap(file);
-          pixmap=pixmap.xForm(m);
-          d->deckLabel->setPixmap(pixmap);
-          TQToolTip::add(d->deckLabel,d->helpMap[file]);
-      }
-  }
-
-  // Insert card icons
-  if (! (flags() & NoCards))
-  {
-      insertCardIcons();
-      d->cardIconView->arrangeItemsInGrid();
-
-    // Set default icons if given
-    if (!cardDir().isNull())
-    {
-        file = cardDir() + KCARD_DEFAULTCARD;
-        TQPixmap pixmap(file);
-        pixmap = pixmap.xForm(m);
-        d->cardLabel->setPixmap(pixmap);
-        TQToolTip::add(d->cardLabel,d->helpMap[cardDir()]);
-    }
-  }
-
-  // insert resize box
-  if (showResizeBox)
-  {
-    // this part is a little bit...tricky.
-    // i'm sure there is a cleaner way but i cannot find it.
-    // whenever the pixmap is resized (aka scaled) the box is resized, too. This
-    // leads to an always resizing dialog which is *very* ugly. i worked around
-    // this by using a TQWidget which is the only child widget of the group box.
-    // The other widget are managed inside this TQWidget - a stretch area on the
-    // right ensures that the KIconViews are not resized...
-
-    // note that the dialog is still resized if you you scale the pixmap very
-    // large. This is desired behaviour as i don't want to make the box even
-    // larger but i want the complete pixmap to be displayed. the dialog is not
-    // resized if you make the pixmap smaller again.
-    TQVBoxLayout* tqlayout = new TQVBoxLayout(topLayout);
-    TQGroupBox* grp = new TQGroupBox(1,Qt::Horizontal, i18n("Resize Cards"), plainPage());
-    tqlayout->setResizeMode(TQLayout::Fixed);
-    tqlayout->addWidget(grp);
-    TQWidget* box = new TQWidget(grp);
-    TQHBoxLayout* hbox = new TQHBoxLayout(box, 0, spacingHint());
-    TQVBoxLayout* boxLayout = new TQVBoxLayout(hbox);
-    hbox->addStretch(0);
-
-    d->scaleSlider = new TQSlider(1, SLIDER_MAX, 1, (-1000+SLIDER_MIN+SLIDER_MAX),Qt::Horizontal, box);
-    d->scaleSlider->setMinValue(SLIDER_MIN);
-    connect(d->scaleSlider, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotCardResized(int)));
-    boxLayout->addWidget(d->scaleSlider, 0, AlignLeft);
-
-    TQPushButton* b = new TQPushButton(i18n("Default Size"), box);
-    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotDefaultSize()));
-    boxLayout->addWidget(b, 0, AlignLeft);
-
-    TQLabel* l = new TQLabel(i18n("Preview:"), box);
-    boxLayout->addWidget(l);
-    d->cPreviewPix.load(getDefaultDeck());
-    d->cPreview = new TQLabel(box);
-    boxLayout->addWidget(d->cPreview, 0, AlignCenter|AlignVCenter);
-
-    slotCardResized(d->scaleSlider->value());
-  }
-}
-
-void KCardDialog::insertCardIcons()
-{
-    TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop", false, true);
-    // kdDebug(11000) << "insert " << list.count() << endl;
-    if (list.isEmpty())
-        return;
-
-    // We shrink the icons a little
-    //
-    TQWMatrix m;
-    m.scale(0.8,0.8);
-
-    for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
-    {
-        KSimpleConfig cfg(*it);
-        cfg.setGroup(TQString::tqfromLatin1("KDE Backdeck"));
-        TQString path = (*it).left((*it).findRev('/') + 1);
-        assert(path[path.length() - 1] == '/');
-        TQPixmap pixmap(path + cfg.readEntry("Preview", "12c.png"));
-
-        if (pixmap.isNull())
-            continue;
-
-        TQString name=cfg.readEntry("Name", i18n("unnamed"));
-        TQIconViewItem *item= new TQIconViewItem(d->cardIconView, name, pixmap);
-
-        item->setDragEnabled(false);
-        item->setDropEnabled(false);
-        item->setRenameEnabled(false);
-        item->setSelectable(true);
-
-        d->cardMap[item] = path;
-        d->helpMap[path] = cfg.readEntry("Comment",name);
-    }
-}
-
-void KCardDialog::insertDeckIcons()
-{
-    TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop", false, true);
-    if (list.isEmpty())
-        return;
-
-    TQString label;
-
-    // We shrink the icons a little
-    TQWMatrix m;
-    m.scale(0.8,0.8);
-
-    for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
-    {
-        KSimpleConfig cfg(*it);
-        TQPixmap pixmap(getDeckName(*it));
-        if (pixmap.isNull())
-            continue;
-
-        // pixmap=pixmap.xForm(m);
-
-        cfg.setGroup(TQString::tqfromLatin1("KDE Cards"));
-        TQString name=cfg.readEntry("Name", i18n("unnamed"));
-        TQIconViewItem *item= new TQIconViewItem(d->deckIconView,name, pixmap);
-
-        item->setDragEnabled(false);
-        item->setDropEnabled(false);
-        item->setRenameEnabled(false);
-
-        d->deckMap[item] = getDeckName(*it);
-        d->helpMap[d->deckMap[item]] = cfg.readEntry("Comment",name);
-    }
-}
-
-
-KCardDialog::~KCardDialog()
-{
- delete d;
-}
-
-
-// Create the dialog
-KCardDialog::KCardDialog( TQWidget *parent, const char *name, CardFlags mFlags)
-    : KDialogBase( Plain, i18n("Carddeck Selection"), Ok|Cancel, Ok, parent, name, true, true)
-{
-    KCardDialog::init();
-
-    d = new KCardDialogPrivate;
-    d->cFlags = mFlags;
-}
-
-void KCardDialog::slotDeckClicked(TQIconViewItem *item)
-{
-    if (item && item->pixmap())
-    {
-        d->deckLabel->setPixmap(* (item->pixmap()));
-        TQToolTip::remove( d->deckLabel );
-        TQToolTip::add(d->deckLabel,d->helpMap[d->deckMap[item]]);
-        setDeck(d->deckMap[item]);
-    }
-}
-void KCardDialog::slotCardClicked(TQIconViewItem *item)
-{
-    if (item && item->pixmap())
-    {
-        d->cardLabel->setPixmap(* (item->pixmap()));
-        TQString path = d->cardMap[item];
-        TQToolTip::remove( d->deckLabel );
-        TQToolTip::add(d->cardLabel,d->helpMap[path]);
-        setCardDir(path);
-    }
-}
-
-TQString KCardDialog::getDeckName(const TQString &desktop)
-{
-    TQString entry = desktop.left(desktop.length() - strlen(".desktop"));
-    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
-        return entry + TQString::tqfromLatin1(".png");
-
-    // rather theoretical
-    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
-        return entry + TQString::tqfromLatin1(".xpm");
-    return TQString();
-}
-
-TQString KCardDialog::getRandomDeck()
-{
-    KCardDialog::init();
-
-    TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop");
-    if (list.isEmpty())
-        return TQString();
-
-    int d = KApplication::random() % list.count();
-    return getDeckName(*list.at(d));
-}
-
-TQString KCardDialog::getRandomCardDir()
-{
-    KCardDialog::init();
-
-    TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop");
-    if (list.isEmpty())
-        return TQString();
-
-    int d = KApplication::random() % list.count();
-    TQString entry = *list.at(d);
-    return entry.left(entry.length() - strlen("index.desktop"));
-}
-
-void KCardDialog::showRandomDeckBox(bool s)
-{
-    if (!d->randomDeck)
-	return;
-
-    if (s)
-        d->randomDeck->show();
-    else
-        d->randomDeck->hide();
-}
-
-void KCardDialog::showRandomCardDirBox(bool s)
-{
-    if (!d->randomCardDir)
-	return;
-
-    if (s)
-        d->randomCardDir->show();
-    else
-        d->randomCardDir->hide();
-}
-
-void KCardDialog::slotRandomDeckToggled(bool on)
-{
-  if (on) {
-    d->deckLabel->setText("random");
-    setDeck(getRandomDeck());
-  } else {
-    d->deckLabel->setText("empty");
-    setDeck(0);
-  }
-}
-
-void KCardDialog::slotRandomCardDirToggled(bool on)
-{
-  if (on) {
-      d->cardLabel->setText("random");
-      setCardDir(getRandomCardDir());
-      if (cardDir().length()>0 && cardDir().right(1)!=TQString::tqfromLatin1("/"))  {
-          setCardDir(cardDir() + TQString::tqfromLatin1("/"));
-      }
-  } else {
-      d->cardLabel->setText("empty");
-      setCardDir(0);
-  }
-}
-
-void KCardDialog::loadConfig(KConfig* conf)
-{
- if (!conf) {
-	return;
- }
-
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (! (flags() & NoDeck)) {
-	if (conf->hasKey(CONF_DECK)) {
-		setDeck(conf->readEntry(CONF_DECK));
-	}
-
-	bool random = conf->readBoolEntry(CONF_RANDOMDECK, false);
-	d->randomDeck->setChecked(random);
-	slotRandomDeckToggled(random);
-
-	if (conf->hasKey(CONF_USEGLOBALDECK) && conf->readBoolEntry(CONF_USEGLOBALDECK)) {
-		d->globalDeck->setChecked(true);
-	} else {
-		d->globalDeck->setChecked(false);
-	}
- }
- if (! (flags() & NoCards)) {
-	if (conf->hasKey(CONF_CARDDIR)) {
-		setCardDir(conf->readPathEntry(CONF_CARDDIR));
-	}
-
-	bool random = conf->readBoolEntry(CONF_RANDOMCARDDIR, false);
-	d->randomCardDir->setChecked(random);
-	slotRandomCardDirToggled(random);
-
-	if (conf->hasKey(CONF_USEGLOBALCARDDIR) && conf->readBoolEntry(CONF_USEGLOBALCARDDIR)) {
-		d->globalCardDir->setChecked(true);
-	} else {
-		d->globalCardDir->setChecked(false);
-	}
- }
-
- d->cScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
-
- conf->setGroup(origGroup);
-}
-
-void KCardDialog::slotCardResized(int s)
-{
- if (!d->cPreview) {
-	return;
- }
- if (s < SLIDER_MIN || s > SLIDER_MAX) {
-	kdError(11000) << "invalid scaling value!" << endl;
-	return;
- }
-
- s *= -1;
- s += (SLIDER_MIN + SLIDER_MAX);
-
- TQWMatrix m;
- double scale = (double)1000/s;
- m.scale(scale, scale);
- TQPixmap pix = d->cPreviewPix.xForm(m);
- d->cPreview->setPixmap(pix);
- d->cScale = scale;
-}
-
-void KCardDialog::slotDefaultSize()
-{
- if (!d->scaleSlider) {
-	return;
- }
- d->scaleSlider->setValue(-1000 + SLIDER_MIN + SLIDER_MAX);
-}
-
-void KCardDialog::saveConfig(KConfig* conf)
-{
- if (!conf) {
-	return;
- }
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (! (flags() & NoDeck)) {
-	conf->writeEntry(CONF_DECK, deck());
-	conf->writeEntry(CONF_RANDOMDECK, isRandomDeck());
-	conf->writeEntry(CONF_USEGLOBALDECK, d->globalDeck->isChecked());
- }
- if (! (flags() & NoCards)) {
-	conf->writePathEntry(CONF_CARDDIR, cardDir());
-	conf->writeEntry(CONF_RANDOMCARDDIR, isRandomCardDir());
-	conf->writeEntry(CONF_USEGLOBALCARDDIR, d->globalCardDir->isChecked());
- }
- conf->writeEntry(CONF_SCALE, d->cScale);
-
- conf->setGroup(origGroup);
-}
-
-void KCardDialog::slotSetGlobalDeck()
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- conf->writeEntry(CONF_GLOBAL_DECK, deck());
- conf->writeEntry(CONF_GLOBAL_RANDOMDECK, isRandomDeck());
-
- delete conf;
-}
-
-void KCardDialog::slotSetGlobalCardDir()
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- conf->writePathEntry(CONF_GLOBAL_CARDDIR, cardDir());
- conf->writeEntry(CONF_GLOBAL_RANDOMCARDDIR, isRandomCardDir());
-
- delete conf;
-}
-
-void KCardDialog::getGlobalDeck(TQString& deck, bool& random)
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- if (!conf->hasKey(CONF_GLOBAL_DECK) || conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false)) {
-	deck = getRandomDeck();
-	random = true;
- } else {
-	deck = conf->readEntry(CONF_GLOBAL_DECK);
-	random = conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false);
- }
-
- delete conf;
-}
-
-void KCardDialog::getGlobalCardDir(TQString& dir, bool& random)
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- if (!conf->hasKey(CONF_GLOBAL_CARDDIR) || conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false)) {
-	dir = getRandomCardDir();
-	random = true;
- } else {
-	dir = conf->readPathEntry(CONF_GLOBAL_CARDDIR);
-	random = conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false);
- }
-
- delete conf;
-}
-
-void KCardDialog::init()
-{
-    static bool _inited = false;
-    if (_inited)
-        return;
-    KGlobal::dirs()->addResourceType("cards", KStandardDirs::kde_default("data") + TQString::tqfromLatin1("carddecks/"));
-
-    KGlobal::locale()->insertCatalogue("libtdegames");
-    _inited = true;
-}
-
-#include "kcarddialog.moc"
diff --git a/libkdegames/kcarddialog.h b/libkdegames/kcarddialog.h
deleted file mode 100644
index c3a0f018..00000000
--- a/libkdegames/kcarddialog.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2000 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCARDDIALOG_H_
-#define __KCARDDIALOG_H_
-
-#include <tqstring.h>
-#include <kdialogbase.h>
-#include <tqmap.h> // TODO: remove - it is in kcarddialog.cpp now; left here for source compatibility
-
-#include <kdemacros.h>
-class TQIconViewItem;
-
-class KConfig;
-
-class KCardDialogPrivate;
-
-/**
- * @short A carddeck selection dialog for card games.
- *
- * The KCardDialog provides a dialog for interactive carddeck selection.
- * It gives cardgames an easy to use interface to select front and
- * back of the card sets. As card sets the KDE default cardsets are
- * offered as well as used specified ones.
- *
- * In most cases, the simplest
- * use of this class is the static method KCardDialog::getCardDeck,
- * which pops up the dialog, allows the user to select a carddeck, and
- * returns when the dialog is closed. Only if you really need some specific
- * behaviour or if you overwrite the dialog you need all the other access
- * functions.
- *
- * Example:
- *
- * \code
- *      TQString deck,card;
- *      int result = KCardDialog::getCardDeck(deck,card );
- *      if ( result == KCardDialog::Accepted )
- *            ...
- * \endcode
- *
- * Here you can see a card dialog in action
- * @image html "kcarddialog.png" KCarddialog
- *
- * KCardDialog::getCardDeck takes a lot of different parameters which are
- * probably very useful. You can e.g. use the parameters randomDeck and
- * randomCardDir to give the end-user the ability to choose a random
- * deck/carddir. You have to save the value of those parameters in your config
- * file - that's why the parameters are needed. 
- *
- * You can also provide a KConfig pointer (usually kapp->config()). This
- * pointer is used to store information about the dialog in an own group
- * ("KCardDailog"). 
- * So you can just ignore the randomCardDir and randomDeck
- * values and call KCardDialog::getConfigCardDeck instead. The only reson
- * for this function is to read a previously written configuration and give you
- * the information about it. This way you don't have to save any configuration
- * on your own - KCardDialog does this for you.
- *
- * Another Parameter for KCardDialog::getCardDeck is scale. This pointer
- * to a double variable contains the scaling factor the user has chosen in the
- * dialog (the scale box won't be shown if you don't provide this parameter).
- * You might want to check out TQPixmap::xFrom which gives you access to
- * scaling. You can e.g. use
- * \code
- * TQWMatrix m;
- * m.scale(s,s);
- * pixmap.xForm(m);
- * \endcode
- * to scale your pixmap.
- *
- * @author Martin Heni <martin@heni-online.de>
- * @version $Id$
- */
-class KDE_EXPORT KCardDialog : public KDialogBase
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-
-  /**
-   *  @li @p Both - both are shown
-   *  @li @p NoDeck - The deck (back) selection is not shown
-   *  @li @p NoCards - The cards (front) selection is not shown
-   */
-   enum CardFlags { Both=0, NoDeck=0x01, NoCards=0x02 };
-
-   /**
-   * Constructs a card deck selection dialog.
-   *
-   * @param parent The parent widget of the dialog, if any.
-   * @param name The name of the dialog.
-   * @param flags Specifies whether the dialog is modal or not.
-   */
-   KCardDialog (TQWidget* parent = NULL,const char* name = NULL,
-                CardFlags flags = Both);
-   /**
-   * Destructs a card deck selection dialog.
-   */
-   ~KCardDialog();
-
-   /**
-   * Creates a modal carddeck dialog, lets the user choose a deck,
-   * and returns when the dialog is closed.
-   *
-   * @param deck a reference to the filename used as backside of the
-   *        cards. It is an absolute path and can directly be loaded as
-   *        pixmap.
-   *
-   * @param carddir a reference to the directory name used as front of the
-   *        cards. The directory contains the card images as 1.png to 52.png
-   *
-   * @param parent an optional pointer to the parent window of the dialog
-   *
-   * @param flags what to show
-   *
-   * @param randomDeck if this pointer is non-zero, *ok is set to TRUE if
-   *        the user wants a random deck otherwise to FALSE. Use this in the
-   *        config file of your game to load a random deck on startup.
-   *        See @ref getRandomDeck()
-   *
-   * @param randomCardDir if this pointer is non-zero, *ok is set to TRUE if
-   *        the user wants a random card otherwise to FALSE.
-   *        Use this in the config file of your game to load a random card
-   *        foregrounds on startup.
-   *        See @ref getRandomCardDir()
-   *
-   * @param scale If non-zero a box is shown which provides the possibility to
-   *        change the size of the cards. The desired scaling factor is returned to the
-   *        game in this variable.
-   *
-   * @param conf If non-zero KCardDialog reads the initial settings for 
-   *        this dialog from the applications config file and stores them there
-   *        when the dialog is closed. You can just use getConfigCardDeck
-   *        to get the deck/carddir the user selected before. Note that the 
-   *        parameters randomDeck and randomCardDir overwrite the initial settings from the
-   *        config file.
-   *
-   * @return TQDialog::result().
-   */
-   static int getCardDeck(TQString &deck,TQString &carddir, TQWidget *parent=0,
-                          CardFlags flags=Both, bool* randomDeck=0,
-                          bool* randomCardDir=0, double* scale=0, KConfig* conf=0);
-
-   /**
-    * Read the configuration from the applications rc file and put the
-    * previously chosen deck/frontside in the parameter deck and carddir.
-    *
-    * You probably want to use this function on startup of your program so that
-    * the user gets exactly the card/frontside he/she chose before. Note that
-    * you don't have to care whether the user wants to get a random carddeck or
-    * not as this function takes care of this.
-    * @param conf The config file to read from
-    * @param deck This will contain the chosen deck from the config file (or a
-    * random deck if this is desired according to the config)
-    * @param cardDir This will contain the chosen cardDir from the config file (or a
-    * random cardDir if this is desired according to the config)
-    * @param scale The scaling factor (usually 1)
-    **/
-   static void getConfigCardDeck(KConfig* conf, TQString& deck, TQString& cardDir, double& scale);
-
-   /**
-   * Returns the default path to the card deck backsides. You want
-   * to use this usually before the user used the card dialog the first
-   * time to get a default deck. You can assume that
-   * \code
-   *   getDefaultDeckPath()
-   * \endcode
-   * is a valid deck.
-   *
-   * @return The default path
-   */
-   static TQString getDefaultDeck();
-
-   /**
-   * Returns the default path to the card frontsides. You want
-   * to use this usually before the user used the card dialog the first
-   * time to get an default deck. You can assume that
-   * \code
-   *   getCardPath(getDefaultCardPath(), *)
-   * \endcode
-   * are valid cards for * from 1 to 52.
-   *
-   * @return returns the path to the card directory
-   */
-   static TQString getDefaultCardDir();
-
-    /**
-    * Returns the path to the card frontside specified in dir carddir
-    *
-    * @param index the card to open
-    * @param carddir The carddir which's path shall be searched for
-    * @return returns the path to the card
-    */
-    static TQString getCardPath(const TQString &carddir, int index);
-
-   /**
-    * Returns a random deck in deckPath()
-    * @return A random deck
-    **/
-    static TQString getRandomDeck();
-
-   /**
-    * Returns a random directory of cards
-    * @return A random card dir
-    **/
-    static TQString getRandomCardDir();
-
-   /**
-    * Show or hides the "random backside" checkbox
-    * @param s Shows the checkbox if true otherwise hides it
-    **/
-   void showRandomDeckBox(bool s);
-
-   /**
-    * Show or hides the "random foreside" checkbox
-    * @param s Shows the checkbox if true otherwise hides it
-    **/
-   void showRandomCardDirBox(bool s);
-
-   /**
-   * Returns the chosen deck, which is a valid path to a imagefile.
-   *
-   * @return The deck
-   */
-   const TQString& deck() const;
-
-   /**
-   * Sets the default deck.
-   * @param file The full path to an image file
-   */
-   void setDeck(const TQString& file);
-
-   /**
-   * @return The chosen card directory
-   */
-   const TQString& cardDir() const;
-
-   /**
-   * Sets the default card directory.
-   * @param dir The full path to an card directory
-   */
-   void setCardDir(const TQString& dir);
-
-   /**
-   * @return the flags set to the dialog
-   */
-   CardFlags flags() const;
-
-   /**
-   * Creates the default widgets in the dialog. Must be called after
-   * all flags are set. This is only needed if you do NOT use the
-   * getCardDeck static function which provides all calls for you.
-   */
-   void setupDialog(bool showResizeBox = false);
-
-   /**
-    * @return TRUE if the selected deck is a random deck (i.e. the user checked
-    * the random checkbox) otherwise FALSE
-    **/
-   bool isRandomDeck() const;
-
-   /**
-    * @return TRUE if the selected carddir is a random dir (i.e. the user
-    * checked the random checkbox) otherwise FALSE
-    **/
-   bool isRandomCardDir() const;
-
-   /**
-    * @return TRUE if the global checkbox was selected
-    **/
-   bool isGlobalDeck() const;
-
-   /**
-    * @return TRUE if the global checkbox was selected
-    **/
-   bool isGlobalCardDir() const;
-
-   /**
-    * @return The scaling factor of the card pixmap
-    **/
-   double cardScale() const;
-
-   /**
-    * Load the default settings into the dialog (e.g. whether the "use random
-    * deck" checkbox is checked or not).
-    **/
-   void loadConfig(KConfig* conf);
-
-   /**
-    * Saves the KCardDialog config into a config file. This should be the
-    * applications config file - KCardDialog creates an own group
-    * ("KCardDialog"). These settings are used by @ref loadConfig and @ref
-    * getConfigCardDeck.
-    **/
-   void saveConfig(KConfig* conf);
-
-
-protected:
-    void insertCardIcons();
-    void insertDeckIcons();
-
-    static void getGlobalDeck(TQString& cardDir, bool& random);
-    static void getGlobalCardDir(TQString& deck, bool& random);
-
-    static TQString getDeckName(const TQString& desktop);
-
-    /**
-     * @return the groupname used by functions like @ref saveConfig and @ref
-     * loadConfig.
-     **/
-    static TQString group();
-
-protected slots:
-   void slotDeckClicked(TQIconViewItem *);
-   void slotCardClicked(TQIconViewItem *);
-   void slotRandomCardDirToggled(bool on);
-   void slotRandomDeckToggled(bool on);
-   void slotCardResized(int);
-   void slotDefaultSize();
-   void slotSetGlobalDeck();
-   void slotSetGlobalCardDir();
-
-private:
-   static void init();
-
-   KCardDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kcarddialog.png b/libkdegames/kcarddialog.png
deleted file mode 100644
index 3446c461..00000000
Binary files a/libkdegames/kcarddialog.png and /dev/null differ
diff --git a/libkdegames/kchat.cpp b/libkdegames/kchat.cpp
deleted file mode 100644
index 2a9c3913..00000000
--- a/libkdegames/kchat.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include <klocale.h>
-#include <kdebug.h>
-
-#include "kchat.h"
-
-class KChatPrivate
-{
-public:
-	KChatPrivate()
-	{
-	}
-
-	bool mAutoAddMessages;
-
-	TQMap<int, TQString> mPlayerMap;
-	int mPlayerId;
-	int mFromId;
-};
-
-KChat::KChat(TQWidget* parent, bool twoPlayerGame) : KChatBase(parent, twoPlayerGame)
-{
- init(); 
-}
-
-KChat::~KChat()
-{
- kdDebug(11000) << "DESTRUCT KChat " << this << endl;
- delete d;
-}
-
-void KChat::init()
-{
- kdDebug(11001) << "INIT KChat " << this << endl;
- d = new KChatPrivate;
- d->mAutoAddMessages = true;
- d->mPlayerId = 1;
- d->mFromId = 1;
-}
-
-void KChat::setFromNickname(const TQString& n)
-{ d->mFromId = addPlayer(n); }
-const TQString& KChat::fromName() const
-{ return player(fromId()); }
-void KChat::setAutoAddMessages(bool add) 
-{ d->mAutoAddMessages = add; }
-bool KChat::autoAddMessages() const 
-{ return d->mAutoAddMessages; }
-int KChat::uniqueId()
-{ return d->mPlayerId++; }
-int KChat::fromId() const
-{ return d->mFromId; }
-const TQString& KChat::player(int id) const
-{ return d->mPlayerMap[id]; }
-
-void KChat::returnPressed(const TQString& text)
-{
- int id = fromId();
- if (id < 0) {
-	// don't return - just display "unknown" as name
-	kdWarning(11000) << "KChat: no fromNickname has been set!" << endl;
- }
- emit signalSendMessage(id, text);
- if (autoAddMessages()) {
-	TQString p = player(id);
-	if (p.isNull()) {
-		p = i18n("Unknown");
-	}
-	kdDebug(11000) << "auto adding message from player " << p << " ;id=" << id << endl;
-	addMessage(p, text);
- }
-}
-
-int KChat::addPlayer(const TQString& nickname)
-{
- int id = uniqueId();
- d->mPlayerMap.insert(id, nickname);
- return id;
-}
-
-void KChat::removePlayer(int id)
-{
- d->mPlayerMap.remove(id);
-}
-
-void KChat::removePlayer(const TQString& nickname)
-{
- TQMap<int, TQString>::Iterator it;
- for (it = d->mPlayerMap.begin(); it != d->mPlayerMap.end(); ++it) {
-	if (it.data() == nickname) {
-		d->mPlayerMap.remove(it);
-	}
- }
-}
-
-
-#include "kchat.moc"
diff --git a/libkdegames/kchat.h b/libkdegames/kchat.h
deleted file mode 100644
index f6867c68..00000000
--- a/libkdegames/kchat.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCHAT_H__
-#define __KCHAT_H__
-
-#include <tqstring.h>
-
-#include "kchatbase.h"
-#include <kdemacros.h>
-
-class KChatPrivate;
-
-/**
- * @short A chat widget for non-KGame games
- *
- * Docu is TODO
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KChat : public KChatBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	/**
-	 * @param parent The parent widget for this widget.
-	 * @param twoPlayerGame If true the combo box where the player can
-	 * choose to send to a single player or to all players will not be added
-	 * as you will hardly need it in 2-player games.
-	 **/
-	KChat(TQWidget* parent, bool twoPlayerGame = false);
-
-	virtual ~KChat();
-
-	/**
-	 * Equivalent to player(fromId())
-	 * @return The name that will be shown for messages from this widget.
-	 * That is the string from @ref setFromNickname
-	 **/
-	virtual const TQString& fromName() const;
-
-	/**
-	 * This sets the name that will be shown on all chat widgets if this
-	 * widget sends a message. See signalSendMessage
-	 * @param name The name of the player owning this widget
-	 **/
-	void setFromNickname(const TQString& name);
-
-//	TODO:
-//	void setPlayerList(TQIntDict<TQString>);// use this for non-KGame use
-
-	/**
-	 * Adds a player nickname.
-	 * @return The unique ID of the player
-	 **/
-	int addPlayer(const TQString& nick);
-
-	/**
-	 * Removes all players with this nickname. Better don't use this as it
-	 * will remove *all* players with this nickname. Save the id instead and
-	 * call removePlayer(id)
-	 * @param nick The nickname of the removed players
-	 **/
-	void removePlayer(const TQString& nick);
-
-	/**
-	 * Removes the player with this id, as returned by @ref addPlayer
-	 * @param id The id of the player to be removed
-	 **/
-	void removePlayer(int id);
-
-
-	/**
-	 * @return true if the messages which will be sent from here will be
-	 * added automatically using @ref KChatBase::addMessage. See also @ref
-	 * setAutoAddMessages
-	 **/
-	bool autoAddMessages() const;
-
-	/**
-	 * Usually the messages which will be sent from here (see @ref
-	 * signalSendMessage) are added autmatically to this widget. But under
-	 * some circumstances that would be very unhandy. So you can deactivate
-	 * this behaviour here and call @ref KChatBase::addMessage yourself
-	 * @param add If true (default) messages sent from here will be added
-	 * automatically. Otherwise you will have to add them yourself
-	 **/
-	void setAutoAddMessages(bool add);
-
-	/**
-	 * @return The nickname of the player which belongs to this id
-	 **/
-	const TQString& player(int id) const;
-
-	/**
-	 * @return The ID that belongs to the local player. 
-	 * @see setFromNickname
-	 **/
-	int fromId() const;
-	
-
-signals:
-	/**
-	 * This signal is emitted when the player wants to send a message.
-	 *
-	 * The message is added automatically using @ref KChatBase::addMessage if @ref
-	 * autoAddMessages is enabled.
-	 * @param id The id of the player who sends the message - see
-	 * setFromNickname and player
-	 * @param msg The message itself
-	 **/
-	void signalSendMessage(int id, const TQString& msg);
-	
-protected:
-	/**
-	 * This emits @ref signalSendMessage and, if @ref autoAddMessages is
-	 * true, calls @ref KChatBase::addMessage
-	 **/
-	virtual void returnPressed(const TQString&);
-
-	/**
-	 * The Id of the next player. Incremented after every call.
-	 **/
-	int uniqueId();
-
-private:
-	void init();
-
-	KChatPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kchatbase.cpp b/libkdegames/kchatbase.cpp
deleted file mode 100644
index 14f74103..00000000
--- a/libkdegames/kchatbase.cpp
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kchatbase.h"
-
-#include <klineedit.h>
-#include <klocale.h>
-#include <kstandarddirs.h>
-#include <kconfig.h>
-#include <kapplication.h>
-#include <kdebug.h>
-
-#include <tqlayout.h>
-#include <tqcombobox.h>
-#include <tqpainter.h>
-
-class KChatBaseTextPrivate
-{
-public:
-	KChatBaseTextPrivate()
-	{
-		mNameFont = 0;
-		mMessageFont = 0;
-	}
-
-	TQString mName;
-	TQString mMessage;
-
-	const TQFont* mNameFont;
-	const TQFont* mMessageFont;
-};
-
-
-KChatBaseText::KChatBaseText(const TQString& name, const TQString& message) : TQListBoxText()
-{
- init();
- setName(name);
- setMessage(message);
-}
-
-KChatBaseText::KChatBaseText(const TQString& message) : TQListBoxText()
-{
- init();
- setMessage(message);
-}
-
-KChatBaseText::~KChatBaseText()
-{ 
- delete d;
-}
-
-void KChatBaseText::init()
-{
- d = new KChatBaseTextPrivate;
-}
-
-void KChatBaseText::setName(const TQString& n)
-{
-// d->mName = n;
- d->mName = TQString("%1: ").tqarg(n);
- setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
-}
-
-void KChatBaseText::setMessage(const TQString& m)
-{
- d->mMessage = m;
- setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
-}
-
-const TQString& KChatBaseText::name() const
-{ return d->mName; }
-
-const TQString& KChatBaseText::message() const
-{ return d->mMessage; }
-
-TQFont KChatBaseText::nameFont() const
-{
- if (d->mNameFont) {
-	return *d->mNameFont; 
- } else if (listBox()) {
-	return listBox()->font();
- } else {
-	return TQFont();
- }
-}
-
-TQFont KChatBaseText::messageFont() const
-{
- if (d->mMessageFont) {
-	return *d->mMessageFont; 
- } else if (listBox()) {
-	return listBox()->font();
- } else {
-	return TQFont();
- }
-}
-
-void KChatBaseText::setNameFont(const TQFont* f)
-{ d->mNameFont = f; }
-
-void KChatBaseText::setMessageFont(const TQFont* f)
-{ d->mMessageFont = f; }
-
-void KChatBaseText::paint(TQPainter* painter)
-{
- TQFontMetrics fm = painter->fontMetrics();
- painter->setFont(nameFont());
- painter->drawText(3, fm.ascent() + fm.leading()/2, name());
- painter->setFont(messageFont());
- painter->drawText(3 + TQFontMetrics(nameFont()).width(name()), fm.ascent() + fm.leading()/2, message());
-}
-
-int KChatBaseText::width(TQListBox* lb) const
-{
- int w = 0;
- if (lb) {
-	w += 6;
-	w += TQFontMetrics(nameFont()).width(name());
-	w += TQFontMetrics(messageFont()).width(message());
- }
-// int w = lb ? lb->fontMetrics().width( text() ) + 6 : 0; // QT orig
- return TQMAX(w, TQApplication::globalStrut().width());
-}
-
-int KChatBaseText::height(TQListBox* lb) const
-{
- int h = 0;
- if (lb) {
-	h += 2;
-	// AB: is lineSpacing still correct?
-	if (TQFontMetrics(nameFont()).lineSpacing() > TQFontMetrics(messageFont()).lineSpacing()) { 
-		h += TQFontMetrics(nameFont()).lineSpacing();
-	} else {
-		h += TQFontMetrics(messageFont()).lineSpacing();
-	}
- }
-// int h = lb ? lb->fontMetrics().lineSpacing() + 2 : 0; // QT orig
- return TQMAX(h, TQApplication::globalStrut().height());
-}
-
-
-
-class KChatBasePrivate
-{
-public:
-	KChatBasePrivate() 
-	{ 
-		mBox = 0;
-		mEdit = 0;
-		mCombo = 0;
-
-		mAcceptMessage = true;
-		mMaxItems = -1;
-	}
-	TQListBox* mBox;
-	KLineEdit* mEdit;
-	TQComboBox* mCombo;
-	bool mAcceptMessage;
-	int mMaxItems;
-
-	TQValueList<int> mIndex2Id;
-
-	TQFont mNameFont;
-	TQFont mMessageFont;
-	TQFont mSystemNameFont;
-	TQFont mSystemMessageFont;
-};
-
-KChatBase::KChatBase(TQWidget* parent, bool noComboBox) : TQFrame(parent)
-{
- init(noComboBox); 
-}
-
-KChatBase::~KChatBase()
-{
-// kdDebug(11000) << "KChatBase: DESTRUCT (" << this << ")" << endl;
- saveConfig();
- delete d;
-}
-
-void KChatBase::init(bool noComboBox)
-{
-// kdDebug(11000) << "KChatBase: INIT (" << this << ")" << endl;
-
- d = new KChatBasePrivate;
-
- setMinimumWidth(100);
- setMinimumHeight(150);
- 
- TQVBoxLayout* l = new TQVBoxLayout(this);
-
- d->mBox = new TQListBox(this);
- connect(d->mBox, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)), 
-		this, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)));
- l->addWidget(d->mBox);
- d->mBox->setVScrollBarMode(TQScrollView::AlwaysOn);
- d->mBox->setHScrollBarMode(TQScrollView::AlwaysOff);
- d->mBox->setFocusPolicy(TQ_NoFocus);
-// d->mBox->setSelectionMode(TQListBox::NoSelection);
- d->mBox->setSelectionMode(TQListBox::Single);
-
- l->addSpacing(5);
-
- TQHBoxLayout* h = new TQHBoxLayout(l);
- d->mEdit = new KLineEdit(this);
- d->mEdit->setHandleSignals(false);
- d->mEdit->setTrapReturnKey(true);
- d->mEdit->completionObject(); // add the completion object
- d->mEdit->setCompletionMode(KGlobalSettings::CompletionNone);
- connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), this, TQT_SLOT(slotReturnPressed(const TQString&)));
- h->addWidget(d->mEdit);
-
- if (!noComboBox) {
-	d->mCombo = new TQComboBox(this);
-	h->addWidget(d->mCombo);
-	addSendingEntry(i18n("Send to All Players"), SendToAll);//FIXME: where to put the id?
- }
-
- d->mAcceptMessage = true; // by default
- setMaxItems(-1); // unlimited
-
- if (kapp) {
-	// kapp might be NULL as well - in case we are in TQt designer.
-	readConfig();
- }
-}
-
-bool KChatBase::acceptMessage() const
-{ return d->mAcceptMessage; }
-
-void KChatBase::setAcceptMessage(bool a)
-{ d->mAcceptMessage = a; }
-
-bool KChatBase::addSendingEntry(const TQString& text, int id)
-{
-//FIXME: is ID used correctly? 
-// do we need ID at all? 
-// what the hell should be here?
-// d->mCombo->insertItem(i18n("Send to All Players"), SendToAll);
- return insertSendingEntry(text, id);
-}
-
-bool KChatBase::insertSendingEntry(const TQString& text, int id, int index)
-{
- if (!d->mCombo) {
-	kdWarning(11000) << "KChatBase: Cannot add an entry to the combo box" << endl;
-	return false;
- }
- if (d->mIndex2Id.findIndex(id) != -1) {
-	kdError(11000) << "KChatBase: Cannot add more than one entry with the same ID! " << endl;
-	kdError(11000) << "KChatBase: Text="<<text<<endl;
-	return false;
- }
- d->mCombo->insertItem(text, index);
- if (index < 0) {
-	d->mIndex2Id.append(id);
- } else {
-	d->mIndex2Id.insert(d->mIndex2Id.at(index), id);
- }
- if (d->mIndex2Id.count() != (uint)d->mCombo->count()) {
-	kdError(11000) << "KChatBase: internal ERROR - local IDs do not match combo box entries!" << endl;
- }
- return true;
-}
-
-int KChatBase::sendingEntry() const
-{
- if (!d->mCombo) {
-	kdWarning(11001) << "Cannot retrieve index from NULL combo box" << endl;
-	return -1;
- }
- int index = d->mCombo->currentItem();
- if (d->mIndex2Id.at(index) == d->mIndex2Id.end()) {
-	kdWarning(11000) << "could not find the selected sending entry!" << endl;
-	return -1;
- }
- return d->mIndex2Id[index];
-}
-
-void KChatBase::removeSendingEntry(int id)
-{
- if (!d->mCombo) {
-	kdWarning(11000) << "KChatBase: Cannot remove an entry from the combo box" << endl;
-	return;
- }
- d->mCombo->removeItem(findIndex(id));
- d->mIndex2Id.remove(id);
-}
-
-void KChatBase::changeSendingEntry(const TQString& text, int id)
-{
- if (!d->mCombo) {
-	kdWarning(11000) << "KChatBase: Cannot change an entry in the combo box" << endl;
-	return;
- }
- int index = findIndex(id);
- d->mCombo->changeItem(text, index);
-}
-
-void KChatBase::setSendingEntry(int id)
-{
- if (!d->mCombo) {
-	kdWarning(11000) << "KChatBase: Cannot set an entry in the combo box" << endl;
-	return;
- }
- d->mCombo->setCurrentItem(findIndex(id));
-}
- 
-int KChatBase::findIndex(int id) const
-{
- return d->mIndex2Id.findIndex(id);
-}
-
-int KChatBase::nextId() const
-{
- int i = SendToAll + 1;
- while (d->mIndex2Id.findIndex(i) != -1) {
-	i++;
- }
- return i;
-}
-
-void KChatBase::addItem(const TQListBoxItem* text)
-{
- d->mBox->insertItem(text); 
- int index = d->mBox->count() -1;
- d->mBox->setBottomItem(index);//FIXME: don't scroll to bottom if user scrolled down manually
- if (maxItems() >= 0 && d->mBox->count() > (unsigned int)maxItems()) {
-	d->mBox->removeItem(0);
- }
-}
-
-void KChatBase::addMessage(const TQString& fromName, const TQString& text)
-{
-//maybe "%1 says: %2" or so
- addItem(layoutMessage(fromName, text));
-}
-
-void KChatBase::addSystemMessage(const TQString& fromName, const TQString& text)
-{
- addItem(layoutSystemMessage(fromName, text));
-}
-
-TQListBoxItem* KChatBase::layoutMessage(const TQString& fromName, const TQString& text)
-{
- //TODO: KChatBaseConfigure? - e.g. color
- TQListBoxItem* message;
- if (text.startsWith("/me ")) {
-	// replace "/me" by a nice star. leave one space after the star
-	TQPixmap pix;
-	pix.load(locate("data", TQString::tqfromLatin1("tdegames/pics/star.png")));
-	
-	//TODO KChatBasePixmap? Should change the font here!
-	
-	message = (TQListBoxItem*)new TQListBoxPixmap(pix, i18n("%1 %2").tqarg(fromName).tqarg(text.mid(3)));
- } else {
-	// the text is not edited in any way. just return an item
-	KChatBaseText* m = new KChatBaseText(fromName, text);
-	m->setNameFont(&d->mNameFont);
-	m->setMessageFont(&d->mMessageFont);
-	message = (TQListBoxItem*)m;
- }
- return message;
-}
-
-TQListBoxItem* KChatBase::layoutSystemMessage(const TQString& fromName, const TQString& text)
-{
- //TODO: KChatBaseConfigure? - e.g. color
-
- // no need to check for /me etc.
- KChatBaseText* m = new KChatBaseText(i18n("--- %1").tqarg(fromName), text);
- m->setNameFont(&d->mSystemNameFont);
- m->setMessageFont(&d->mSystemMessageFont);
- return (TQListBoxItem*)m;
-}
-
-void KChatBase::slotReturnPressed(const TQString& text)
-{
- if (text.length() <= 0) {
-	// no text entered - probably hit return by accident
-	return;
- } else if (!acceptMessage()) {
-	return;
- }
- d->mEdit->completionObject()->addItem(text);
-// connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), comp, TQT_SLOT(addItem(const TQString&)));
- d->mEdit->clear();
- returnPressed(text);
-}
-
-TQString KChatBase::comboBoxItem(const TQString& name) const
-{ // TODO: such a function for "send to all" and "send to my group"
- return i18n("Send to %1").tqarg(name);
-}
-
-void KChatBase::slotClear()
-{
- d->mBox->clear();
-}
-
-void KChatBase::setCompletionMode(KGlobalSettings::Completion mode)
-{ d->mEdit->setCompletionMode(mode); }
-
-void KChatBase::setNameFont(const TQFont& font)
-{
- d->mNameFont = font; 
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setMessageFont(const TQFont& font)
-{
- d->mMessageFont = font; 
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setBothFont(const TQFont& font)
-{
- setNameFont(font);
- setMessageFont(font);
-}
-
-const TQFont& KChatBase::nameFont() const
-{ return d->mNameFont; }
-
-const TQFont& KChatBase::messageFont() const
-{ return d->mMessageFont; }
-
-void KChatBase::setSystemNameFont(const TQFont& font)
-{
- d->mSystemNameFont = font; 
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setSystemMessageFont(const TQFont& font)
-{
- d->mSystemMessageFont = font; 
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setSystemBothFont(const TQFont& font)
-{
- setSystemNameFont(font);
- setSystemMessageFont(font);
-}
-
-const TQFont& KChatBase::systemNameFont() const
-{ return d->mSystemNameFont; }
-
-const TQFont& KChatBase::systemMessageFont() const
-{ return d->mSystemMessageFont; }
-
-void KChatBase::saveConfig(KConfig* conf)
-{
- TQString oldGroup;
- if (!conf) {
-	conf = kapp->config();
-	oldGroup = conf->group();
-	conf->setGroup("KChatBase");
- }
-
- conf->writeEntry("NameFont", nameFont());
- conf->writeEntry("MessageFont", messageFont());
- conf->writeEntry("SystemNameFont", systemNameFont());
- conf->writeEntry("SystemMessageFont", systemMessageFont());
- conf->writeEntry("MaxMessages", maxItems());
-
- if (!oldGroup.isNull()) {
-	conf->setGroup(oldGroup);
- }
-}
-
-void KChatBase::readConfig(KConfig* conf)
-{
- TQString oldGroup;
- if (!conf) {
-	conf = kapp->config();
-	oldGroup = conf->group();
-	conf->setGroup("KChatBase");
- }
-
- setNameFont(conf->readFontEntry("NameFont"));
- setMessageFont(conf->readFontEntry("MessageFont"));
- setSystemNameFont(conf->readFontEntry("SystemNameFont"));
- setSystemMessageFont(conf->readFontEntry("SystemMessageFont"));
- setMaxItems(conf->readNumEntry("MaxMessages", -1));
-
- if (!oldGroup.isNull()) {
-	conf->setGroup(oldGroup);
- }
-}
-
-void KChatBase::clear()
-{
- d->mBox->clear();
-}
-
-void KChatBase::setMaxItems(int maxItems)
-{
- d->mMaxItems = maxItems;
- //TODO cut too many messages
- if (maxItems == 0) {
-	clear();
- } else if (maxItems > 0) {
-	while (d->mBox->count() > (unsigned int)maxItems) {
-		d->mBox->removeItem(0);
-	}
- }
-}
-
-int KChatBase::maxItems() const
-{ return d->mMaxItems; }
-
-
-#include "kchatbase.moc"
diff --git a/libkdegames/kchatbase.h b/libkdegames/kchatbase.h
deleted file mode 100644
index 892e5859..00000000
--- a/libkdegames/kchatbase.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCHATBASE_H__
-#define __KCHATBASE_H__
-
-#include <tqframe.h>
-#include <tqstring.h>
-#include <tqlistbox.h>
-
-#include <kglobalsettings.h>
-#include <kdemacros.h>
-class TQListBoxItem;
-
-class KConfig;
-
-
-class KChatBaseTextPrivate;
-
-/**
- * A TQListBoxText implementation for KChatBase.
- *
- * It supports different colors, text fonts, ...
- *
- * A KChatBaseText consists of two text items: first the player part then the
- * text part. This honors KChatBase::addMessage which also uses both. 
- * You can leave the player part out if you don't need it - there won't be any
- * difference. 
- *
- * You can set different colors and fonts for both parts. In the future there
- * will probably some kind of KChatBaseDialog which offers the user the ability
- * to configure things like color and font on the fly.
- **/
-class KChatBaseText : public TQListBoxText
-{
-public:
-
-	/**
-	 * Constructs a KChatBaseText object with the player and text part
-	 **/
-	KChatBaseText(const TQString& player, const TQString& text);
-	
-	/**
-	 * Constructs a KChatBaseText object without player part
-	 **/
-	KChatBaseText(const TQString& text);
-	
-	/**
-	 * Destruct a KChatBaseText object.
-	 **/
-	virtual ~KChatBaseText();
-
-	/**
-	 * Set the name part of a message. A message is usually shown like
-	 * "name: text" and you can change both parts independently.
-	 * 
-	 * @see setMessage
-	 * @param name The name of the sender (e.g. the player)
-	 **/
-	void setName(const TQString& name);
-
-	/**
-	 * Set the text part of a message. A message is usually shown like
-	 * "name: message" and you can change both parts independently.
-	 * 
-	 * See also setName
-	 * @param message The message that has been sent
-	 **/
-	void setMessage(const TQString& message);
-
-	/**
-	 * @return The name part of a message. 
-	 * @see setName
-	 **/
-	const TQString& name() const;
-
-	/**
-	 * @return The message text. 
-	 * @see setMessage
-	 **/
-	const TQString& message() const;
-
-	/**
-	 * You can set the font of the sender name independently of the message
-	 * itself. This font is used as the "name: " part of the message.
-	 * @return The font that is used for the name
-	 **/
-	TQFont nameFont() const;
-
-	/**
-	 * You can set the font of the message independently of the sender name.
-	 * This font is used as the text part of the message.
-	 * @return The font thaz is used for message text
-	 **/
-	TQFont messageFont() const;
-
-	/**
-	 * Set the font for the name. 
-	 * @see nameFont
-	 * @param font A pointer to the name font. Only the pointer is stored so
-	 * don't delete the object. This way there is only one object for a lot
-	 * of messages in memory.
-	 **/
-	void setNameFont(const TQFont* font);
-
-	/**
-	 * Set the font for the message text.
-	 * @see messageFont
-	 * @param font A pointer to the message font. Only the pointer is stored so
-	 * don't delete the object! This way there is only one object for a lot
-	 * of messages in memory.
-	 **/
-	void setMessageFont(const TQFont* font);
-
-	/**
-	 **/
-	virtual int width(TQListBox* ) const;
-
-	/**
-	 **/
-	virtual int height(TQListBox* ) const;
-
-protected:
-	/**
-	 **/
-	virtual void paint(TQPainter*);
-
-private:
-	void init();
-
-private:
-	KChatBaseTextPrivate* d;
-};
-
-
-class KChatBasePrivate;
-
-/**
- * @short The base class for chat widgets
- *
- * This is the base class for both KChat and KGameChat. KGameChat is the class
- * you want to use if you write a KGame based game as it will do most things for
- * you. KChat is more or less the same but not KGame dependant
- *
- * KChatBase provides a complete chat widget, featuring different sending means
- * (e.g. "send to all", "send to player1", "send to group2" and so on - see 
- * addSendingEntry). It also provides full auto-completion capabilities (see
- * KCompletion and KLineEdit) which defaults to disabled. The user can
- * change this by right-clicking on the KLineEdit widget and selecting the
- * desired behaviour. You can also change this manually by calling 
- * setCompletionMode.
- *
- * To make KChatBase useful you have to overwrite at least returnPressed.
- * Here you should send the message to all of your clients (or just some of
- * them, depending on sendingEntry).
- *
- * To add a message just call addMessage with the nickname of the player
- * who sent the message and the message itself. If you don't want to use
- * layoutMessage by any reason you can also call addItem directly. But you
- * should better replace layoutMessage instead.
- *
- * You probably don't want to use the abstract class KChatBase directly but use
- * one of the derived classess KChat or KGameChat. The latter is the
- * widget of choice if you develop a KGame application as you don't have to
- * do anything but providing a KGame object.
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KChatBase : public TQFrame
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	/**
-	 * @param parent The parent widget for this widget.
-	 * @param noComboBox If true then the combo box where the player can
-	 * choose where to send messages to (either globally or just to some
-	 * players) will not be added.
-	 **/
-	KChatBase(TQWidget* parent, bool noComboBox = false);
-
-	/**
-	 * Destruct the KChatBase object
-	 *
-	 * Also calls saveConfig
-	 **/
-	virtual ~KChatBase();
-
-	enum SendingIds {
-		SendToAll = 0
-	};
-
-	/**
-	 * @return The name that will be shown for messages from this widget. Either the
-	 * string that was set by setFromName or the name of the player
-	 * that was set by setFromPlayer
-	 **/
-	virtual const TQString& fromName() const = 0;
-
-	/**
-	 * Adds a new entry in the combo box. The default is "send to all
-	 * players" only. This function is provided for convenience. You can
-	 * also call inserSendingEntry with index = -1.
-	 * See also nextId!
-	 * @param text The text of the new entry
-	 * @param id An ID for this entry. This must be unique for this
-	 * entry. It has nothing to do with the position of the entry in the
-	 * combo box. See nextId
-	 * @return True if successful, otherwise false (e.g. if the id is already used)
-	 **/
-	bool addSendingEntry(const TQString& text, int id);
-
-	/**
-	 * Inserts a new entry in the combo box.
-	 * @param text The entry
-	 * @param id An ID for this entry. This must be unique for this
-	 * entry. It has nothing to do with the position of the entry in the
-	 * combo box! 
-	 * @see nextId
-	 * @param index The position of the entry. If -1 the entry will be added
-	 * at the bottom
-	 * @return True if successful, otherwise false (e.g. if the id is already used)
-	 **/
-	bool insertSendingEntry(const TQString& text, int id, int index = -1);
-
-	/**
-	 * This changes a combo box entry.
-	 * @param text The new text of the entry
-	 * @param id The ID of the item to be changed
-	 **/
-	void changeSendingEntry(const TQString& text, int id);
-
-	/**
-	 * This selects a combo box entry.
-	 * @param id The ID of the item to be selected
-	 **/
-	void setSendingEntry(int id);
-
-	/**
-	 * Removes the entry with the ID id from the combo box. Note that id is
-	 * _not_ the index of the entry! 
-	 * @see addSendingEntry
-	 * @param id The unique id of the entry
-	 **/
-	void removeSendingEntry(int id);
-
-	/**
-	 * @return The _unique ID_ of the sending entry that has been selected.
-	 * @see addSendingEntry
-	 *
-	 * Note that the entry "send to all" _always_ uses
-	 * KChatBase::SendToAll, i.e. 0 as id!
-	 **/
-	int sendingEntry() const;
-	
-	/**
-	 * @return The index of the combo box entry with the given id
-	 **/
-	int findIndex(int id) const;
-
-	/**
-	 * @return An ID that has not yet been used in the combo box.
-	 * @see addSendingEntry
-	 **/
-	int nextId() const;
-
-	/**
-	 * @return True if this widget is able to send messages (see 
-	 * returnPressed) and false if not. The default implementation returns
-	 * the value which has been set by setAcceptMessage (true by
-	 * default)
-	 **/
-	virtual bool acceptMessage() const;
-
-	/**
-	 * See KLineEdit::setCompletionMode
-	 **/
-	void setCompletionMode(KGlobalSettings::Completion mode);
-
-	/**
-	 * Set the font that used used for the name part of a message. See also
-	 * nameFont and setBothFont
-	 **/
-	void setNameFont(const TQFont& font);
-	
-	/**
-	 * Set the font that used used for the message part of a message.
-	 * @see messageFont, setBothFont
-	 **/
-	void setMessageFont(const TQFont& font);
-
-	/**
-	 * This sets both - nameFont and messageFont to font. You
-	 * probably want to use this if you don't wish to distinguish between
-	 * these parts of a message.
-	 * @param font A font used for both nameFont and messageFont
-	 **/
-	void setBothFont(const TQFont& font);
-
-	/**
-	 * Same as setNameFont but applies only to system messages.
-	 * @see layoutSystemMessage
-	 **/
-	void setSystemNameFont(const TQFont& font);
-
-	/**
-	 * Same as setMessageFont but applies only to system messages.
-	 * @see layoutSystemMessage
-	 **/
-	void setSystemMessageFont(const TQFont& font);
-
-	/**
-	 * Same as setBothFont but applies only to system messages.
-	 * @see layoutSystemMessage
-	 **/
-	void setSystemBothFont(const TQFont& font);
-
-	/**
-	 * This font should be used for the name (the "from: " part) of a
-	 * message. layoutMessage uses this to set the font using
-	 * KChatBaseText::setNameFont but if you want to overwrite 
-	 * layoutMessage you should do this yourself.
-	 * @return The font that is used for the name part of the message.
-	 **/
-	const TQFont& nameFont() const;
-
-	/**
-	 * This font should be used for a message. layoutMessage sets the
-	 * font of a message using KChatBaseText::setMessageFont but if ypu
-	 * replace layoutMessage with your own function you should use
-	 * messageFont() yourself.
-	 * @return The font that is used for a message
-	 **/
-	const TQFont& messageFont() const;
-
-	/**
-	 * Same as systemNameFont but applies only to system messages.
-	 * @see layoutSystemMessage
-	 **/
-	const TQFont& systemNameFont() const;
-
-	/**
-	 * Same as systemMessageFont but applies only to system messages.
-	 * @see layoutSystemMessage
-	 **/
-	const TQFont& systemMessageFont() const;
-
-	/**
-	 * Save the configuration of the dialog to a KConfig object. If
-	 * the supplied KConfig pointer is NULL then kapp->config() is used
-	 * instead (and the group is changed to "KChatBase") butr the current
-	 * group is restored at the end.
-	 * @param conf A pointer to the KConfig object to save the config
-	 * to. If you use 0 then kapp->config() is used and the group is changed
-	 * to "KChatBase" (the current group is restored at the end).
-	 **/
-	virtual void saveConfig(KConfig* conf = 0);
-
-	/**
-	 * Read the configuration from a KConfig object. If the pointer is
-	 * NULL kapp->config() is used and the group is changed to "KChatBase".
-	 * The current KConfig::group is restored after this call.
-	 **/
-	virtual void readConfig(KConfig* conf = 0);
-
-	/**
-	 * Set the maximum number of items in the list. If the number of item
-	 * exceeds the maximum as many items are deleted (oldest first) as
-	 * necessary. The number of items will never exceed this value.
-	 * @param maxItems the maximum number of items. -1 (default) for
-	 * unlimited.
-	 **/
-	void setMaxItems(int maxItems);
-
-	/**
-	 * Clear all messages in the list.
-	 **/
-	void clear();
-
-	/**
-	 * @return The maximum number of messages in the list. -1 is unlimited. See also
-	 * setMaxItems
-	 **/
-	int maxItems() const;
-
-
-public slots:
-	/**
-	 * Add a text in the listbox. See also signalSendMessage()
-	 *
-	 * Maybe you want to replace this with a function that creates a nicer text
-	 * than "fromName: text"
-	 *
-	 * Update: the function layoutMessage is called by this now. This
-	 * means that you will get user defined outlook on the messages :-)
-	 * @param fromName The player who sent this message
-	 * @param text The text to be added 
-	 **/
-	virtual void addMessage(const TQString& fromName, const TQString& text);
-
-	/**
-	 * This works just like addMessage but adds a system message. 
-	 * layoutSystemMessage is used to generate the displayed item. System
-	 * messages will have a different look than player messages.
-	 *
-	 * You may wish to  use this to display status information from your game.
-	 **/
-	virtual void addSystemMessage(const TQString& fromName, const TQString& text);
-
-	/**
-	 * This member function is mainly internally used to add a message. It
-	 * is called by addMessage which creates a single text from a
-	 * player name and a text. You will hardly ever use this - but if you
-	 * need it it will be here ;-)
-	 *
-	 * But you may want to replace this in a derived class to create a
-	 * non-default (maybe nicer ;-) ) behaviour
-	 * @param item The TQListBoxItem that is being added
-	 **/
-	virtual void addItem(const TQListBoxItem* item);
-
-
-	/**
-	 * This clears all messages in the view. Note that only the messages are
-	 * cleared, not the sender names in the combo box!
-	 **/
-	void slotClear();
-
-	/**
-	 * @param a If false this widget cannot send a message until
-	 * setAcceptMessage(true) is called
-	 **/
-	void setAcceptMessage(bool a);
-	
-signals:
-	/**
-	 * Emitted when the user right-clicks on a list item. 
-	 * @see TQListBox::rightButtonClicked
-	 **/
-	void rightButtonClicked(TQListBoxItem*, const TQPoint&);
-
-protected:
-	/**
-	 * This is called whenever the user pushed return ie wants to send a
-	 * message.
-	 *
-	 * Note that you MUST add the message to the widget when this function
-	 * is called as it has already been added to the KCompletion object
-	 * of the KLineEdit widget!
-	 *
-	 * Must be implemented in derived classes
-	 * @param text The message to be sent
-	 **/
-	virtual void returnPressed(const TQString& text) = 0;
-
-	/**
-	 * Replace to customise the combo box.
-	 *
-	 * Default: i18n("Send to %1).tqarg(name)
-	 * @param name The name of the player
-	 * @return The string as it will be shown in the combo box
-	 **/
-	virtual TQString comboBoxItem(const TQString& name) const;
-
-	/**
-	 * Create a TQListBoxItem for this message. This function is not yet
-	 * written usefully - currently just a TQListBoxTex object is
-	 * created which shows the message in this format: "fromName: text".
-	 * This should fit most peoples needs but needs further improvements.
-	 **/
-	virtual TQListBoxItem* layoutMessage(const TQString& fromName, const TQString& text);
-
-	/**
-	 * Create a TQListBoxItem for this message. This does the same as
-	 * layoutMessage but generates a system message. You might want to
-	 * use such a message to display e.g. status information from your game.
-	 *
-	 * The default implementation just prepends "--- ".
-	 **/
-	virtual TQListBoxItem* layoutSystemMessage(const TQString& fromName, const TQString& text);
-
-private slots:
-	/**
-	 * Check if a text was entered and if acceptMessage returns true. 
-	 * Then add the message to the KCompletion object of the KLineEdit
-	 * widget and call returnPressed
-	 **/
-	void slotReturnPressed(const TQString&);
-
-private:
-	void init(bool noComboBox);
-
-	KChatBasePrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kchatdialog.cpp b/libkdegames/kchatdialog.cpp
deleted file mode 100644
index 7e0df7e8..00000000
--- a/libkdegames/kchatdialog.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kchatdialog.h"
-
-#include "kchatbase.h"
-
-#include <klocale.h>
-#include <kfontdialog.h>
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqpushbutton.h>
-
-class KChatDialogPrivate
-{
- public:
-	KChatDialogPrivate()
-	{
-		mTextPage = 0;
-
-		mNamePreview = 0;
-		mTextPreview = 0;
-		mSystemNamePreview = 0;
-		mSystemTextPreview = 0;
-
-		mChat = 0;
-	}
-
-	TQFrame* mTextPage;
-
-	TQLabel* mNamePreview;
-	TQLabel* mTextPreview;
-	TQLabel* mSystemNamePreview;
-	TQLabel* mSystemTextPreview;
-
-	TQLineEdit* mMaxMessages;
-
-	KChatBase* mChat;
-};
-
-KChatDialog::KChatDialog(KChatBase* chat, TQWidget* parent, bool modal) 
-//	: KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-	: KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-{
- init();
- plugChatWidget(chat);
-}
-
-KChatDialog::KChatDialog(TQWidget* parent, bool modal) 
-//	: KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-	: KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-{
- init();
-}
-
-KChatDialog::~KChatDialog()
-{
- delete d;
-}
-
-void KChatDialog::init()
-{
- d = new KChatDialogPrivate;
-// d->mTextPage = addPage(i18n("&Messages"));// not a good name - game Messages?
- d->mTextPage = plainPage();
- TQGridLayout* tqlayout = new TQGridLayout(d->mTextPage, 7, 2, KDialog::marginHint(), KDialog::spacingHint());
-
-// General fonts
- TQPushButton* nameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
- connect(nameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetNameFont()));
- tqlayout->addWidget(nameFont, 0, 0);
- TQPushButton* textFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
- connect(textFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetTextFont()));
- tqlayout->addWidget(textFont, 0, 1);
-
- TQFrame* messagePreview = new TQFrame(d->mTextPage);
- messagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
- TQHBoxLayout* messageLayout = new TQHBoxLayout(messagePreview);
- tqlayout->addMultiCellWidget(messagePreview, 1, 1, 0, 1);
-
- d->mNamePreview = new TQLabel(i18n("Player: "), messagePreview);
- messageLayout->addWidget(d->mNamePreview, 0);
- d->mTextPreview = new TQLabel(i18n("This is a player message"), messagePreview);
- messageLayout->addWidget(d->mTextPreview, 1);
-
- tqlayout->addRowSpacing(2, 10);
- 
-// System Message fonts
- TQLabel* systemMessages = new TQLabel(i18n("System Messages - Messages directly sent from the game"), d->mTextPage);
- tqlayout->addMultiCellWidget(systemMessages, 3, 3, 0, 1);
- TQPushButton* systemNameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
- connect(systemNameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemNameFont()));
- tqlayout->addWidget(systemNameFont, 4, 0);
- TQPushButton* systemTextFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
- connect(systemTextFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemTextFont()));
- tqlayout->addWidget(systemTextFont, 4, 1);
-
- TQFrame* systemMessagePreview = new TQFrame(d->mTextPage);
- systemMessagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
- TQHBoxLayout* systemMessageLayout = new TQHBoxLayout(systemMessagePreview);
- tqlayout->addMultiCellWidget(systemMessagePreview, 5, 5, 0, 1);
- 
- d->mSystemNamePreview = new TQLabel(i18n("--- Game: "), systemMessagePreview);
- systemMessageLayout->addWidget(d->mSystemNamePreview, 0);
- d->mSystemTextPreview = new TQLabel(i18n("This is a system message"), systemMessagePreview);
- systemMessageLayout->addWidget(d->mSystemTextPreview, 1);
-
-// message count
- TQLabel* maxMessages = new TQLabel(i18n("Maximal number of messages (-1 = unlimited):"), d->mTextPage);
- tqlayout->addWidget(maxMessages, 6, 0);
- d->mMaxMessages = new TQLineEdit(d->mTextPage);
- d->mMaxMessages->setText(TQString::number(-1));
- tqlayout->addWidget(d->mMaxMessages, 6, 1);
-}
-
-void KChatDialog::slotGetNameFont()
-{
- TQFont font = nameFont();
- KFontDialog::getFont(font);
- setNameFont(font);
-}
-
-void KChatDialog::slotGetTextFont()
-{
- TQFont font = textFont();
- KFontDialog::getFont(font);
- setTextFont(font);
-}
-
-void KChatDialog::slotGetSystemNameFont()
-{
- TQFont font = systemNameFont();
- KFontDialog::getFont(font);
- setSystemNameFont(font);
-}
-
-void KChatDialog::slotGetSystemTextFont()
-{
- TQFont font = systemTextFont();
- KFontDialog::getFont(font);
- setSystemTextFont(font);
-}
-
-TQFont KChatDialog::nameFont() const
-{
- return d->mNamePreview->font();
-}
-
-TQFont KChatDialog::textFont() const
-{
- return d->mTextPreview->font();
-}
-
-TQFont KChatDialog::systemNameFont() const
-{
- return d->mSystemNamePreview->font();
-}
-
-TQFont KChatDialog::systemTextFont() const
-{
- return d->mSystemTextPreview->font();
-}
-
-void KChatDialog::plugChatWidget(KChatBase* widget, bool applyFonts)
-{
- d->mChat = widget;
- if (applyFonts && d->mChat) {
-	setNameFont(d->mChat->nameFont());
-	setTextFont(d->mChat->messageFont());
-	setSystemNameFont(d->mChat->systemNameFont());
-	setSystemTextFont(d->mChat->systemMessageFont());
-	setMaxMessages(d->mChat->maxItems());
- }
-}
-
-void KChatDialog::configureChatWidget(KChatBase* widget)
-{
- if (!widget) {
-	return;
- }
- widget->setNameFont(nameFont());
- widget->setMessageFont(textFont());
-
- widget->setSystemNameFont(systemNameFont());
- widget->setSystemMessageFont(systemTextFont());
- 
- widget->setMaxItems(maxMessages());
-}
-
-void KChatDialog::slotOk()
-{
- slotApply();
- KDialogBase::slotOk();
-}
-
-void KChatDialog::slotApply()
-{
- configureChatWidget(d->mChat);
-}
-
-void KChatDialog::setNameFont(TQFont f)
-{
- d->mNamePreview->setFont(f);
-}
-
-void KChatDialog::setTextFont(TQFont f)
-{
- d->mTextPreview->setFont(f);
-}
-
-void KChatDialog::setSystemNameFont(TQFont f)
-{
- d->mSystemNamePreview->setFont(f);
-}
-
-void KChatDialog::setSystemTextFont(TQFont f)
-{
- d->mSystemTextPreview->setFont(f);
-}
-
-void KChatDialog::setMaxMessages(int max)
-{
- d->mMaxMessages->setText(TQString::number(max));
-}
-
-int KChatDialog::maxMessages() const
-{
- bool ok;
- int max = d->mMaxMessages->text().toInt(&ok);
- if (!ok) {
-	return -1; // unlimited is default
- }
- return max;
-}
-
-#include "kchatdialog.moc"
diff --git a/libkdegames/kchatdialog.h b/libkdegames/kchatdialog.h
deleted file mode 100644
index 8b374788..00000000
--- a/libkdegames/kchatdialog.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KCHATDIALOG_H__
-#define __KCHATDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-
-class KChatBase;
-
-class KChatDialogPrivate;
-
-class KDE_EXPORT KChatDialog : public KDialogBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	/**
-	 * Construct a KChatDialog widget
-	 **/
-	KChatDialog(TQWidget* parent, bool modal = false);
-
-	/**
-	 * Construct a KChatDialog widget which automatically configures the
-	 * @ref KChatBase widget. You probably want to use this as you don't
-	 * have to care about the configuration stuff yourself.
-	 **/
-	KChatDialog(KChatBase* chatWidget, TQWidget* parent, bool modal = false);
-
-	/**
-	 * Destruct the dialog
-	 **/
-	~KChatDialog();
-
-	/**
-	 * @return The font that shall be used as the "name: " part of a normal
-	 * message.
-	 **/
-	TQFont nameFont() const;
-
-	/**
-	 * @return The font that shall be used for normal messages.
-	 **/
-	TQFont textFont() const;
-	
-	/**
-	 * @return The font that shall be used as the "name: " part of a system
-	 * (game) message.
-	 **/
-	TQFont systemNameFont() const;
-	
-	/**
-	 * @return The font that shall be used for a system (game) message.
-	 **/
-	TQFont systemTextFont() const;
-
-	/**
-	 * Set the widget that will be configured by the dialog. Use this if you
-	 * don't want to configure the widget yourself.
-	 * @param widget The chat widget that shall be configured
-	 * @param Whether you want to have the current @ref KChatBase fonts as
-	 * defaults in the dialog
-	 **/
-	void plugChatWidget(KChatBase* widget, bool applyFonts = true);
-
-	/**
-	 * Used to configure the chat widget according to the user settings.
-	 * This is called automatically if @ref plugChatWidget was called
-	 * before.
-	 * @param widget The chat widget that shall be configured
-	 **/
-	void configureChatWidget(KChatBase* widget);
-
-	/**
-	 * @return The maximal allowed messages in the chat widget. -1 is
-	 * unlimited
-	 **/
-	int maxMessages() const;
-
-protected slots:
-	void slotGetNameFont();
-	void slotGetTextFont();
-	void slotGetSystemNameFont();
-	void slotGetSystemTextFont();
-
-	virtual void slotApply();
-	virtual void slotOk();
-
-private:
-	void setNameFont(TQFont);
-	void setTextFont(TQFont);
-	void setSystemNameFont(TQFont);
-	void setSystemTextFont(TQFont);
-	void setMaxMessages(int max);
-
-private:
-	void init();
-
-private:
-	KChatDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/COMPAT b/libkdegames/kgame/COMPAT
deleted file mode 100644
index 4551c679..00000000
--- a/libkdegames/kgame/COMPAT
+++ /dev/null
@@ -1,55 +0,0 @@
-06.09.2001:  replace the signal signalCreatePlayer by the virtual function
-             createPlayer. It has the same arguments but the return value
-             is the new player
-06.09.2001:  the KGameConfig dialog changes the parameter initConfigs from bool
-             to long. Use the ConfigOptions to specify what options you want
-             to have enabled. Default is all
-06.09.2001:  some int->Q_UINT32 in sender, receiver and player parameters. maybe
-             more will follow.
-06.09.2001:  KGameIO::signalPrepareMove(..., bool&) ->
-             KGameIO::signalPrepareMove(..., bool*): don't know why this was
-             necessary but it didn't work anymore...
-16.09.2001:  KGamePropertyHandler uses bool* for the sent parameter now. This is
-             because QT3 obviously doesn't honor referneces in Q_SIGNALS/Q_SLOTS.
-             This might even be a QT bug. Bad situation - we use references
-             everywhere in KGame... hope nothing else is affecterd by this
-             problem (signalPrepareMove was fixed already by me)
-18.09.2001:  bool* for Key/Mouseevents and IOAdded in kgameio.h too
-19.09.2001:  Kgame:nextPlayer retunrs the KPlayer *nextplayer instead of bool              
-19.09.2001:  gameOver() renamed to checkGameOver() !!!!!
-18.09.2001:  Question: Should the signal signalPlayerInput(QDataStream &,KPlayer *))
-             be made a virtual function? 
-             MH: This is done now. As this is a central function your programs will
-             not run anymore. Fix: rename your slot which is connected to the above
-             signal to playerInput() and return TRUE in it. This will make it 100%
-             compatible to the old version. I think this chagne is necessary especially
-             as a signal is of no use here as you cannot read twice from the same stream.
-             Therefore there can be only one function processing the input. If you really
-             need a signal, you can of course simply emit it in the overwritten playerInput
-             function
-20.09.2001  playerInputFinished(void->KPlayer *)
---------------------- KGAME_ALPHA_1 --------------------- 
-06.10.2001  adding KGameNetwork::signalAdminStatusChanged - needed for
-            KGameDialog
-06.10.2001  KGame::loadGame() doesn't call setPolicy() anymore!
-08.10.2001  KGamePropertyList now honor policies! Use setPolicy(PolicyDirty) to
-            get the old behavior!
-            The behavior of KGamePropertyArray may have changed in this turn,
-            too!
-            The API stays the same.
-11.10.2001  KGameDialogGeneralConfig now doesn't provide setMin/maxPlayers()
-            anymore. The game should manage this internally. tqlayout() is
-            obsolete as well 
-18.10.2001  KPlayer::signalNetworkData contained QDataStream& instead of const
-            QByteArray& parameter (oops!). This is fixed now. All apps which
-            used this signal must be changed.
-18.10.2001  KGame::sendProperty(), KGame::sendPlayerProperty(),
-            KPlayer::sendProperty() and related functions contain a "int msgid"
-            parameter. This is the id() of the property handler. This parameter
-            enables us to easily add any number of property handler to a game
-            just by connecting it to existing send Q_SLOTS and call
-            processMessage() in slotNetworkData()
-03.11.2001  KPlayer::signalNetworkData now emits msgid-KGameMessage::IdUser just
-            like KGame::signalNetworkData does
-06.11.2001  KGameDialog has some small improvements - easier and IMHO better
-            constructor code. Most code should be compatible :-)
diff --git a/libkdegames/kgame/DESIGN b/libkdegames/kgame/DESIGN
deleted file mode 100644
index cd737e3a..00000000
--- a/libkdegames/kgame/DESIGN
+++ /dev/null
@@ -1,407 +0,0 @@
-This document tries to describe the design of KGame - the KDE multiplayer
-library.
-This document has been written by:
- Andreas Beckermann <b_mann@gmx.de>
- M. Heni <martin@heni-online.de>
- Burkhard Lehner <Burkhard.Lehner@gmx.de>
-
-This document is published under the terms of the GNU FDL
-
-!!!
-Note that this is the initial version of this document and has not yet been
-aproved by all core developers (and is far from being complete)
-AB: please remove this comments as soon as all KGame hackers have read the
-document
-!!!
-
-Please refer the API documentation of every KGame class if you want up tp date
-information.
-
-
-0. Contents
------------
-
-1. DEFINITIONS
-1.1 Message Server
-1.2 Client or Message Client
-1.3 Master
-1.4 Admin
-1.5 Server
-1.6 Player
-
-2. Game Negotiation (M.Heni 20.05.2001)
-
-AB: 3.x is obsolete!
-3. Game Properties (Andreas Beckermann 28.07.2001) ( not yet completed )
-3.1 Using KGameProperty
-3.2 Custom Classes
-3.3 Concepts
-
-4. KGameIO (Andreas Beckermann 10.08.2001)
-
-5. Debugging (Andreas Beckermann 06.10.2001) TODO!
-5.1 KGameDebugDialog
-5.1.1 Debug KGame
-5.1.3 Debug Messages
-
----------------------------------------------------------------------
-1. DEFINITIONS
---------------
-
-First we have to clear some words. The main expressions used in KGame which
-need a definition are
-
-1.1 Message Server
-1.2 Client or Message Client
-1.3 Master
-1.4 Admin
-1.5 Server
-1.6 Player
-
-The most important and confusing ones are Master, Admin and Server. We make
-quite big differerences between those inside KGame.
-
-1.1 Message Server:
--------------------
-A game has always exactly one object of this class, for local games as well as
-for network games. For network games, this object can be on one of the users
-processes (usually inside KGame), or it can also be on an independant computer,
-that has no idea about what game is played on it.
-
-A KMessageClient object can connect to it. It's main purpose is transmitting
-messages between KMessageClient objects.
-
-The Message Server is the main communication object. It is represented by the
-class KMessageServer. Note that there is also a "Master" and a "Server" which
-both differ heavily from the Message Server!
-
-1.2 Client, Message Client:
----------------------------
-Each process that wants to take part in the game must have a
-KMessageClient object, that is connected to the Message Server. KGame creates
-this object and connects it to the Messager Server, so that you usually don't
-need to create these of your own. Even in a local game (no network) there
-must be a message server and one message client connected to it. This is usually
-done by the KGame object itself.
-
-Each message client has a unique ID number (a positive integer value, not zero).
-The KMessageClient object, which does the communication with the Message Server
-is called "Message Client" and to simplify the use we call any KGame object (or
-even the game process) that is connected to a game (i.e. even the Master) just
-"Client".
-
-The main purpose of a Client is to connect to a Master (i.e. to a game) and to
-communicate with it. A client has always a KGame object.
-
-1.3 Master:
------------
-The process that contains the Message Server is called "Master". In any local
-game this is the game process. The Message Server is started by KGame using
-KGame::setMaster(true) which is automatically done on startup. The Message
-Server is deleted automatically as soon as you connect to another Master.
-So in most cases there is exactly one KGame object / Client which is Master. But
-in one case there can be no KGame object / Client that is Master - if the
-Message Server is started as an own process. This "Message-Server-only" process
-is called "Master" then, although there is no KGame object which is Master. See
-also the definition of Admin!
-
-1.4 Admin:
-----------
-One (and only one) of the Clients is the Admin. He can configure the Message
-Server and the game in general in several ways. He can limit the maximum number
-of connected message clients and can drop the connection to some other clients,
-as well as he can configure game specific ssettings (like max/min players, start
-money, ...). The Admin also initializes newly connected Clients. If the Admin
-himself disconnects, another Client becomes Admin (The Admin can himself elect
-some other Client to become Admin. He himself loses that Admin status then).
-An Admin is *alway* a KGame object. The Admin is usually the same as the Master,
-but if the Master is an own process (i.e. the Message Server has been started
-outside KGame) then Master and Admin differ. An Admin *must* be a KGame object
-while the Master doesn't have to be.
-
-1.5 Server:
------------
-The definition of Server differs quite much from the definition of Master.
-A Master just accepts connections and forwards messages. The Server on the other
-side checks these messages, calculates results and sends the results to the
-Clients. That means the Server does all game calculations and doesn't directly
-forward the messages from one Clients to all other Clients.
-KGamer makes it possible to write multiplayer games even without a Server. All
-Clients just send their moves to the Master which forwards them to all Clients.
-Now all Clients calculate the result.
-E.g. in a poker game a player selects two of five cards to be exchanges and
-clicks on "draw" then the client sends the message "Exchange Card-1 and Card-2"
-to the Master. A no-Server solution forwards this to all Clients, and these
-Clients exchange the cards of the player. Note that in a no-Server solution
-(you can also see it as a "every-Client-is-a-Server solution") all Clients must
-have the same random seed and must be of the same version, i.e. the result must
-be the same on all Clients.
-In a Server-Solution on the other hand the Master forwards the Message
-("Exchange Card-1 and Card-2") to the Server only. This Server now calculates
-the result, and sends the new cards back to the Client.
-Both concepts have advantages and disadvantages. It is on you - the game
-developer - to decide which way is better for you.
-E.g. the Server-Solution makes it easier for you to write games. The version
-must not necessarily be the same, you have one central computer which does the
-calcultations. The No-Server-Solution on the other hand decreases network
-traffik as the Clients just send their moves and all Clients can calculate the
-reactions. I'm sure there are a lot of advantages/disadvantages more for both
-concepts.
-
-1.6 Player:
------------
-A KPlayer object is always connected to a KGame object and represents a
-player that participates the game. In a network game, every KPlayer object is
-duplicated on every other KGame object connected to the message server with
-virtual KPlayer objects. So at every time in the game, every KGame object has
-the same number of KPlayer objects.
-
-
-2. Game negotiation
--------------------
-Upon connection  of a client the admin and the client try to negotiate
-the game setup. Basically this means the game of the admin is transferred
-(saved) on the client. However, the client's players are added to the game
-as far as possible. If the addition of the client's players would add more
-players than allowed some players are inactivated. Which players are
-inactivated depends on their networkPriority(). This procedure allows
-easy replacement of players in a constant number game (e.g. chess). If
-this feature is of no interest simply keep the priorities equal (all 0)
-and the client will only add only players if the number of players is
-less or equal the maximum player number.
-
-The following is the negotiation procedure as started by the connection
-of a client. It is initiated in the negotiateNetworkGame() virtual function
-of KGame:
-
-admin:                client:
-------------          ------------
-IdSetupGame
-  QINT16 Library
-         Version
-  QINT32 Application
-         cookie
-                      IdSetupGameContinue;
-                        QValueList<int> player id's
-                        QValueList<int> network priority's
-
-IdGameLoad
-  all game data
-
-IdGameReactivate
-  QValueList<int> id's
-
-IdSyncRandom
-  int randomseed
-
-
-3. Game Properties
-------------------
-A very hard task in a network game is consistency. You have to achieve that all
-properties of the game and of all players have the same value on all clients
-every time. This is because 
-a) the user might be confused if he sees "Player has $0" on client A but 
-"Player has $10" on client B and 
-b) Often game handling depends on those values, e.g. if the example above
-happens the computer might quit the game for the Player on client A because
-he/she doesn't have enough money. But the game continues on client B. 
-Another not that easy task is the network protocol itself. You have to write
-several send() and receive() functions which apply changed values of properties
-to the local property. 
-
-KGameProperty is designed to do all of this for you. KGameProperty is
-implemented as a template so you can use it theoretically for every type of data
-- even for your self defined classes. 
-
-
-3.1 Using KGameProperty
------------------------
-It is basically very easy to use a KGameProperty. You first create your own
-class containing the property, e.g:
-class MyGame : public KGame
-{
-[...]
-protected:
-	KGamePropertyInt money;
-	KGamePropertyQString name;
-	KGameProperty<AntotherClass> myProperty;
-};
-KGamePropertyInt is just a typedef for KGameProperty<int> - just like
-KGamePropertyQString. Now you need to register the properties in the constructor
-of the class to the KGamePropertyHandler:
-MyGame::MyGame() : KGame(myCookie)
-{
- money.registerData(KGamePropertyBase::IdUser+1, dataHandler(), "Money");
- name.registerData(KGamePropertyBase::IdUser+2, this, "Name");
- myProperty.registerData(KGamePropertyBase::IdUser+3, dataHandler(), "MyProperty");
-}
--> You need to specify a *unique* ID. This ID must be greater than
-KGamePropertyBase::IdUser. IDs below this are reserved for KGame. Probably this
-will be changed so that you cannot use IDs below IdUser in the future. Then you
-have to specify the dataHandler(). You can also use a KGame or KPlayer pointer.
-This will automatically use KGame::dataHandler() or KPlayer::dataHandler().
-Finally you *can* provide a name for the property. This will be used for
-debugging in KGameDebugDialog. If you want to save some memory you can leave
-this out.
-Note that if you use pointers to create the properties dynamically they are
-*not* deleted automatically! You MUST delete them yourself!
-Now you can use the KGameProperty like every variable else. See also Section 
-"3.3 Concepts" for restrictions in use.
-
-3.2 Custom Classes
-------------------
-To make custom classes possible you have to implement several operators for your
-them: you need at least << and >> for QDataStream as well as "==" for your own
-class. To overload the "<<" you would e.g. do something like this:
-QDataStream& operator<<(QDataStream& stream, MyData& data)
-{
- int type = data.type;
- QString name = data.name;
- stream << type << name;
- return stream;
-}
-So you basically just have to split your class to several basic types and stream
-them.
-
-3.3 Concepts
-------------
-You can use KGameProperty basically in two completely different ways. You can
-also use a mixture of both but this is not recommended. The default behaviour
-and therefore also the recommended is the "clean" way: 
-a) Always Consistent. This means that a KGameProperty has always the same value
-on *every* client. This is achieved by using KGameProperty::send() whenever you
-want to change the value using "=". You can still use changeValue() or
-setLocal() but send() will be the default. If you use send() then the value of
-the property does *NOT* change immediately. It is just sent to the
-KMessageServer which forwards the value to all clients. As soon as the new value
-is received from the message server the KGamePropertyHandler (a collection class
-for KGameProperty) calls KGameProperty::load() and changes the value of the
-property. So the game first has to go into the event loop, where the message is
-received. This means to you that you cannot do this:
-myIntProperty = 10;
-int value = myIntProperty;
-As myIntPoperty still has the old value when "value = myIntProperty" is called.
-This might seem to be quite complex, but 
-KGamePropertyHandler::signalPropertyChanged() is emitted whenever a new value is
-assigned so you can connect to this and work immediately with the new value.
-You gain the certainty that the value is the same on every client every time.
-That will safe you a lot of time debugging!
-Another way is the "dirty" way:
-b) Not Always Consistent. Sometimes you really *want* to do something like
-myIntProperty = 10;
-int value = myIntProperty;
-but this is not possible with the default behaviour. If you call
-KGameProperty::setAlwaysConsistent(false) in the constructor (right after
-registerData()) you get another behaviour. "=" means changeValue() now.
-changeValue() also uses send() to change the value but additionally calls
-setLocal() to create a local copy of the property. This copy now has the value
-you supplied with "=" and is deleted again as soon as any value from the network
-is received. 
-
-4. KGameIO
-----------
-The class KGameIO is used to let the players communicate with the server. You
-can plug as many KGameIO objects into a player as you want, e.g. you can plug a
-KGameMouseIO and a KGameKeyIO into a player so that you can control the player
-with the mouse and the keyboard - e.g. in a breakout game. 
-You can probably see the advantage: as most of the control stuff is common in a
-lot of games you can use the same IO class in many different games with very
-small adjustments. 
-You could also put all the IO stuff directly into your KPlayer object, like
-sendBet(int money) for a poker game. But there is a major disadvantage and I'm
-very sure you don't want to use a KPlayer object for your IO stuff as soon as
-you know which disadvantage:
-KGameIO is designed to be able to switch between different IOs "on the fly". So
-you might have a KGamePlayerIO, derived from KGameIO, for your game. But now
-this player (who "owns"/uses the KGamePlayerIO) leaves the game (e.g. because he
-was a remote player). So now the game would be over for every player as one
-player is now out of order. But with KGameIO you can just let any of the
-remaining clients create a KGameComputerIO and plug this into the player. So the
-player now is controlled by the computer and the game can continue. 
-
-Think about it! You don't have to care about removing players when a player
-leaves as you can just replace it! The same works the other way round: imagine a
-game with 10 player (e.g. 5 human and 5 computer players) that has already
-started. You cannot add any further players without restarting. So if there are
-any additional player you can just call KPlayer::removeGameIO() which removes
-the IO of a computer player and then call KPlayer::addGameIO() for the same
-player which adds a GameIO for new human player. That's all!
-
-To achieve this you just have to make sure that you make *all* of your IO
-operations through a KGameIO! So instead of using MyPlayer::sendBet(int money)
-you should use something like MyIO::sendBet(). The amount of money would
-probably be calculated by the game IO itself.
-
-
-
-5. Debugging
-------------
-The general debugging concept (if there is one at all) or general debugging
-hints are not yet written. Feel free to do so
-
-5.1 KGameDebugDialog
---------------------
-A nice way of debugging a KGame based game is the KGameDebugDialog. Basically
-all you have to do is to add something like "Debug" to your game's menu and add
-a slot like
-slotDebug()
-{
- KGameDebugDialog* dialog = new KGameDebugDialog(mGame, this);
- connect(dialog, SIGNAL(finished()), dialog, SLOT(slotDelayedDestruct()));
- dialog->show();
-}
-that's it.
-You can now click on that menu entry and you get a non-modal dialog where you
-can start to debug :-)
-The dialog consist of several pages. You can easily add your own using
-KDialogBase::addVBoxPage() (for example). 
-
-5.1.1 Debug KGame
------------------
-The first page, "Debug KGame" shows on the left most or even all status values of
-KGame. That contains e.g.  minPlayers(), isAdmin(), gametqStatus(), ...
-The right side is probably the more important one. It lists *all* KGameProperties
-which have been inserted to this KGame object (only to this KGame object - not
-the ones that have been added to the players!). Most of the status variables of
-the left side are here again as they are implemented as KGameProperty. You can
-see the name of the property (together with its ID), its value and the policy
-this property uses. Note that "unknwon" will be displayed as name of the
-property if you haven't supplied one. See KGamePropertyBase::registerData() for
-info. You probably always want to supply a name for the property to debug it
-easily. In the future there will be something like
-KGamePropertyHandler::setDebug() so that you can switch off debugging and save
-the memory of the names in a release version. 
-For as long as you use standard types for your properties (int, long, bool,
-...) you should always be able to see the value of the property. If you just see
-"unknown" then this type has not been implemented. You can connect to the signal
-KGamePropertyHandler::signalRequestValue() and supply a QString with the value
-yourself. If you do so for a standard type please also submit a bug report!
-
-Currently the dialog does *not* update automatically! So you alway have to click
-the "update" button when you want a current value. There are several reasons for
-this (and one of them is that i'm too lazy to implement the update ;)). E.g.
-often (very often) a property is just in the background - stores e.g. the
-available money in a game. But you don't want it to update whenever the value
-changes (a player receives/pays money) but only when the value on the screen
-changes.
-
-5.1.2 Debug Players
--------------------
-This page consists of three widgets. On the very left there is a list of all
-players in the game. Only the IDs are displayed to save space. If you click one
-the other widgets are filled with content. These widgets are quite much the same
-as the ones in "Debug KGame" - the left shows the value of the functions and the
-right one displays all KProperties of a player. Not much to say here - except:
-See "Debug KGame".
-
-If you change to another player the value are also updated.
-
-5.1.3 Debug Messages
---------------------
-This page is probably not as important as the other ones. It displays *every*
-message that is sent through the KGame object. As a KGameProperry also send
-messages you probably get a lot of them...
-You can exclude message IDs from being displayed (e.g. all game properties). 
-You can also change the sorting of the list to see all messages of a certain ID.
-The default is to sort by time (which is displayed on the left side).
-
diff --git a/libkdegames/kgame/Makefile.am b/libkdegames/kgame/Makefile.am
deleted file mode 100644
index f49bc653..00000000
--- a/libkdegames/kgame/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-
-noinst_LTLIBRARIES = libkgame.la
-
-# compile-order doesn't matter here but maybe we will split these section soon
-
-KGAME = kgame.cpp kplayer.cpp kgamenetwork.cpp kgameproperty.cpp \
-		kgamemessage.cpp kgameio.cpp kgameprocess.cpp kgamechat.cpp \
-		kgamepropertyhandler.cpp kgameerror.cpp kgamesequence.cpp
-KGAME_H = kgame.h kplayer.h kgamenetwork.h kgameproperty.h kgamemessage.h \
-		kgameio.h kgameprocess.h kgamepropertyarray.h \
-		kgamepropertylist.h kgamechat.h kgamepropertyhandler.h \
-		kgameerror.h kgamesequence.h kgameversion.h
-
-KMESSAGE = kmessageio.cpp kmessageserver.cpp kmessageclient.cpp
-KMESSAGE_H = kmessageio.h kmessageserver.h kmessageclient.h
-
-libkgameincludedir=$(includedir)/kgame
-libkgame_la_SOURCES = $(KMESSAGE) $(KGAME)
-
-libkgameinclude_HEADERS = $(KMESSAGE_H) $(KGAME_H)
-
-INCLUDES = -I$(top_srcdir)/libtdegames $(all_includes)
-METASOURCES = AUTO
-
-SUBDIRS = . dialogs
-
-messages:
-#	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
-
diff --git a/libkdegames/kgame/README.LIB b/libkdegames/kgame/README.LIB
deleted file mode 100644
index 512edbac..00000000
--- a/libkdegames/kgame/README.LIB
+++ /dev/null
@@ -1,12 +0,0 @@
-some thoughts and comments about the lib - usually for KGame hackers
-
-- setMin/MaxPlayers() etc. use KGameProperty::changeValue() which is slightly
-  unclean but as these functions can only called by the ADMIN it doesn't matter.
-- AB: KGamePropertyList && KGamePropertyArray:
-     for PolicyClean||PolicyDirty the values are streamed into a QDataStream as usual
-     for PolicyDirty||PolicyLocal the values are streamed as well but
-     additionally command() is called immediately. The values are read from
-     the stream there. This is some kind of performance loss as it would be
-     faster *not* to stream it but imediately call e.g. insert(). But it will
-     probably save a *lot* of bugs!
-
diff --git a/libkdegames/kgame/TODO b/libkdegames/kgame/TODO
deleted file mode 100644
index 2f100b8a..00000000
--- a/libkdegames/kgame/TODO
+++ /dev/null
@@ -1,41 +0,0 @@
-- 28.02.2001: Direct computer player for kpoker like games support needs to be 
-              improved. UPDATE (01/10/06): but what is needed there?
-- 05.03.2001: Documentation. I am thinking of an explaination of the 
-              class + methods and example code for the "key" methods. A sample
-              implementation in a small game (like the current kdenonbeta/kgame
-              but with a real sense - mabye use the QT tic-tac-toe example?)
-              would be very great (this could be stuff of a tutorial instead of
-              KGame documentation)
-              MH: Even better idea
-- 03.06.2001: can KGameNetwork::sendSystemMessage be made protected (maybe using
-              friends)? sendSystenMessage AND sendMessage is very confusing to
-              the user...
-- 03.06.2001: can we translate the group of a KPlayer? Probably not as there are
-              no international connections possible then... maybe a group id?
-- 05.06.2001: KGameDialog::saveConfig(KConfig*) might be useful (as well as
-              KGameDialog::loadConfig(KConfig*). Should set an own group in the
-              config file (setGroup("KGameDialog")). Problem: shalll network
-              settings be saved? Could be used for startup configuration (i.e.
-              load the config of the previous game) otherwise.
-- 21.06.2001: KPlayerPropertyArray does not yet support at() and operator[]
-              assignments. Need to check whether the method from QBitArray
-              can be applied
-- 02.04.2001: VERY DANGEROUS: property1=property2 does NOT assign the values, e.g. int
-              but assignes the whole property, i.e. you have then two properties with
-              the same id and everything is wrong
-              01/09/09: FIXED! (AB) TODO: check if this behavior also appears in
-	      KGamePropertyList and KGamePropertyArray. Althogh this should not
-	      be the case
-- 23.09.2001: does the virtual destructor make sense for KGamePropertyBase?
-- 29.09.2001: GGZ integration. I (Andi) already volunteered for this - it's just
-              here so that I don't forget it
-- 06.10.2001: add KGamePropertyHandler::setDebug(false) to clear all debug names
-              (and to not accept new names) of KGameProperty. Will save some
-              memory
-- 06.10.2001: If one kicks a player (in KGameDialog) the client should be kicked
-              as well. Perhaps always disconnect a client when all players from
-              it have disappeared?
-- 07.10.2001: display (List) or (Array) for KGameProperty[List|Array] in
-              KGameDebugDialog as value
-- 08.10.2001: KGamePropertyList|KGamePropertyArray must be ported to new QT3 API
-              (e.g. erase instead of remove, ...)
diff --git a/libkdegames/kgame/dialogs/Makefile.am b/libkdegames/kgame/dialogs/Makefile.am
deleted file mode 100644
index f3c1adbe..00000000
--- a/libkdegames/kgame/dialogs/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-
-noinst_LTLIBRARIES = libkgamedialogs.la
-
-# compile-order doesn't matter here but maybe we will split these section soon
-
-
-libkgamedialogs_la_SOURCES = kgamedialog.cpp kgameconnectdialog.cpp kgameerrordialog.cpp kgamedebugdialog.cpp kgamedialogconfig.cpp
-
-libkgamedialogsincludedir=$(includedir)/kgame
-libkgamedialogsinclude_HEADERS = kgamedialog.h kgameconnectdialog.h kgameerrordialog.h kgamedebugdialog.h kgamedialogconfig.h
-
-INCLUDES = -I$(top_srcdir)/libtdegames -I$(top_srcdir)/libtdegames/kgame $(all_includes)
-METASOURCES = AUTO
-
-messages:
-#	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
-
diff --git a/libkdegames/kgame/dialogs/kgameconnectdialog.cpp b/libkdegames/kgame/dialogs/kgameconnectdialog.cpp
deleted file mode 100644
index 98958ffd..00000000
--- a/libkdegames/kgame/dialogs/kgameconnectdialog.cpp
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-
-#include "kgameconnectdialog.h"
-
-#include <knuminput.h>
-#include <klocale.h>
-
-#include <tqlineedit.h>
-#include <tqcombobox.h>
-#include <tqvbuttongroup.h>
-#include <tqlayout.h>
-#include <tqradiobutton.h>
-#include <tqlabel.h>
-#include <dnssd/servicebrowser.h>
-#include <tqpushbutton.h>
-#include <tqgrid.h>
-
-class KGameConnectWidgetPrivate
-{
- public:
-	KGameConnectWidgetPrivate()
-	{
-		mPort = 0;
-		mHost = 0;
-		mButtonGroup = 0;
-		mBrowser = 0;
-	}
-
-	KIntNumInput* mPort;
-	TQLineEdit* mHost; //KLineEdit?
-	TQVButtonGroup* mButtonGroup;
-	TQComboBox *mClientName;
-	TQLabel *mClientNameLabel;
-	DNSSD::ServiceBrowser *mBrowser;
-	TQLabel *mServerNameLabel;
-	TQLineEdit *mServerName;
-	TQString mType;
-};
-
-KGameConnectWidget::KGameConnectWidget(TQWidget* parent) : TQWidget(parent)
-{
- d = new KGameConnectWidgetPrivate;
-
- TQVBoxLayout* vb = new TQVBoxLayout(this, KDialog::spacingHint());
- d->mButtonGroup = new TQVButtonGroup(this);
- vb->addWidget(d->mButtonGroup);
- connect(d->mButtonGroup, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(slotTypeChanged(int)));
- (void)new TQRadioButton(i18n("Create a network game"), d->mButtonGroup);
- (void)new TQRadioButton(i18n("Join a network game"), d->mButtonGroup);
-
- TQGrid* g = new TQGrid(2, this);
- vb->addWidget(g);
- g->setSpacing(KDialog::spacingHint());
- d->mServerNameLabel = new TQLabel(i18n("Game name:"), g);
- d->mServerName = new TQLineEdit(g);
- d->mClientNameLabel = new TQLabel(i18n("Network games:"), g);
- d->mClientName = new TQComboBox(g);
- connect(d->mClientName,TQT_SIGNAL(activated(int)),TQT_SLOT(slotGameSelected(int)));
- (void)new TQLabel(i18n("Port to connect to:"), g);
- d->mPort = new KIntNumInput(g);
- (void)new TQLabel(i18n("Host to connect to:"), g);
- d->mHost = new TQLineEdit(g); 
-
- TQPushButton *button=new TQPushButton(i18n("&Start Network"), this);
- connect(button, TQT_SIGNAL(clicked()), this, TQT_SIGNAL(signalNetworkSetup()));
- vb->addWidget(button);
- // Hide until type is set
- d->mClientName->hide();
- d->mClientNameLabel->hide();
- d->mServerName->hide();
- d->mServerNameLabel->hide();
-}
-
-void KGameConnectWidget::showDnssdControls() 
-{
- if (!d->mBrowser) return;
- if (d->mHost->isEnabled()) {      // client	
-  d->mClientName->show();
-  d->mClientNameLabel->show();
-  d->mServerName->hide();
-  d->mServerNameLabel->hide();
-  slotGameSelected(d->mClientName->currentItem());
- } else {
-  d->mClientName->hide();
-  d->mClientNameLabel->hide();
-  d->mServerName->show();
-  d->mServerNameLabel->show();
- }
-}
-
-void KGameConnectWidget::setType(const TQString& type) 
-{
- d->mType = type;
- delete d->mBrowser;
- d->mBrowser = new DNSSD::ServiceBrowser(type);
- connect(d->mBrowser,TQT_SIGNAL(finished()),TQT_SLOT(slotGamesFound()));
- d->mBrowser->startBrowse();
- showDnssdControls();
-}
-
-void KGameConnectWidget::slotGamesFound()
-{
- bool autoselect=false;
- if (!d->mClientName->count()) autoselect=true;
- d->mClientName->clear();
- TQStringList names;
- TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator itEnd = d->mBrowser->services().end();
- for (TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator it = d->mBrowser->services().begin();
-  it!=itEnd; ++it) names << (*it)->serviceName();
- d->mClientName->insertStringList(names);
- if (autoselect && d->mClientName->count()) slotGameSelected(0);
-}
-
-void KGameConnectWidget::setName(const TQString& name) 
-{
- d->mServerName->setText(name);
-}
-
-TQString KGameConnectWidget::gameName() const
-{
- return d->mServerName->text();
-}
-
-TQString KGameConnectWidget::type() const
-{
- return d->mType;
-}
-
-void KGameConnectWidget::slotGameSelected(int nr)
-{
- if (nr>=(d->mBrowser->services().count()) || nr<0) return;
- if (!d->mHost->isEnabled()) return; // this is server mode, do not overwrite host and port controls
- DNSSD::RemoteService::Ptr srv = d->mBrowser->services()[nr];
- if (!srv->isResolved() && !srv->resolve()) return;
- d->mHost->setText(srv->hostName());
- d->mPort->setValue(srv->port());
-}
-KGameConnectWidget::~KGameConnectWidget()
-{
- delete d->mBrowser;
- delete d;
-}
-
-TQString KGameConnectWidget::host() const
-{ 
- if (d->mHost->isEnabled()) {
-	return d->mHost->text();
- } else {
-	return TQString();
- }
-}
-
-unsigned short int KGameConnectWidget::port() const
-{
- return d->mPort->value(); 
-}
-
-void KGameConnectWidget::setHost(const TQString& host)
-{ 
- d->mHost->setText(host); 
-}
-
-void KGameConnectWidget::setPort(unsigned short int port)
-{
- d->mPort->setValue(port); 
-}
-
-void KGameConnectWidget::setDefault(int state)
-{
- d->mButtonGroup->setButton(state); 
- slotTypeChanged(state); 
-}
-
-void KGameConnectWidget::slotTypeChanged(int t)
-{
- if (t == 0) {
-	d->mHost->setEnabled(false);
- } else if (t == 1) {
-	d->mHost->setEnabled(true);
- }
- showDnssdControls();
- emit signalServerTypeChanged(t);
-}
-
-class KGameConnectDialogPrivate
-{
- public:
-	KGameConnectDialogPrivate()
-	{
-		mConnect = 0;
-	}
-
-	KGameConnectWidget* mConnect;
-};
-
-// buttonmask =Ok|Cancel
-KGameConnectDialog::KGameConnectDialog(TQWidget* parent,int buttonmask) : KDialogBase(Plain,
-		i18n("Network Game"),buttonmask , Ok, parent, 0, true, buttonmask!=0)
-{
- d = new KGameConnectDialogPrivate;
- TQVBoxLayout* vb = new TQVBoxLayout(plainPage(), spacingHint());
- d->mConnect = new KGameConnectWidget(plainPage());
- vb->addWidget(d->mConnect);
-}
-
-KGameConnectDialog::~KGameConnectDialog()
-{
- delete d;
-}
-
-int KGameConnectDialog::initConnection( unsigned short int& port,
-		TQString& host, TQWidget* parent, bool server)
-{
- KGameConnectDialog d(parent);
- d.setHost(host);
- d.setPort(port);
- if (server) {
-	d.setDefault(0);
- } else {
-	d.setDefault(1);
- }
-
- int result = d.exec();
- if (result == TQDialog::Accepted) {
-	host = d.host();
-	port = d.port();
- }
- return result;
-}
-
-TQString KGameConnectDialog::host() const
-{
- return d->mConnect->host();
-}
-
-unsigned short int KGameConnectDialog::port() const
-{
- return d->mConnect->port();
-}
-
-void KGameConnectDialog::setHost(const TQString& host)
-{
- d->mConnect->setHost(host);
-}
-
-void KGameConnectDialog::setPort(unsigned short int port)
-{
- d->mConnect->setPort(port);
-}
-
-void KGameConnectDialog::setDefault(int state)
-{
- d->mConnect->setDefault(state);
-}
-
-
-
-#include "kgameconnectdialog.moc"
-
diff --git a/libkdegames/kgame/dialogs/kgameconnectdialog.h b/libkdegames/kgame/dialogs/kgameconnectdialog.h
deleted file mode 100644
index 0a14183d..00000000
--- a/libkdegames/kgame/dialogs/kgameconnectdialog.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMECONNECTDIALOG_H__
-#define __KGAMECONNECTDIALOG_H__
-
-#include <kdialogbase.h>
-
-class KGameConnectDialogPrivate;
-class KGameConnectWidgetPrivate;
-
-class KGameConnectWidget : public TQWidget
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameConnectWidget(TQWidget* parent);
-	virtual ~KGameConnectWidget();
-
-	/**
-	 * @param host The host to connect to by default
-	 **/
-	void setHost(const TQString& host);
-
-	/**
-	 * @return The host to connect to or TQString() if the user wants to
-	 * be the MASTER
-	 **/ 
-	TQString host() const;
-
-	/**
-	 * @param port The port that will be shown by default
-	 **/
-	void setPort(unsigned short int port);
-
-	/**
-	 * @return The port to connect to / to listen
-	 **/
-	unsigned short int port() const;
-
-	/**
-	 * Specifies which state is the default (0 = server game; 1 = join game)
-	 * @param state The default state. 0 For a server game, 1 to join a game
-	 **/
-	void setDefault(int state);
-	
-	/**
-	 * Sets DNS-SD service type, both for publishing and browsing
-	 * @param type Service type (something like _kwin4._tcp). 
-	 * It should be unique for application.
-	 * @since 3.4
-	 **/
-	void setType(const TQString& type);
-	
-	/**
-	 * @return service type
-	 */
-	TQString type() const;
-	
-	/** 
-	 * Set game name for publishing. 
-	 * @param name Game name. Important only for server mode. If not
-	 * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
-	 */
-	void setName(const TQString& name);
-	
-	/**
-	 * @return game name. 
-	 */
-	TQString gameName() const;
-
-protected slots:
-	/**
-	 * The type has changed, ie the user switched between creating or
-	 * joining.
-	 **/
-	void slotTypeChanged(int);
-	void slotGamesFound();
-	void slotGameSelected(int);
-
-signals:
-	void signalNetworkSetup();
-  void signalServerTypeChanged(int);
-
-private:
-	void showDnssdControls();
-	KGameConnectWidgetPrivate* d;
-
-};
-
-/**
- * @short Dialog to ask for host and port
- *
- * This Dialog is used to create a game. You call initConnection(port,
- * TQString(), parent, true) to create a network game (as a server)
- * or initConnection(port, host, parent) to join a network game.
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameConnectDialog : public KDialogBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameConnectDialog(TQWidget* parent = 0,int buttonmask=Ok|Cancel);
-	virtual ~KGameConnectDialog();
-	
-	/**
-	 * Shows a dialog to either connect to an existing game or to create a
-	 * server game, depending on user's choice.
-	 * @param port The port the user wants to connect to.
-	 * @param host The host the user wants to connect to. Will be
-	 * TQString() if server game is chosen
-	 * @param parent The parent of the dialog
-	 * @param server True to create a network game per default, false to
-	 * join a game by default
-	 **/
-	static int initConnection(unsigned short int& port, TQString& host, TQWidget* parent, bool server = false);
-
-	/**
-	 * @param host The host to connect to by default
-	 **/
-	void setHost(const TQString& host);
-
-	/**
-	 * @return The host to connect to or TQString() if the user wants to
-	 * be the MASTER
-	 **/ 
-	TQString host() const;
-
-	/**
-	 * @param port The port that will be shown by default
-	 **/
-	void setPort(unsigned short int port);
-
-	/**
-	 * @return The port to connect to / to listen
-	 **/
-	unsigned short int port() const;
-
-	/**
-	 * Specifies which state is the default (0 = server game; 1 = join game)
-	 * @param state The default state. 0 For a server game, 1 to join a game
-	 **/
-	void setDefault(int state);
-
-signals:
-	void signalNetworkSetup();
-
-private:
-	KGameConnectDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedebugdialog.cpp b/libkdegames/kgame/dialogs/kgamedebugdialog.cpp
deleted file mode 100644
index 49623238..00000000
--- a/libkdegames/kgame/dialogs/kgamedebugdialog.cpp
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamedebugdialog.h"
-
-#include "kgamemessage.h"
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamepropertyhandler.h"
-
-#include <klistview.h>
-#include <klistbox.h>
-#include <klocale.h>
-#include <kdebug.h>
-#include <kpushbutton.h>
-#include <kstdguiitem.h>
-
-#include <tqlayout.h>
-#include <tqstring.h>
-#include <tqintdict.h>
-#include <tqlabel.h>
-#include <tqdatetime.h>
-
-#include <typeinfo>
-
-
-class KGameDebugDialogPrivate
-{
-public:
-	KGameDebugDialogPrivate()
-	{
-		mGame = 0;
-
-		mGamePage = 0;
-		mGameProperties = 0;
-		mGameAddress = 0;
-		mGameId = 0;
-		mGameCookie = 0;
-		mGameMaster = 0;
-		mGameAdmin = 0;
-		mGameOffering = 0;
-		mGametqStatus = 0;
-		mGameRunning = 0;
-		mGameMaxPlayers = 0;
-		mGameMinPlayers = 0;
-		mGamePlayerCount = 0;
-
-		mPlayerPage = 0;
-		mPlayerList = 0;
-		mPlayerProperties = 0;
-		mPlayerAddress = 0;
-		mPlayerId = 0;
-		mPlayerName = 0;
-		mPlayerGroup = 0;
-		mPlayerUserId = 0;
-		mPlayerMyTurn = 0;
-		mPlayerAsyncInput= 0;
-		mPlayerKGameAddress = 0;
-		mPlayerVirtual = 0;
-		mPlayerActive = 0;
-		mPlayerRtti = 0;
-		mPlayerNetworkPriority = 0;
-
-		mMessagePage = 0;
-		mMessageList = 0;
-		mHideIdList = 0;
-	}
-
-	const KGame* mGame;
-
-	TQFrame* mGamePage;
-	KListView* mGameProperties;
-	TQListViewItem* mGameAddress;
-	TQListViewItem* mGameId;
-	TQListViewItem* mGameCookie;
-	TQListViewItem* mGameMaster;
-	TQListViewItem* mGameAdmin;
-	TQListViewItem* mGameOffering;
-	TQListViewItem* mGametqStatus;
-	TQListViewItem* mGameRunning;
-	TQListViewItem* mGameMaxPlayers;
-	TQListViewItem* mGameMinPlayers;
-	TQListViewItem* mGamePlayerCount;
-	
-	TQFrame* mPlayerPage;
-	KListBox* mPlayerList;
-	KListView* mPlayerProperties;
-	TQListViewItem* mPlayerAddress;
-	TQListViewItem* mPlayerId;
-	TQListViewItem* mPlayerName;
-	TQListViewItem* mPlayerGroup;
-	TQListViewItem* mPlayerUserId;
-	TQListViewItem* mPlayerMyTurn;
-	TQListViewItem* mPlayerAsyncInput;
-	TQListViewItem* mPlayerKGameAddress;
-	TQListViewItem* mPlayerVirtual;
-	TQListViewItem* mPlayerActive;
-	TQListViewItem* mPlayerRtti;
-	TQListViewItem* mPlayerNetworkPriority;
-
-	TQFrame* mMessagePage;
-	KListView* mMessageList;
-	KListBox* mHideIdList;
-};
-
-KGameDebugDialog::KGameDebugDialog(KGame* g, TQWidget* parent, bool modal) :
-		KDialogBase(Tabbed, i18n("KGame Debug Dialog"), Close, Close, 
-		parent, 0, modal, true)
-{
- d = new KGameDebugDialogPrivate;
-
- initGamePage();
- initPlayerPage();
- initMessagePage();
-
- setKGame(g);
-}
-
-KGameDebugDialog::~KGameDebugDialog()
-{
- delete d;
-}
-
-void KGameDebugDialog::initGamePage()
-{
- d->mGamePage = addPage(i18n("Debug &KGame"));
- TQVBoxLayout* topLayout = new TQVBoxLayout(d->mGamePage, marginHint(), spacingHint());
- TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
-
- KListView* v = new KListView(d->mGamePage);
- v->addColumn(i18n("Data"));
- v->addColumn(i18n("Value"));
- tqlayout->addWidget(v);
-
- d->mGameProperties = new KListView(d->mGamePage);
- d->mGameProperties->addColumn(i18n("Property"));
- d->mGameProperties->addColumn(i18n("Value"));
- d->mGameProperties->addColumn(i18n("Policy"));
- tqlayout->addWidget(d->mGameProperties);
- 
- TQPushButton* b = new TQPushButton(i18n("Update"), d->mGamePage);
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdateGameData()));
- topLayout->addWidget(b);
-
-// game data
- d->mGameAddress = new TQListViewItem(v, i18n("KGame Pointer"));
- d->mGameId = new TQListViewItem(v, i18n("Game ID"));
- d->mGameCookie = new TQListViewItem(v, i18n("Game Cookie"));
- d->mGameMaster = new TQListViewItem(v, i18n("Is Master"));
- d->mGameAdmin = new TQListViewItem(v, i18n("Is Admin"));
- d->mGameOffering = new TQListViewItem(v, i18n("Is Offering Connections"));
- d->mGametqStatus = new TQListViewItem(v, i18n("Game Status"));
- d->mGameRunning = new TQListViewItem(v, i18n("Game is Running"));
- d->mGameMaxPlayers = new TQListViewItem(v, i18n("Maximal Players"));
- d->mGameMinPlayers = new TQListViewItem(v, i18n("Minimal Players"));
- d->mGamePlayerCount = new TQListViewItem(v, i18n("Players"));
-}
-
-void KGameDebugDialog::initPlayerPage()
-{
- d->mPlayerPage = addPage(i18n("Debug &Players"));
- TQVBoxLayout* topLayout = new TQVBoxLayout(d->mPlayerPage, marginHint(), spacingHint());
- TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
-
- //TODO: connect to the KGame signals for joined/removed players!!!
- TQVBoxLayout* listLayout = new TQVBoxLayout(tqlayout);
- TQLabel* listLabel = new TQLabel(i18n("Available Players"), d->mPlayerPage);
- listLayout->addWidget(listLabel);
- d->mPlayerList = new KListBox(d->mPlayerPage);
- connect(d->mPlayerList, TQT_SIGNAL(executed(TQListBoxItem*)), this, TQT_SLOT(slotUpdatePlayerData(TQListBoxItem*)));
- listLayout->addWidget(d->mPlayerList);
- d->mPlayerList->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Expanding));
-
- KListView* v = new KListView(d->mPlayerPage);
- tqlayout->addWidget(v);
- v->addColumn(i18n("Data"));
- v->addColumn(i18n("Value"));
- 
- d->mPlayerProperties = new KListView(d->mPlayerPage);
- d->mPlayerProperties->addColumn(i18n("Property"));
- d->mPlayerProperties->addColumn(i18n("Value"));
- d->mPlayerProperties->addColumn(i18n("Policy"));
- tqlayout->addWidget(d->mPlayerProperties);
- 
- TQPushButton* b = new TQPushButton(i18n("Update"), d->mPlayerPage);
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdatePlayerList()));
- topLayout->addWidget(b);
-
- d->mPlayerAddress = new TQListViewItem(v, i18n("Player Pointer"));
- d->mPlayerId = new TQListViewItem(v, i18n("Player ID"));
- d->mPlayerName = new TQListViewItem(v, i18n("Player Name"));
- d->mPlayerGroup = new TQListViewItem(v, i18n("Player Group"));
- d->mPlayerUserId = new TQListViewItem(v, i18n("Player User ID"));
- d->mPlayerMyTurn = new TQListViewItem(v, i18n("My Turn"));
- d->mPlayerAsyncInput = new TQListViewItem(v, i18n("Async Input"));
- d->mPlayerKGameAddress = new TQListViewItem(v, i18n("KGame Address"));
- d->mPlayerVirtual = new TQListViewItem(v, i18n("Player is Virtual"));
- d->mPlayerActive = new TQListViewItem(v, i18n("Player is Active"));
- d->mPlayerRtti = new TQListViewItem(v, i18n("RTTI"));
- d->mPlayerNetworkPriority = new TQListViewItem(v, i18n("Network Priority"));
-}
-
-void KGameDebugDialog::initMessagePage()
-{
- d->mMessagePage = addPage(i18n("Debug &Messages"));
- TQGridLayout* tqlayout = new TQGridLayout(d->mMessagePage, 11, 7, marginHint(), spacingHint());
- d->mMessageList = new KListView(d->mMessagePage);
- tqlayout->addMultiCellWidget(d->mMessageList, 0, 9, 0, 3);
- d->mMessageList->addColumn(i18n("Time"));
- d->mMessageList->addColumn(i18n("ID"));
- d->mMessageList->addColumn(i18n("Receiver"));
- d->mMessageList->addColumn(i18n("Sender"));
- d->mMessageList->addColumn(i18n("ID - Text"));
-
- TQPushButton* hide = new TQPushButton(i18n("&>>"), d->mMessagePage);
- connect(hide, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotHideId()));
- tqlayout->addWidget(hide, 4, 4);
- 
- TQPushButton* show = new TQPushButton(i18n("&<<"), d->mMessagePage);
- connect(show, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotShowId()));
- tqlayout->addWidget(show, 6, 4);
-
- TQLabel* l = new TQLabel(i18n("Do not show IDs:"), d->mMessagePage);
- tqlayout->addMultiCellWidget(l, 0, 0, 5, 6);
- d->mHideIdList = new KListBox(d->mMessagePage);
- tqlayout->addMultiCellWidget(d->mHideIdList, 1, 8, 5, 6);
-
- TQPushButton* clear = new KPushButton(KStdGuiItem::clear(), d->mMessagePage);
- connect(clear, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotClearMessages()));
- tqlayout->addMultiCellWidget(clear, 10, 10, 0, 6);
- //TODO: "show all but..." and "show nothing but..."
-}
-
-void KGameDebugDialog::clearPlayerData()
-{
- d->mPlayerAddress->setText(1, "");
- d->mPlayerId->setText(1, "");
- d->mPlayerName->setText(1, "");
- d->mPlayerGroup->setText(1, "");
- d->mPlayerUserId->setText(1, "");
- d->mPlayerMyTurn->setText(1, "");
- d->mPlayerAsyncInput->setText(1, "");
- d->mPlayerKGameAddress->setText(1, "");
- d->mPlayerVirtual->setText(1, "");
- d->mPlayerActive->setText(1, "");
- d->mPlayerRtti->setText(1, "");
- d->mPlayerNetworkPriority->setText(1, "");
-
- d->mPlayerProperties->clear();
-}
-
-void KGameDebugDialog::clearGameData()
-{
- d->mGameAddress->setText(1, "");
- d->mGameId->setText(1, "");
- d->mGameCookie->setText(1, "");
- d->mGameMaster->setText(1, "");
- d->mGameAdmin->setText(1, "");
- d->mGameOffering->setText(1, "");
- d->mGametqStatus->setText(1, "");
- d->mGameRunning->setText(1, "");
- d->mGameMaxPlayers->setText(1, "");
- d->mGameMinPlayers->setText(1, "");
-
- d->mGameProperties->clear();
-}
-
-void KGameDebugDialog::slotUpdatePlayerData()
-{
- if (!d->mGame || d->mPlayerList->currentItem() == -1) {
-	return;
- }
- slotUpdatePlayerData(d->mPlayerList->item(d->mPlayerList->currentItem()));
-}
-
-void KGameDebugDialog::slotUpdatePlayerList()
-{
- TQListBoxItem* i = d->mPlayerList->firstItem(); 
- for (; i; i = d->mPlayerList->firstItem()) {
-	removePlayer(i);
- }
-
- TQPtrList<KPlayer> list = *d->mGame->playerList();
- for (KPlayer* p = list.first(); p; p = list.next()) {
-	addPlayer(p);
- }
-}
-
-void KGameDebugDialog::slotUpdateGameData()
-{
- if (!d->mGame) {
-	d->mGameAddress->setText(1, i18n("NULL pointer"));
-	return;
-}
-
- clearGameData();
-
- TQString buf;
- buf.sprintf("%p", d->mGame);
- d->mGameAddress->setText(1, buf);
- d->mGameId->setText(1, TQString::number(d->mGame->gameId()));
- d->mGameCookie->setText(1, TQString::number(d->mGame->cookie()));
- d->mGameMaster->setText(1, d->mGame->isMaster() ? i18n("True") : i18n("False"));
- d->mGameAdmin->setText(1, d->mGame->isAdmin() ? i18n("True") : i18n("False"));
- d->mGameOffering->setText(1, d->mGame->isOfferingConnections() ? i18n("True") : i18n("False"));
- d->mGametqStatus->setText(1, TQString::number(d->mGame->gametqStatus()));
- d->mGameRunning->setText(1, d->mGame->isRunning() ? i18n("True") : i18n("False"));
- d->mGameMaxPlayers->setText(1, TQString::number(d->mGame->maxPlayers()));
- d->mGameMinPlayers->setText(1, TQString::number(d->mGame->minPlayers()));
- d->mGamePlayerCount->setText(1, TQString::number(d->mGame->playerCount()));
-
-//TODO ios
-
- KGamePropertyHandler* handler = d->mGame->dataHandler();
- TQIntDictIterator<KGamePropertyBase> it(handler->dict());
- while (it.current()) {
-	TQString policy;
-	switch (it.current()->policy()) {
-		case KGamePropertyBase::PolicyClean:
-			policy = i18n("Clean");
-			break;
-		case KGamePropertyBase::PolicyDirty:
-			policy = i18n("Dirty");
-			break;
-		case KGamePropertyBase::PolicyLocal:
-			policy = i18n("Local");
-			break;
-		case KGamePropertyBase::PolicyUndefined:
-		default:
-			policy = i18n("Undefined");
-			break;
-	}
-	(void) new TQListViewItem(d->mGameProperties,
-			handler->propertyName(it.current()->id()),
-			handler->propertyValue(it.current()), 
-			policy);
-//	kdDebug(11001) << k_funcinfo << ": checking for all game properties: found property name " << name << endl;
-	++it;
- }
-}
-
-void KGameDebugDialog::slotUpdatePlayerData(TQListBoxItem* item)
-{
- if (!item || !d->mGame) {
-	return;
- }
-
- KPlayer* p = d->mGame->findPlayer(item->text().toInt());
-
- if (!p) {
-	kdError(11001) << k_funcinfo << ": cannot find player" << endl;
-	return;
- }
-
- clearPlayerData();
-
- TQString buf;
- buf.sprintf("%p", p);
- d->mPlayerAddress->setText(1, buf);
- d->mPlayerId->setText(1, TQString::number(p->id()));
- d->mPlayerName->setText(1, p->name());
- d->mPlayerGroup->setText(1, p->group());
- d->mPlayerUserId->setText(1, TQString::number(p->userId()));
- d->mPlayerMyTurn->setText(1, p->myTurn() ? i18n("True") : i18n("False"));
- d->mPlayerAsyncInput->setText(1, p->asyncInput() ? i18n("True") : i18n("False"));
- buf.sprintf("%p", p->game());
- d->mPlayerKGameAddress->setText(1, buf);
- d->mPlayerVirtual->setText(1, p->isVirtual() ? i18n("True") : i18n("False"));
- d->mPlayerActive->setText(1, p->isActive() ? i18n("True") : i18n("False"));
- d->mPlayerRtti->setText(1, TQString::number(p->rtti()));
- d->mPlayerNetworkPriority->setText(1, TQString::number(p->networkPriority()));
-
-//TODO ios
-
-// Properties
- KGamePropertyHandler * handler = p->dataHandler();
- TQIntDictIterator<KGamePropertyBase> it((handler->dict()));
- while (it.current()) {
-	TQString policy;
-	switch (it.current()->policy()) {
-		case KGamePropertyBase::PolicyClean:
-			policy = i18n("Clean");
-			break;
-		case KGamePropertyBase::PolicyDirty:
-			policy = i18n("Dirty");
-			break;
-		case KGamePropertyBase::PolicyLocal:
-			policy = i18n("Local");
-			break;
-		case KGamePropertyBase::PolicyUndefined:
-		default:
-			policy = i18n("Undefined");
-			break;
-	}
-	(void)new TQListViewItem(d->mPlayerProperties,
-			handler->propertyName(it.current()->id()),
-			handler->propertyValue(it.current()),
-			policy);
-	++it;
- }
-}
-
-void KGameDebugDialog::clearPages()
-{
- clearPlayerData();
- clearGameData();
- d->mPlayerList->clear();
- slotClearMessages();
-}
-
-void KGameDebugDialog::setKGame(const KGame* g)
-{
- slotUnsetKGame();
- d->mGame = g;
- if (g) {
- //TODO: connect to the KGame signals for joined/removed players!!!
-	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-//	connect();
-
-	TQPtrList<KPlayer> list = *d->mGame->playerList();
-	for (KPlayer* p = list.first(); p; p = list.next()) {
-		addPlayer(p);
-	}
-
-	slotUpdateGameData();
-
-	connect(d->mGame, TQT_SIGNAL(signalMessageUpdate(int, TQ_UINT32, TQ_UINT32)), this, TQT_SLOT(slotMessageUpdate(int, TQ_UINT32, TQ_UINT32)));
- }
-}
-
-void KGameDebugDialog::slotUnsetKGame()
-{
- if (d->mGame) {
-	disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = 0;
- clearPages();
-}
-
-void KGameDebugDialog::addPlayer(KPlayer* p)
-{
- if (!p) {
-	kdError(11001) << "trying to add NULL player" << endl;
-	return;
- }
-
- (void) new TQListBoxText(d->mPlayerList, TQString::number(p->id()));
- //TODO connect to signals, like deleted/removed, ...
-}
-
-void KGameDebugDialog::removePlayer(TQListBoxItem* i)
-{
- if (!i || !d->mGame) {
-	return;
- }
- KPlayer* p = d->mGame->findPlayer(i->text().toInt());
- if (!p) {
-	return;
- }
- disconnect(p, 0, this, 0);
- if (i->isSelected()) {
-	clearPlayerData();
- }
- delete i;
-}
-
-void KGameDebugDialog::slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- if (!showId(msgid)) {
-	return;
- }
- TQString msgidText = KGameMessage::messageId2Text(msgid);
- if (msgidText.isNull()) {
-	if (msgid > KGameMessage::IdUser) {
-		emit signalRequestIdName(msgid-KGameMessage::IdUser, true, msgidText);
-	} else {
-		emit signalRequestIdName(msgid, false, msgidText);
-	}
-	if (msgidText.isNull()) {
-		msgidText = i18n("Unknown");
-	}
- }
- (void) new TQListViewItem( d->mMessageList, TQTime::currentTime().toString(), 
-		TQString::number(msgid), TQString::number(receiver), 
-		TQString::number(sender), msgidText);
-}
-
-void KGameDebugDialog::slotClearMessages()
-{
- d->mMessageList->clear();
-}
-
-void KGameDebugDialog::slotShowId()
-{
-/* TQListBoxItem* i = d->mHideIdList->firstItem();
- for (; i; i = i->next()) {
-	if (i->selected()) {
-		d->mHideIdList->removeItem(i->);
-	}
- }*/
- if (!d->mHideIdList->currentItem()) {
-	return;
- }
- d->mHideIdList->removeItem(d->mHideIdList->currentItem());
-}
-
-void KGameDebugDialog::slotHideId()
-{
- if (!d->mMessageList->currentItem()) {
-	return;
- }
- int msgid = d->mMessageList->currentItem()->text(1).toInt();
- if (!showId(msgid)) {
-	return;
- }
- (void)new TQListBoxText(d->mHideIdList, TQString::number(msgid));
-}
-
-bool KGameDebugDialog::showId(int msgid)
-{
- TQListBoxItem* i = d->mHideIdList->firstItem();
- for (; i; i = i->next()) {
-	if (i->text().toInt() == msgid) {
-		return false;
-	}
- }
- return true;
-}
-
-
-#include "kgamedebugdialog.moc"
diff --git a/libkdegames/kgame/dialogs/kgamedebugdialog.h b/libkdegames/kgame/dialogs/kgamedebugdialog.h
deleted file mode 100644
index 92b35597..00000000
--- a/libkdegames/kgame/dialogs/kgamedebugdialog.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEDEBUGDIALOG_H__
-#define __KGAMEDEBUGDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-
-class KGame;
-class KGameIO;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDebugDialogPrivate;
-
-class KDE_EXPORT KGameDebugDialog : public KDialogBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDebugDialog(KGame* g, TQWidget* parent, bool modal = false);
-	~KGameDebugDialog();
-
-	/**
-	 * Automatically connects the KGame object to all error dependant slots. 
-	 * Create a KGameErrorDialog object, call this function and forget
-	 * everything.
-	 * @param g The KGame which will emit the erorrs (or not ;-) )
-	 **/
-	void setKGame(const KGame* g);
-
-public slots:
-	/**
-	 * Unsets a @ref KGame which has been set using @ref setKGame before.
-	 * This is called automatically when the @ref KGame object is destroyed
-	 * and you normally don't have to call this yourself.
-	 *
-	 * Note that @ref setKGame also unsets an already existing @ref KGame
-	 * object if exising.
-	 **/
-	void slotUnsetKGame();
-
-	/**
-	 * Update the data of the @ref KGame object
-	 **/
-	void slotUpdateGameData();
-
-	/**
-	 * Update the properties of the currently selected player
-	 **/
-	void slotUpdatePlayerData();
-
-	/**
-	 * Updates the list of players and calls @ref clearPlayerData. Note that
-	 * after this call NO player is selected anymore.
-	 **/
-	void slotUpdatePlayerList();
-
-	void slotClearMessages();
-
-signals:
-	/**
-	 * This signal is emitted when the "debug messages" page couldn't find
-	 * the name of a message id. This is usually the case for user-defined
-	 * messages. KGameDebugDialog asks you to give the msgid a name.
-	 * @param messageid The ID of the message. As given to @ref
-	 * KGame::sendMessage
-	 * @param userid User defined msgIds are internally increased by
-	 * @ref KGameMessage::IdUser. You don't have to care about this but if
-	 * this signal is emitted with userid=false (shouldn't happen) then the
-	 * name of an internal message as defined in @ref
-	 * KGameMessage::GameMessageIds couldn't be found.
-	 * @param name The name of the msgid. You have to fill this!
-	 **/
-	void signalRequestIdName(int messageid, bool userid, TQString& name);
-
-protected:
-	void clearPages();
-
-	/**
-	 * Clear the data of the player view. Note that the player list is NOT
-	 * cleared.
-	 **/
-	void clearPlayerData();
-
-	/**
-	 * Clear the data view of the @ref KGame object
-	 **/
-	void clearGameData();
-
-	/**
-	 * Add a new player to the player list
-	 **/
-	void addPlayer(KPlayer* p);
-
-	/**
-	 * Remove a player from the list
-	 **/
-	void removePlayer(TQListBoxItem* item);
-
-	/**
-	 * @return Whether messages with this msgid shall be displayed or not
-	 **/
-	bool showId(int msgid);
-
-protected slots:
-	/**
-	 * Update the data of the player specified in item
-	 * @param item The @ref TQListBoxItem of the player to be updated. Note
-	 * that the text of this item MUST be the ID of the player
-	 **/
-	void slotUpdatePlayerData(TQListBoxItem* item);
-
-	void slotShowId();
-	void slotHideId();
-
-	/**
-	 * A message has been received - see @ref KGame::signalMessageUpdate
-	 **/
-	void slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-private:
-	void initGamePage();
-	void initPlayerPage();
-	void initMessagePage();
-
-private:
-	KGameDebugDialogPrivate* d;
-};
-
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedialog.cpp b/libkdegames/kgame/dialogs/kgamedialog.cpp
deleted file mode 100644
index c03df4ff..00000000
--- a/libkdegames/kgame/dialogs/kgamedialog.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include <tqlayout.h>
-#include <tqvbox.h>
-
-#include <klocale.h>
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamedialogconfig.h"
-
-#include "kgamedialog.h"
-
-#include "kgamedialog.moc"
-
-class KGameDialogPrivate
-{
-public:
-	KGameDialogPrivate() 
-	{
-		mGamePage = 0;
-		mNetworkPage = 0;
-		mMsgServerPage = 0;
-		mTopLayout = 0;
-
-		mNetworkConfig = 0;
-		mGameConfig = 0;
-
-		mOwner = 0;
-		mGame = 0;
-	}
-
-	TQVBox* mGamePage;
-	TQVBox* mNetworkPage;
-	TQVBox* mMsgServerPage;// unused here?
-	TQVBoxLayout* mTopLayout;
-	KGameDialogNetworkConfig* mNetworkConfig;
-	KGameDialogGeneralConfig* mGameConfig;
-
-// a list of all config widgets added to this dialog
-	TQPtrList<KGameDialogConfig> mConfigWidgets;
-
-// just pointers:
-	KPlayer* mOwner;
-	KGame* mGame;
-};
-
-KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
-		TQWidget* parent, bool modal)
-	: KDialogBase(Tabbed, title, Ok|Default|Apply,
-	Ok, parent, 0, modal, true)
-{
- init(g, owner);
-}
-
-KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
-		TQWidget* parent, long initConfigs, int chatMsgId, bool modal)
-	: KDialogBase(Tabbed, title, Ok|Default|Apply,
-	Ok, parent, 0, modal, true)
-{
- init(g, owner);
- if ((ConfigOptions)initConfigs!=NoConfig) {
-	initDefaultDialog((ConfigOptions)initConfigs, chatMsgId);
- }
-}
-
-void KGameDialog::init(KGame* g, KPlayer* owner)
-{
-//AB: do we need a "Cancel" Button? currently removed
-
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogPrivate;
-
- setOwner(owner);
- setKGame(g);
- if (g) {
-	setAdmin(g->isAdmin());
- } else {
-	setAdmin(false);
- }
-}
-
-void KGameDialog::initDefaultDialog(ConfigOptions initConfigs, int chatMsgId)
-{
- if (initConfigs & GameConfig) {
-	kdDebug() << "add gameconf" << endl;
-	addGameConfig(new KGameDialogGeneralConfig(0));
- }
- if (initConfigs & NetworkConfig) {
-	addNetworkConfig(new KGameDialogNetworkConfig(0));
- }
- if (initConfigs & (MsgServerConfig) ) {
-	addMsgServerConfig(new KGameDialogMsgServerConfig(0));
- }
- if (initConfigs & ChatConfig) {
-	KGameDialogChatConfig * c = new KGameDialogChatConfig(chatMsgId, 0);
-	if (d->mGamePage) {
-		addChatWidget(c, d->mGamePage);
-	} else {
-		addConfigPage(c, i18n("&Chat"));
-	}
- }
- if (initConfigs & BanPlayerConfig) {
-	// add the connection management system - ie the widget where the ADMIN can
-	// kick players out
-	if (d->mNetworkPage) {
-		// put it on the network page
-		addConnectionList(new KGameDialogConnectionConfig(0), d->mNetworkPage);
-	} else {
-		// if no network page available put it on an own page
-		addConfigPage(new KGameDialogConnectionConfig(0), i18n("C&onnections"));
-	}
- }
-}
-
-KGameDialog::~KGameDialog()
-{
-// kdDebug(11001) << "DESTRUCT KGameDialog" << this << endl;
- d->mConfigWidgets.setAutoDelete(true);
- d->mConfigWidgets.clear();
- delete d;
-}
-
-void KGameDialog::addGameConfig(KGameDialogGeneralConfig* conf)
-{
- if (!conf) {
-	return;
- }
- d->mGameConfig = conf;
- d->mGamePage = addConfigPage(d->mGameConfig, i18n("&Game"));
-}
-
-void KGameDialog::addNetworkConfig(KGameDialogNetworkConfig* netConf)
-{
- if (!netConf) {
-	return;
- }
- d->mNetworkConfig = netConf;
- d->mNetworkPage = addConfigPage(netConf, i18n("&Network"));
-}
-
-void KGameDialog::addMsgServerConfig(KGameDialogMsgServerConfig* msgConf)
-{
- if (!msgConf) {
-	return;
- }
- d->mMsgServerPage = addConfigPage(msgConf, i18n("&Message Server"));
-}
-
-void KGameDialog::addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent)
-{
- if (!chat) {
-	return;
- }
- if (!parent) {
-	parent = d->mGamePage;
- }
- if (!parent) {
-	kdError(11001) << "cannot add chat widget without page" << endl;
-	return;
- }
- addConfigWidget(chat, parent);
-}
-
-void KGameDialog::addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent)
-{
- if (!c) {
-	return;
- }
- if (!parent) {
-	parent = d->mNetworkPage;
- }
- if (!parent) {
-	kdError(11001) << "Cannot add connection list without page" << endl;
-	return;
- }
- addConfigWidget(c, parent);
-}
-
-TQVBox *KGameDialog::configPage(ConfigOptions which)
-{
- TQVBox *box = 0;
- switch(which)
- {
-	case NetworkConfig:
-		box = d->mNetworkPage;
-		break;
-	case GameConfig:
-		box = d->mGamePage;
-		break;
-	case MsgServerConfig:
-		box = d->mMsgServerPage;
-		break;
-	default:
-		kdError(11001) << k_funcinfo << ": Parameter " << which << " not supported" << endl;
- }
- return box;
-}
-
-TQVBox* KGameDialog::addConfigPage(KGameDialogConfig* widget, const TQString& title)
-{
- if (!widget) {
-	kdError(11001) << "Cannot add NULL config widget" << endl;
-	return 0;
- }
- TQVBox* page = addVBoxPage(title);
- addConfigWidget(widget, page);
- return page;
-}
-
-void KGameDialog::addConfigWidget(KGameDialogConfig* widget, TQWidget* parent)
-{
- if (!widget) {
-	kdError(11001) << "Cannot add NULL config widget" << endl;
-	return;
- }
- if (!parent) {
-	kdError(11001) << "Cannot reparent to NULL widget" << endl;
-	return;
- }
-// kdDebug(11001) << "reparenting widget" << endl;
- widget->reparent(parent, TQPoint(0,0));
- d->mConfigWidgets.append(widget);
- connect(widget, TQT_SIGNAL(destroyed(TQObject*)), this, TQT_SLOT(slotRemoveConfigWidget(TQObject*)));
- if (!d->mGame) {
-	kdWarning(11001) << "No game has been set!" << endl;
- } else {
-	widget->setKGame(d->mGame);
-	widget->setAdmin(d->mGame->isAdmin());
- }
- if (!d->mOwner) {
-	kdWarning(11001) << "No player has been set!" << endl;
- } else {
-	widget->setOwner(d->mOwner);
- }
- widget->show();
-}
-
-KGameDialogGeneralConfig* KGameDialog::gameConfig() const
-{ return d->mGameConfig; }
-KGameDialogNetworkConfig* KGameDialog::networkConfig() const
-{ return d->mNetworkConfig; }
-
-void KGameDialog::slotApply()
-{
- submitToKGame();
-}
-
-void KGameDialog::slotDefault()
-{
- if (!d->mGame) {
-	return;
- }
- 
-//TODO *only*  call setKGame/setOwner for the *current* page!!
- setKGame(d->mGame);
- setOwner(d->mOwner);
-}
-
-void KGameDialog::slotOk()
-{
- slotApply();
- TQDialog::accept();
-}
-
-void KGameDialog::setOwner(KPlayer* owner)
-{
-//AB: note: NULL player is ok!
- d->mOwner = owner;
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
-	if (d->mConfigWidgets.at(i)) {
-		d->mConfigWidgets.at(i)->setOwner(d->mOwner);
-		//TODO: hide playerName in KGameDialogGeneralConfig
-	} else {
-		kdError(11001) << "NULL widget??" << endl;
-	}
- }
-}
-
-void KGameDialog::setKGame(KGame* g)
-{
- if (d->mGame) {
-	disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = g;
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
-	d->mConfigWidgets.at(i)->setKGame(d->mGame);
- }
- if (d->mGame) {
-	setAdmin(d->mGame->isAdmin());
-	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-	connect(d->mGame, TQT_SIGNAL(signalAdminStatusChanged(bool)), 
-			this, TQT_SLOT(setAdmin(bool)));
- }
-}
-
-void KGameDialog::setAdmin(bool admin)
-{
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
-	d->mConfigWidgets.at(i)->setAdmin(admin);
- }
-}
-
-void KGameDialog::slotUnsetKGame() // called when KGame is destroyed
-{ setKGame(0); }
-
-void KGameDialog::submitToKGame()
-{
- if (!d->mGame) {
-	kdError(11001) << k_funcinfo << ": no game has been set" << endl;
-	return;
- }
- if (!d->mOwner) {
-	kdError(11001) << k_funcinfo << ": no player has been set" << endl;
-	return;
- }
-
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
-// kdDebug(11001) << "submit to kgame " << i << endl;
-	d->mConfigWidgets.at(i)->submitToKGame(d->mGame, d->mOwner);
-// kdDebug(11001) << "done: submit to kgame " << i << endl;
- }
-}
-
-void KGameDialog::slotRemoveConfigWidget(TQObject* configWidget)
-{
- d->mConfigWidgets.removeRef((KGameDialogConfig*)configWidget);
-}
-
diff --git a/libkdegames/kgame/dialogs/kgamedialog.h b/libkdegames/kgame/dialogs/kgamedialog.h
deleted file mode 100644
index 423f5de1..00000000
--- a/libkdegames/kgame/dialogs/kgamedialog.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-// NAMING
-// please follow these naming rules if you add/change classes:
-// the main dialog is named KGameDialog and the base config widget
-// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
-// XYZ = the name of the config widget, like "general" or "network") and are
-// inherited from KGameDialogConfig.
-
-#ifndef __KGAMEDIALOG_H__
-#define __KGAMEDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-class TQGridLayout;
-class TQVBoxLayout;
-class TQListBoxItem;
-
-class KGame;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDialogConfig;
-class KGameDialogGeneralConfig;
-class KGameDialogNetworkConfig;
-class KGameDialogMsgServerConfig;
-class KGameDialogChatConfig;
-class KGameDialogConnectionConfig;
-
-class KGameDialogPrivate;
-/**
- * TODO: rewrite entire documentation. Nearly nothing is valid anymore.
- * The main configuration dialog for KGame. Here all players meat each other,
- * every player can see how many players connected (and their names) and the
- * ADMIN can even "kick" players out. You can talk to each other (using 
- * KGameChat and the ADMIN can define the maxPlayers/minPlayers as well as the
- * number of computer players.
- *
- *
- * AB: setDefaultXYZ is obsolete!!
- * You will usually create an instance of KGameDialog or any derived class and
- * call setDefaultXYZ methods. Example (maybe
- * obsoleted parameters - docu is currently changing very fast):
- * \code
- * 	KGameDialog dlg(kgame, i18n("New Game"), localPlayer, this, true,
- * 	ID_CHAT);
- * 	dlg.setDefaultNetworkInfo(port, host); // AB: obsolete!
- * 	dlg.exec();
- * \endcode
- * This will create a default modal dialog with the title "New Game". You don't
- * have to do more than this. 
- *
- * @short Main configuration dialog for KGame
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameDialog : public KDialogBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-
-	enum ConfigOptions
-	{
-		NoConfig = 0,
-		ChatConfig = 1,
-		GameConfig = 2,
-		NetworkConfig = 4,
-		MsgServerConfig = 8,
-		BanPlayerConfig = 16,
-		AllConfig = 0xffff
-	};
-
-	/**
-	 * Create an empty KGameDialog. You can add widgets using
-	 * addConfigPage.
-	 * @param g The KGame object of this game
-	 * @param owner The KPlayer object who is responsible for this
-	 * dialog, aka "the local player"
-	 * @param title The title of the dialog - see KDialog::setCaption
-	 * @param parent The parent of the dialog
-	 * @param modal Whether the dialog is modal or not
-	 **/
-	KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
-			TQWidget* parent, bool modal = false);
-	
-	/**
-	 * Create a KGameDialog with the standard configuration widgets. This
-	 * creates the following widgets:
-	 * <ul>
-	 * <li> KGameDialogGeneralConfig
-	 * <li> KGameDialogNetworkConfig
-	 * <li> KGameDialogMsgServerConfig
-	 * <li> KGameDialogChatConfig
-	 * <li> KGameDialogConnectionConfig
-	 * </ul>
-	 * If you want to use your own implementations (or none) of the widgets
-	 * above you should subclass KGameDialog. Use addGameConfig, 
-	 * addNetworkConfig, addMsgConfig, addChatWidget and 
-	 * addConnectionList in this case.
-	 *
-	 * If you want to add further configuration widget you can simply use
-	 * addConfigPage
-	 * @param g The KGame object of this game
-	 * @param owner The KPlayer object who is responsible for this
-	 * dialog, aka "the local player"
-	 * @param title The title of the dialog - see KDialog::setCaption
-	 * @param parent The parent of the dialog
-	 * @param modal Whether the dialog is modal or not
-	 * @param initConfigs whether the default KGameDialogConfig widgets
-	 * shall be created using initDefaultDialog. Use false if you want
-	 * to use custom widgets.
-	 * @param chatMsgId The ID of Chat messages. See KGameChat. Unused
-	 * if initConfigs = false
-	 **/
-	KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
-			TQWidget* parent, long initConfigs = AllConfig, 
-			int chatMsgId = 15432, bool modal = false);
-
-	virtual ~KGameDialog();
-
-
-	/**
-	 * Change the owner of the dialog. This will be used as the fromPlayer in
-	 * KGameChat and will receive the entered player name.
-	 * @param owner The owner of the dialog. It must already be added to the
-	 * KGame object!
-	 *
-	 * Calls the KGameDialogConfig::setOwner implementation of all
-	 * widgets that have been added by addConfigWidget
-	 * @param owner The new owner player of this dialog must already be
-	 * added to the KGame object. Can even be NULL (then no player
-	 * configuration is made)
-	 **/
-	void setOwner(KPlayer* owner);
-
-	/**
-	 * Change the KGame object this dialog is used for.
-	 *
-	 * Calls the KGameDialogConfig::setKGame implementation of all
-	 * widgets that have been added by addConfigWidget
-	 * @param g The new KGame object
-	 **/
-	void setKGame(KGame* g);
-
-	/**
-	 * This will submit all configuration data to the KGame object.
-	 * Automatically called by slotApply and slotOk
-	 * There is no need to replace this unless you
-	 * want to add widgets which are not derived from those classes
-	 **/
-	virtual void submitToKGame();
-
-	/**
-	 * Adds a KGameChat to the dialog. If no parent is specified the
-	 * game page will be used.
-	 * @param chat The chat widget
-	 * @param parent The parent of the chat widget. This MUST be an
-	 * already added config widget. Note that the game page will be used
-	 * if parent is 0.
-	 **/
-	void addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent = 0);
-
-	/**
-	 * Add a connection list to the dialog. The list consists of a
-	 * KLisBox containing all players in the current game (see
-	 * KGame::playerList). The admin can "ban" players, ie kick them out of
-	 * the game.
-	 *
-	 * This is another not-really-config-config-widget. It just displays the
-	 * connections and lets you ban players.
-	 * @param c The KGameDialogConnectionConfig object
-	 * @param parent The parent of the widget. If 0 the networkConfig
-	 * page is used.
-	 **/
-	void addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent = 0);
-
-	/**
-	 * Add a new page to the dialog. The page will contain you new config
-	 * widget and will have your provided title.
-	 *
-	 * The widget will be reparented to this dialog. This also calls
-	 * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner.
-	 * @param widget The new config widget
-	 * @param title The title of the newly added page.
-	 * @return The newly added page which contains your config widget.
-	 **/
-	TQVBox* addConfigPage(KGameDialogConfig* widget, const TQString& title);
-
-	/**
-	 * @return The TQVBox of the given key, The key is from ConfigOptions
-	 * Note that not all are supported yet
-	 **/
-	TQVBox *configPage(ConfigOptions which);
-
-	/**
-	 * @return The default netowrk config. Note that this always returns 0 if
-	 * you did not specify NetworkConfig in the constructor!
-	 **/
-	KGameDialogNetworkConfig* networkConfig() const;
-
-	/**
-	 * @return The default game config. Note that this always returns 0 if
-	 * you did not specify GameConfig in the constructor!
-	 **/
-	KGameDialogGeneralConfig* gameConfig() const;
-
-	/**
-	 * Add a config widget to the specified parent. Usually you call
-	 * addConfigPage for one widget and addConfigWidget for another to add
-	 * it to the same page. Just use the returned page of
-	 * addConfigPage.
-	 **/
-	void addConfigWidget(KGameDialogConfig* widget, TQWidget* parent);
-
-	/**
-	 * Used to add the main network config widget in a new page. Use this to
-	 * make networkConfig return something useful.
-	 **/
-	void addNetworkConfig(KGameDialogNetworkConfig* netConf);
-
-	/**
-	 * Add the main game config widget in a new page. Use this to make 
-	 * gameConfig return something useful.
-	 **/
-	void addGameConfig(KGameDialogGeneralConfig* conf);
-
-	/**
-	 * Used to add the message server config widget in a new page.
-	 **/
-	void addMsgServerConfig(KGameDialogMsgServerConfig* conf);
-
-protected:
-
-	/**
-	 * This is used to create a dialog containing all the default widgets. 
-	 *
-	 * You may want to use this if you just want to use your own
-	 * configuration widgets which inherit the standard ones.
-	 *
-	 * Note that if one of the widgets is NULL the default implementation
-	 * will be used! (except the chat widget - you need to create it
-	 * yourself as you have to provide a message id)
-	 * @param initConfigs The widgets to be created
-	 * @param chatMsgId The msgid for the chat config (only if specified in
-	 * initConfigs) - see KGameDialogChatConfig
-	 **/
-	void initDefaultDialog(ConfigOptions initConfigs, int chatMsgId = 15432);
-
-	/**
-	 * Go through all config widgets and call their 
-	 * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner implementation
-	 * 
-	 * This function could be private and probably will be very soon.
-	 * Don't use it yourself
-	 **/
-	void configureConfigWidgets();
-
-protected slots:
-	/**
-	 * Called when the user clicks on Ok. Calls slotApply and
-	 * TQDialog::accept()
-	 **/
-	virtual void slotOk();
-
-	/**
-	 * Just calls submitToKGame()
-	 **/
-	virtual void slotApply();
-
-	/**
-	 * Sets the default values for the configuration widgets. Set these
-	 * values by (e.g.) setDefaultMaxPlayers()
-	 * @deprecated
-	 **/
-	virtual void slotDefault();
-
-	/**
-	 * Called when the KGame object is destroyed. Calls setKGame(0) so
-	 * that all widgets can disconnect their slots and so on.
-	 **/
-	void slotUnsetKGame();
-
-	/**
-	 * Called when the ADMIN status of this KGame client changes. See 
-	 * KGameNetwork::signalAdminStatusChanged
-	 * @param isAdmin TRUE if this client is now the ADMIN otherwise FALSE
-	 **/
-	void setAdmin(bool isAdmin);
-
-	/**
-	 * Remove a config widget from the widget list. 
-	 * @see TQObject::destroyed
-	 **/
-	void slotRemoveConfigWidget(TQObject* configWidget);
-
-private:
-	void init(KGame*, KPlayer*);
-
-private:
-	KGameDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedialogconfig.cpp b/libkdegames/kgame/dialogs/kgamedialogconfig.cpp
deleted file mode 100644
index f6845650..00000000
--- a/libkdegames/kgame/dialogs/kgamedialogconfig.cpp
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamedialogconfig.h"
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamechat.h"
-#include "kgameconnectdialog.h"
-
-#include <klocale.h>
-#include <knuminput.h>
-#include <kdialog.h>
-#include <klistbox.h>
-#include <kmessagebox.h>
-
-#include <tqlayout.h>
-#include <tqhgroupbox.h>
-#include <tqlabel.h>
-#include <tqpushbutton.h>
-#include <tqlineedit.h>
-#include <tqvbox.h>
-#include <tqptrdict.h>
-
-#include "kgamedialogconfig.moc"
-
-class KGameDialogConfigPrivate
-{
-public:
-	KGameDialogConfigPrivate()
-	{
-		mOwner = 0;
-		mGame = 0;
-
-		mAdmin = false;
-	}
-
-	bool mAdmin;
-	KGame* mGame;
-	KPlayer* mOwner;
-};
-
-KGameDialogConfig::KGameDialogConfig(TQWidget* parent) : TQWidget(parent)
-{
- d = new KGameDialogConfigPrivate;
-}
-
-KGameDialogConfig::~KGameDialogConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogConfig::setKGame(KGame* g)
-{
- d->mGame = g;
-}
-
-void KGameDialogConfig::setOwner(KPlayer* p)
-{
- d->mOwner = p;
-}
-
-void KGameDialogConfig::setAdmin(bool a)
-{
- d->mAdmin = a;
-}
-
-KGame* KGameDialogConfig::game() const
-{ return d->mGame; }
-bool KGameDialogConfig::admin() const
-{ return d->mAdmin; }
-KPlayer* KGameDialogConfig::owner() const
-{ return d->mOwner; }
-
-/////////////////////////// KGameDialogNetworkConfig /////////////////////////
-class KGameDialogNetworkConfigPrivate
-{
-public:
-	KGameDialogNetworkConfigPrivate()
-	{
-		mInitConnection = 0;
-		mNetworkLabel = 0;
-		mDisconnectButton = 0;
-		mConnect = 0;
-		mDefaultServer=true;
-
-	}
-
-	// TQPushButton* mInitConnection;
-	TQHGroupBox* mInitConnection;
-	TQLabel* mNetworkLabel;
-	TQPushButton *mDisconnectButton;
-
-	bool mDefaultServer;
-	TQString mDefaultHost;
-	unsigned short int mDefaultPort;
-	KGameConnectWidget *mConnect;
-};
-
-
-KGameDialogNetworkConfig::KGameDialogNetworkConfig(TQWidget* parent)
-		: KGameDialogConfig(parent)
-{
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogNetworkConfigPrivate();
-
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint(), "toptqlayout");
-
- TQHBoxLayout *hb = new TQHBoxLayout(topLayout, KDialog::spacingHint());
-
- d->mNetworkLabel = new TQLabel(this);
- hb->addWidget(d->mNetworkLabel);
-
- d->mDisconnectButton=new TQPushButton(i18n("Disconnect"),this);
- connect(d->mDisconnectButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotExitConnection()));
- hb->addWidget(d->mDisconnectButton);
-
- d->mInitConnection = new TQHGroupBox(i18n("Network Configuration"), this);
- topLayout->addWidget(d->mInitConnection);
-
- d->mConnect = new KGameConnectWidget(d->mInitConnection);
- connect(d->mConnect, TQT_SIGNAL(signalNetworkSetup()), this, TQT_SLOT(slotInitConnection()));
- connect(d->mConnect, TQT_SIGNAL(signalServerTypeChanged(int)),
-         this, TQT_SIGNAL(signalServerTypeChanged(int)));
-
- // Needs to be AFTER the creation of the dialogs
- setConnected(false);
- setDefaultNetworkInfo("localhost", 7654,true);
-}
-
-KGameDialogNetworkConfig::~KGameDialogNetworkConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogNetworkConfig::slotExitConnection()
-{
- kdDebug(11001) << k_funcinfo << " !!!!!!!!!!!!!!!!!!!!!!!" << endl;
-  if (game()) game()->disconnect();
-  setConnected(false,false);
-}
-
-void KGameDialogNetworkConfig::slotInitConnection()
-{
- kdDebug(11001) << k_funcinfo << endl;
- bool connected = false;
- bool master = true;
- unsigned short int port = d->mConnect->port();
- TQString host = d->mConnect->host();
-
- if (host.isNull()) {
-	master = true;
-	if (game()) {
-		game()->setDiscoveryInfo(d->mConnect->type(),d->mConnect->gameName());
-		connected = game()->offerConnections(port);
-	}
- } else {
-	master = false;
-	if (game()) {
-		connected = game()->connectToServer(host, port);
-	}
-  // We need to learn about failed connections
-  if (game()) {
-     connect(game(), TQT_SIGNAL(signalConnectionBroken()),
-      this, TQT_SLOT(slotConnectionBroken()));
-  }
- }
- setConnected(connected, master);
-}
-
-void KGameDialogNetworkConfig::slotConnectionBroken()
-{
-  kdDebug(11001) << k_funcinfo << endl;
-  setConnected(false,false);
-  KMessageBox::error(this, i18n("Cannot connect to the network"));
-}
-
-void KGameDialogNetworkConfig::setConnected(bool connected, bool master)
-{
- if (!connected) {
-	d->mNetworkLabel->setText(i18n("Network status: No Network"));
-	d->mInitConnection->setEnabled(true);
-  d->mDisconnectButton->setEnabled(false);
-	return;
- }
- if (master) {
-	d->mNetworkLabel->setText(i18n("Network status: You are MASTER"));
- } else {
-	d->mNetworkLabel->setText(i18n("Network status: You are connected"));
- }
- d->mInitConnection->setEnabled(false);
- d->mDisconnectButton->setEnabled(true);
-}
-
-void KGameDialogNetworkConfig::submitToKGame(KGame* , KPlayer* )
-{
-}
-
-void KGameDialogNetworkConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- if (!game()) {
-	setConnected(false);
-	return;
- }
- setConnected(game()->isNetwork(), game()->isMaster());
-}
-
-void KGameDialogNetworkConfig::setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server)
-{
- d->mDefaultPort = port;
- d->mDefaultHost = host;
- d->mDefaultServer = server;
-
- d->mConnect->setHost(host);
- d->mConnect->setPort(port);
- if (server) {
-	d->mConnect->setDefault(0);
- } else {
-	d->mConnect->setDefault(1);
- }
-}
-
-void KGameDialogNetworkConfig::setDiscoveryInfo(const TQString& type, const TQString& name)
-{
- d->mConnect->setType(type);
- d->mConnect->setName(name);
-} 
-
-/////////////////////////// KGameDialogGeneralConfig /////////////////////////
-class KGameDialogGeneralConfigPrivate
-{
-public:
-	KGameDialogGeneralConfigPrivate()
-	{
-		mTopLayout = 0;
-		mName = 0;
-	}
-
-	TQLineEdit* mName;
-
-	TQVBoxLayout* mTopLayout;
-};
-
-KGameDialogGeneralConfig::KGameDialogGeneralConfig(TQWidget* parent, bool initializeGUI)
-		: KGameDialogConfig(parent)
-{
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogGeneralConfigPrivate;
-
- if (initializeGUI) {
-	d->mTopLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
-	d->mTopLayout->setAutoAdd(true);
-
-	TQWidget* nameWidget = new TQWidget(this);
-	TQHBoxLayout* l = new TQHBoxLayout(nameWidget);
-	TQLabel* nameLabel = new TQLabel(i18n("Your name:"), nameWidget);
-	l->addWidget(nameLabel);
-	d->mName = new TQLineEdit(nameWidget);
-	l->addWidget(d->mName);
- }
-}
-
-KGameDialogGeneralConfig::~KGameDialogGeneralConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogGeneralConfig::setPlayerName(const TQString& name)
-{
- if (d->mName) {
-	d->mName->setText(name);
- }
-}
-
-TQString KGameDialogGeneralConfig::playerName() const
-{
- return d->mName ? d->mName->text() : TQString();
-}
-
-void KGameDialogGeneralConfig::setOwner(KPlayer* p)
-{
- if (owner()) {
-	owner()->disconnect(this);
- }
- KGameDialogConfig::setOwner(p);
- if (!owner()) {
-	// can this config be used at all?
-	// maybe call hide()
-	return;
- }
- connect(owner(), TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
-		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
- setPlayerName(p->name());
- //TODO: connect signalPropertyChanged and check for playername changes!
-}
-
-void KGameDialogGeneralConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- if (!g) {
-	// TODO
-	// can this config be used at all?
-	// maybe call hide()
-	return;
- }
-}
-
-void KGameDialogGeneralConfig::setAdmin(bool admin)
-{
- KGameDialogConfig::setAdmin(admin);
-// enable/disable widgets
-
-}
-
-void KGameDialogGeneralConfig::submitToKGame(KGame* g, KPlayer* p)
-{
-//FIXME
- if (p) {
-	p->setName(playerName());
- }
- if (g) {
- }
-}
-
-void KGameDialogGeneralConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p)
-{
- if (!prop || !p || p != owner()) {
-	return;
- }
- switch (prop->id()) {
-	case KGamePropertyBase::IdName:
-		setPlayerName(p->name());
-		break;
-	default:
-		break;
- }
-}
-
-class KGameDialogMsgServerConfigPrivate
-{
-public:
-	KGameDialogMsgServerConfigPrivate()
-	{
-		senderLayout = 0;
-		localLayout = 0;
-
-		changeMaxClients = 0;
-		changeAdmin= 0;
-		removeClient= 0;
-		noAdmin = 0;
-
-		noMaster = 0;
-	}
-
-	TQVBoxLayout* senderLayout;
-	TQHBoxLayout* localLayout;
-
-	TQPushButton* changeMaxClients;
-	TQPushButton* changeAdmin;
-	TQPushButton* removeClient;
-	TQLabel* noAdmin;
-
-	TQLabel* noMaster;
-};
-
-
-// TODO: change ADMIN ID, remove CLIENTS, change MAXCLIENTS
-// we do everything here with TQPushButtons as we want to wait a moment before
-// continuing - the message must be sent over network first
-KGameDialogMsgServerConfig::KGameDialogMsgServerConfig(TQWidget* parent)
-		: KGameDialogConfig(parent)
-{
- d = new KGameDialogMsgServerConfigPrivate;
-
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- d->senderLayout = new TQVBoxLayout(topLayout);
- d->localLayout = new TQHBoxLayout(topLayout);
-}
-
-KGameDialogMsgServerConfig::~KGameDialogMsgServerConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogMsgServerConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- //TODO display the ID of the admin if we aren't
- // connect(g, TQT_SIGNAL(signalAdminChanged(int)), this, TQT_SLOT(slotChangeIsAdmin(int)));//TODO
- if (!game()) {
-	// we cannot do anything without a KGame object!
-	setAdmin(false);
-	return;
- }
- setAdmin(game()->isAdmin());
- setHasMsgServer(game()->messageServer());
-}
-
-
-void KGameDialogMsgServerConfig::slotChangeMaxClients()
-{
- if (!game()) {
-	kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
-	return;
- }
- if (!game()->isAdmin()) {
-	kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
-	return;
- }
- int max;
-// edit->setText(TQString::number()); // current max clients! //TODO
-
- TQDialog* dialog = new TQDialog();
- dialog->setCaption(i18n("Maximal Number of Clients"));
- TQHBoxLayout* l = new TQHBoxLayout(dialog, KDialog::marginHint(), KDialog::spacingHint());
- l->setAutoAdd(true);
-
- (void) new TQLabel(i18n("Maximal number of clients (-1 = infinite):"), dialog);
- TQLineEdit* edit = new TQLineEdit(dialog);//TODO: use KIntNumInput
-// edit->setText(TQString::number(max)); // current max clients! //TODO
- if (dialog->exec() == TQDialog::Accepted) {
-	bool ok;
-	max = edit->text().toInt(&ok);
-	if (ok) {
-		game()->setMaxClients(max);
-	}
- }
-
-}
-
-void KGameDialogMsgServerConfig::slotRemoveClient()
-{
-}
-
-void KGameDialogMsgServerConfig::slotChangeAdmin()
-{
- if (!game()) {
-	kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
-	return;
- }
- if (!admin()) {
-	kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
-	return;
- }
- //TODO
- TQ_UINT32 newAdmin = 0;
-// newAdmin = ;
- game()->electAdmin(newAdmin);
-}
-
-void KGameDialogMsgServerConfig::removeClient(TQ_UINT32 /*id*/)
-{
-//TODO
-}
-
-void KGameDialogMsgServerConfig::setAdmin(bool a)
-{
- if (admin() == a) {
-	// no need to do anything
-	return;
- }
- KGameDialogConfig::setAdmin(a);
- if (admin()) {
-	if (d->noAdmin) {
-		delete d->noAdmin;
-		d->noAdmin = 0;
-	}
-	d->changeMaxClients = new TQPushButton(i18n("Change Maximal Number of Clients"), this);
-	connect(d->changeMaxClients, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeMaxClients()));
-	d->changeAdmin = new TQPushButton(i18n("Change Admin"), this);
-	connect(d->changeAdmin, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeAdmin()));
-	d->removeClient = new TQPushButton(i18n("Remove Client with All Players"), this);
-	connect(d->removeClient, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotRemoveClient()));
-	d->senderLayout->addWidget(d->changeMaxClients);
-	d->senderLayout->addWidget(d->changeAdmin);
-	d->senderLayout->addWidget(d->removeClient);
- } else {
-	if (d->changeMaxClients) {
-		delete d->changeMaxClients;
-		d->changeMaxClients = 0;
-	}
-	if (d->changeAdmin) {
-		delete d->changeAdmin;
-		d->changeAdmin = 0;
-	}
-	if (d->removeClient) {
-		delete d->removeClient;
-		d->removeClient = 0;
-	}
-	d->noAdmin = new TQLabel(i18n("Only the admin can configure the message server!"), this);
-	d->senderLayout->addWidget(d->noAdmin);
- }
-}
-
-
-void KGameDialogMsgServerConfig::setHasMsgServer(bool has)
-{
- if (!has) {
-	// delete all inputs
-	if (!d->noMaster) {
-		d->noMaster = new TQLabel(i18n("You don't own the message server"), this);
-		d->localLayout->addWidget(d->noMaster);
-	}
-	return;
- }
- if (d->noMaster) {
-	delete d->noMaster;
-	d->noMaster = 0;
- }
- //TODO
- // list all connections, data (max clients) and so on
- // cannot be done above (together with TQPushButtons) as it is possible that
- // this client is ADMIN but not MASTER (i.e. doesn't own the messageserver)
-}
-
-
-class KGameDialogChatConfigPrivate
-{
-public:
-	KGameDialogChatConfigPrivate()
-	{
-		mChat = 0;
-	}
-
-	KGameChat* mChat;
-};
-
-KGameDialogChatConfig::KGameDialogChatConfig(int chatMsgId, TQWidget* parent)
-		: KGameDialogConfig(parent)
-{
- d = new KGameDialogChatConfigPrivate;
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- topLayout->setAutoAdd(true);
- TQHGroupBox* b = new TQHGroupBox(i18n("Chat"), this);
- d->mChat = new KGameChat(0, chatMsgId, b);
-}
-
-KGameDialogChatConfig::~KGameDialogChatConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogChatConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- d->mChat->setKGame(game());
- if (!game()) {
-	hide();
- } else {
-	show();
- }
-}
-
-void KGameDialogChatConfig::setOwner(KPlayer* p)
-{
- KGameDialogConfig::setOwner(p);
- if (!owner()) {
-	hide();
-	return;
- }
- d->mChat->setFromPlayer(owner());
- show();
-}
-
-
-
-class KGameDialogConnectionConfigPrivate
-{
-public:
-	KGameDialogConnectionConfigPrivate()
-	{
-		mPlayerBox = 0;
-	}
-
-	TQPtrDict<KPlayer> mItem2Player;
-	KListBox* mPlayerBox;
-};
-
-KGameDialogConnectionConfig::KGameDialogConnectionConfig(TQWidget* parent)
-		: KGameDialogConfig(parent)
-{
- //TODO: prevent player to ban himself
- d = new KGameDialogConnectionConfigPrivate;
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- topLayout->setAutoAdd(true);
- TQHGroupBox* b = new TQHGroupBox(i18n("Connected Players"), this);
- d->mPlayerBox = new KListBox(b);
- setMinimumHeight(100);
-}
-
-KGameDialogConnectionConfig::~KGameDialogConnectionConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- // d->mIem2Player.clear();
- delete d;
-}
-
-void KGameDialogConnectionConfig::setKGame(KGame* g)
-{
- if (game()) {
-	disconnect(game(), 0, this, 0);
- }
- KGameDialogConfig::setKGame(g);
- slotClearPlayers();
- if (game()) {
-// react to changes in KGame::playerList()
-	connect(game(), TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)),
-			this, TQT_SLOT(slotPlayerJoinedGame(KPlayer*)));
-	connect(game(), TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)),
-			this, TQT_SLOT(slotPlayerLeftGame(KPlayer*)));
-
-	KGame::KGamePlayerList l = *game()->playerList();
-	for (KPlayer* p = l.first(); p; p = l.next()) {
-		slotPlayerJoinedGame(p);
-	}
- }
-}
-
-void KGameDialogConnectionConfig::setOwner(KPlayer* p)
-{
- KGameDialogConfig::setOwner(p);
-}
-
-void KGameDialogConnectionConfig::setAdmin(bool a)
-{
- if (!game()) {// not possible... in theory
-	return;
- }
- if (admin()) {
-	disconnect(game(), TQT_SIGNAL(executed(TQListBoxItem*)), this, 0);
- }
- KGameDialogConfig::setAdmin(a);
- if (admin()) {
-	connect(d->mPlayerBox, TQT_SIGNAL(executed(TQListBoxItem*)), this,
-			TQT_SLOT(slotKickPlayerOut(TQListBoxItem*)));
- }
-}
-
-TQListBoxItem* KGameDialogConnectionConfig::item(KPlayer* p) const
-{
- TQPtrDictIterator<KPlayer> it(d->mItem2Player);
- while (it.current()) {
-	if (it.current() == p) {
-		return (TQListBoxItem*)it.currentKey();
-	}
-	++it;
- }
- return 0;
-}
-
-void KGameDialogConnectionConfig::slotClearPlayers()
-{
- TQPtrDictIterator<KPlayer> it(d->mItem2Player);
- while (it.current()) {
-	slotPlayerLeftGame(it.current());
-	++it;
- }
-
- if (d->mItem2Player.count() > 0) {
-	kdWarning(11001) << k_funcinfo << ": itemList wasn't cleared properly" << endl;
-	d->mItem2Player.clear();
- }
- if (d->mPlayerBox->count() > 0) {
-	kdWarning(11001) << k_funcinfo << ": listBox wasn't cleared properly" << endl;
-	d->mPlayerBox->clear();
- }
-
-}
-
-void KGameDialogConnectionConfig::slotPlayerJoinedGame(KPlayer* p)
-{
- if (!p) {
-	kdError(11001) << k_funcinfo << ": Cannot add NULL player" << endl;
- }
- if (d->mItem2Player[p]) {
-	kdError(11001) << k_funcinfo << ": attempt to double add player" << endl;
-	return;
- }
- kdDebug(11001) << k_funcinfo << ": add player " << p->id() << endl;
- TQListBoxText* t = new TQListBoxText(p->name());
- d->mItem2Player.insert(t, p);
- d->mPlayerBox->insertItem(t);
-
- connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
-		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
-
-}
-
-void KGameDialogConnectionConfig::slotPlayerLeftGame(KPlayer* p)
-{
- // disconnect first
- this->disconnect(p);
- if (!item(p)) {
-	kdError(11001) << k_funcinfo << ": cannot find " << p->id()
-			<< " in list" << endl;
-	return;
- }
- d->mPlayerBox->removeItem(d->mPlayerBox->index(item(p)));
-
-}
-
-void KGameDialogConnectionConfig::slotKickPlayerOut(TQListBoxItem* item)
-{
- kdDebug(11001) << "kick player out" << endl;
- KPlayer* p = d->mItem2Player[item];
- if (!p) {
-	kdError(11001) << "invalid item selected - no player found" << endl;
-	return;
- }
- if (!game()) {
-	kdWarning(11001) << "no game set" << endl;
-	return;
- }
- if (!admin()) {
-	kdDebug(11001) << "Only the ADMIN can kick players" << endl;
-	return;
- }
- if (p == owner()) { // you wanna ban the ADMIN ??
-	kdDebug(11001) << "you cannot kick the ADMIN" << endl;
-	return;
- }
-
- if (KMessageBox::questionYesNo(this, i18n("Do you want to ban player \"%1\" from the game?").tqarg(
-		p->name()), TQString(), i18n("Ban Player"), i18n("Do Not Ban")) == KMessageBox::Yes) {
-	kdDebug(11001) << "will remove player " << p << endl;
-	game()->removePlayer(p);
-//	d->mPlayerBox->removeItem(d->mPlayerBox->index(item)); // should be done by signalPlayerLeftGame
- } else {
-	kdDebug(11001) << "will NOT remove player " << p << endl;
- }
-}
-
-void KGameDialogConnectionConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
-{
- if(prop->id() == KGamePropertyBase::IdName) {
-	TQListBoxText* old = 0;
-	TQPtrDictIterator<KPlayer> it(d->mItem2Player);
-	while (it.current() && !old) {
-		if (it.current() == player) {
-			old = (TQListBoxText*)it.currentKey();
-		}
-		++it;
-	}
-	TQListBoxText* t = new TQListBoxText(player->name());
-	d->mPlayerBox->changeItem(t, d->mPlayerBox->index(old));
-	d->mItem2Player.remove(old);
-	d->mItem2Player.insert(t, player);
- }
-}
-
diff --git a/libkdegames/kgame/dialogs/kgamedialogconfig.h b/libkdegames/kgame/dialogs/kgamedialogconfig.h
deleted file mode 100644
index a7f309ac..00000000
--- a/libkdegames/kgame/dialogs/kgamedialogconfig.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-// NAMING
-// please follow these naming rules if you add/change classes:
-// the main dialog is named KGameDialog and the base config widget
-// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
-// XYZ = the name of the config widget, like "general" or "network") and are
-// inherited from KGameDialogConfig.
-
-#ifndef __KGAMEDIALOGCONFIG_H__
-#define __KGAMEDIALOGCONFIG_H__
-
-#include <tqwidget.h>
-#include <kdemacros.h>
-
-class TQGridLayout;
-class TQVBoxLayout;
-class TQListBoxItem;
-
-class KGame;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDialogConfigPrivate;
-/**
- * Base class for configuration widgets.
- *
- * You can inherit from this and implement @ref submitToKGame, @ref
- * setOwner and @ref setKGame to create your personal @ref KGame configuration widget :-)
- * @short Base class for configuration widgets
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameDialogConfig : public TQWidget
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDialogConfig(TQWidget* parent = 0);
-	virtual ~KGameDialogConfig();
-
-	/**
-	 * Called by @ref KGameDialog to submit all settings to the KGame
-	 * Object.
-	 * You have to replace this if you add your own widgets!
-	 * @param g A pointer to your KGame.
-	 * @param p A pointer to the player owning this dialog
-	 **/
-	virtual void submitToKGame(KGame* g, KPlayer* p) = 0;
-
-	/**
-	 * The owner player of the dialog has been changed. The default
-	 * changes the pointer for owner so don't forget to call the
-	 * default implementation if you overwrite this!
-	 *
-	 * You can use this e.g. to change a line edit widget containing the 
-	 * player name.
-	 *
-	 * Note: even NULL players are allowed!
-	 * @param p The new owner player of the dialog
-	 **/
-	virtual void setOwner(KPlayer* p);
-
-	/**
-	 * The KGame object of the dialog has been changed. The default
-	 * implementation changes the pointer for game so don't forget to
-	 * call the default implementation if you overwrite this!
-	 *
-	 * You can use this e.g. to re-read the min/max player settings.
-	 * @param g The KGame object
-	 **/
-	virtual void setKGame(KGame* g);
-
-	/**
-	 * The admin status has been changed.
-	 * If the KGame object of this config widget is the
-	 * admin the user is allowed to configure it. Otherwise most
-	 * widgets will have to be disabled. Note that you don't necessarily
-	 * need to deactivate all widget - e.g. the player name must be
-	 * configured by the player. Mainly the KGame configuration can be done
-	 * by the admin only.
-	 *
-	 * By default this does nothing. Changes the value for admin so 
-	 * don't forget to call the default implementation in derived classes!
-	 * @param admin Whether the KGame object of this dialog can be
-	 * configured
-	 **/
-	virtual void setAdmin(bool admin);
-
-	/**
-	 * A pointer to the     KGame object that has been set by @ref setKGame.
-	 *
-	 * Note that NULL is allowed!
-	 * @return The KGame object assigned to this dialog
-	 **/
-	KGame* game() const;
-
-	/**
-	 * A pointer to the KPlayer object that has been set by @ref
-	 * setOwner.
-	 *
-	 * Note that NULL is allowed!
-	 * @return The owner of the dialog
-	 **/
-	KPlayer* owner() const;
-
-	/**
-	 * @return True if the owner is ADMIN otherwise FALSE. See also
-	 * @ref setAdmin
-	 **/
-	bool admin() const;
-
-protected:
-
-private:
-	KGameDialogConfigPrivate* d;
-};
-
-/**
- * The main game configuration widget.
- * 
- * It currently contains a line edit for the name of the player only. You can
- * add widgets by using the KGameDialogGeneralConfig as parent parameter as it
- * uses TQLayout::autoAdd == true.
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameDialogGeneralConfigPrivate;
-class KGameDialogGeneralConfig : public KGameDialogConfig
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	/**
-	 * Construct a KGameDialogGeneralConfig. Currently it contains a line
-	 * edit widget to change the player name only.
-	 *
-	 * If you just want to add more widgets you can just create your widgets
-	 * with the KGameDialogGeneralConfig as parent as it uses
-	 * TQLayout::setAutoAdd(true).
-	 *
-	 * @param parent Parent widget for this dialog.
-	 * @param initializeGUI If you really don't want to use the 
-	 * predefined widget and/or tqlayout use FALSE here. Note that then none
-	 * of the predefined widgets (currently only the name of the player) 
-	 * will exist anymore.
-	 *
-	 **/
-	KGameDialogGeneralConfig(TQWidget* parent = 0, bool initializeGUI = true);
-	virtual ~KGameDialogGeneralConfig();
-
-	/**
-	 * Called by @ref KGameDialog to submit all settings to the KGame
-	 * Object.
-	 * You have to replace this if you add your own widgets!
-	 * @param g A pointer to your KGame.
-	 * @param p A pointer to the player owning this dialog
-	 **/
-	virtual void submitToKGame(KGame* g, KPlayer* p);
-
-	/**
-	 * Change the owner of the config widget.
-	 *
-	 * Changes the playername in the line edit
-	 * @param p The new owner player
-	 **/
-	virtual void setOwner(KPlayer* p);
-
-	/**
-	 * See @ref KGameDialogConfig::setKGame
-	 *
-	 * Sets the default values of all KGame related predefined widgets
-	 * (currently none)
-	 **/
-	virtual void setKGame(KGame* g);
-
-	/**
-	 * See @ref KGameDialogConfig::setAdmin
-	 *
-	 * This deactivates the min/max player widgets
-	 **/
-	virtual void setAdmin(bool admin);
-
-protected slots:
-	void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
-
-protected:
-	void setPlayerName(const TQString& name);
-
-	TQString playerName() const;
-
-private:
-	KGameDialogGeneralConfigPrivate* d;
-};
-
-class KGameDialogNetworkConfigPrivate;
-class KDE_EXPORT KGameDialogNetworkConfig : public KGameDialogConfig
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDialogNetworkConfig(TQWidget* parent = 0);
-	virtual ~KGameDialogNetworkConfig();
-
-
-	void disableInitConnection();
-
-	/**
-	 * Called by @ref KGameDialog to submit all settings to the KGame
-	 * Object.
-	 * You have to replace this if you add your own widgets!
-	 * @param g A pointer to your KGame.
-	 * @param p A pointer to the player owning this dialog
-	 **/
-	virtual void submitToKGame(KGame* g, KPlayer* p);
-
-	virtual void setKGame(KGame* g);
-
-	/**
-	 * This sets the default port and host used in @ref KGameConnectDialog.
-	 * The user will be able to change these defaults!
-	 *
-	 * If you don't call this then host "localhost" and port "0" is used.
-	 * You are strongly encouraged to change at least the port!
-	 * @param port The default port to connect to / listen on
-	 * @param host The default host to connect to
-	 **/
-	void setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server=true);
-	
-	/**
-	 * Set service type that will be published or browsed for and game name that will be displayed in 
-	 * server browser. Without this  publishing and discovery of LAN servers will not be enabled.
-	 * @param name Game name. Important only for server mode. If not
-	 * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
-	 * @param type Service type (something like _kwin4._tcp). It should be unique for application.
-	 * @since 3.4
-	 **/
-	void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
-	
-signals:
-  /**
-  * This signal is emmited if the user changes the server type (client/server)
-  * in the network configuration dialog. 
-  *
-  * @param t - type type (0/1) of the connection
-  **/
-  void signalServerTypeChanged(int);
-
-
-protected:
-	void setConnected(bool connected, bool master = false);
-
-protected slots:
-	void slotInitConnection();
-	void slotExitConnection();
-	void slotConnectionBroken();
-
-
-private:
-	KGameDialogNetworkConfigPrivate* d;
-};
-
-class KGameDialogMsgServerConfigPrivate;
-class KGameDialogMsgServerConfig : public KGameDialogConfig
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDialogMsgServerConfig(TQWidget* parent = 0);
-	virtual ~KGameDialogMsgServerConfig();
-
-	virtual void submitToKGame(KGame*, KPlayer*) {}
-
-	void setHasMsgServer(bool);
-
-	virtual void setKGame(KGame* g);
-	virtual void setAdmin(bool);
-
-protected slots:
-	void slotChangeMaxClients();
-	void slotChangeAdmin();
-	void slotRemoveClient();
-
-protected:
-	void removeClient(TQ_UINT32 id);
-
-private:
-	KGameDialogMsgServerConfigPrivate* d;
-};
-
-class KGameDialogChatConfigPrivate;
-/**
- * This is not really a configuration widget but rather a simple chat widget.
- * This widget does nothing but just providing a @ref KGameChat object.
- * @short A chat widget inside a @ref KGameDialog
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameDialogChatConfig : public KGameDialogConfig
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDialogChatConfig(int chatMsgId, TQWidget* parent = 0);
-	virtual ~KGameDialogChatConfig();
-
-	virtual void setKGame(KGame* g);
-	virtual void setOwner(KPlayer* p);
-
-	virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
-
-private:
-	KGameDialogChatConfigPrivate* d;
-};
-
-/**
- * @short Lists all connected players and gives the ability to kick them off the
- * game
- **/
-class KGameDialogConnectionConfigPrivate;
-class KGameDialogConnectionConfig : public KGameDialogConfig
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameDialogConnectionConfig(TQWidget* parent = 0);
-	virtual ~KGameDialogConnectionConfig();
-
-	virtual void setKGame(KGame* g);
-	virtual void setOwner(KPlayer* p);
-	virtual void setAdmin(bool admin);
-
-	virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
-
-protected:
-	/**
-	 * @param p A player
-	 * @return The TQListBoxItem that belongs to the player @p p
-	 **/
-	TQListBoxItem* item(KPlayer* p) const;
-
-protected slots:
-	void slotKickPlayerOut(TQListBoxItem* item);
-	void slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p);
-	void slotPlayerLeftGame(KPlayer* p);
-	void slotPlayerJoinedGame(KPlayer* p);
-	void slotClearPlayers();
-
-private:
-	KGameDialogConnectionConfigPrivate* d;
-		
-};
-#endif
diff --git a/libkdegames/kgame/dialogs/kgameerrordialog.cpp b/libkdegames/kgame/dialogs/kgameerrordialog.cpp
deleted file mode 100644
index 6ab9d71c..00000000
--- a/libkdegames/kgame/dialogs/kgameerrordialog.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include <kmessagebox.h>
-#include <klocale.h>
-#include <kdebug.h>
-
-#include "kgame.h"
-
-#include "kgameerrordialog.h"
-
-class KGameErrorDialogPrivate
-{
-public:
-	KGameErrorDialogPrivate()
-	{
-		mGame = 0;
-	}
-
-	const KGame* mGame;
-};
-
-KGameErrorDialog::KGameErrorDialog(TQWidget* parent) : TQObject(parent)
-{
- d = new KGameErrorDialogPrivate;
-}
-
-KGameErrorDialog::~KGameErrorDialog()
-{
- delete d;
-}
-
-void KGameErrorDialog::setKGame(const KGame* g)
-{
- slotUnsetKGame();
- d->mGame = g;
-
- connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-
-// the error signals:
- connect(d->mGame, TQT_SIGNAL(signalNetworkErrorMessage(int, TQString)), 
-		this, TQT_SLOT(slotError(int, TQString)));
- connect(d->mGame, TQT_SIGNAL(signalConnectionBroken()), 
-		this, TQT_SLOT(slotServerConnectionLost()));
- connect(d->mGame, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)), 
-		this, TQT_SLOT(slotClientConnectionLost(TQ_UINT32,bool)));
-}
-
-void KGameErrorDialog::slotUnsetKGame()
-{
- if (d->mGame) {
-	disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = 0;
-}
-
-void KGameErrorDialog::error(const TQString& errorText, TQWidget* parent)
-{ KMessageBox::error(parent, errorText); }
-
-void KGameErrorDialog::slotServerConnectionLost()
-{
-// TODO: add IP/port of the server
- TQString message = i18n("Connection to the server has been lost!");
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::slotClientConnectionLost(TQ_UINT32 /*id*/,bool)
-{
-//TODO: add IP/port of the client
- TQString message;
-// if (c) {
-//	message = i18n("Connection to client has been lost!\nID: %1\nIP: %2").tqarg(c->id()).tqarg(c->IP());
-// } else {
-//	message = i18n("Connection to client has been lost!");
-// }
- message = i18n("Connection to client has been lost!");
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::slotError(int errorNo, TQString text)
-{
- TQString message = i18n("Received a network error!\nError number: %1\nError message: %2").tqarg(errorNo).tqarg(text);
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::connectionError(TQString s)
-{
- TQString message;
- if (s.isNull()) {
-	message = i18n("No connection could be created.");
- } else {
-	message = i18n("No connection could be created.\nThe error message was:\n%1").tqarg(s);
- }
- error(message, (TQWidget*)parent());
-}
-
-
-
-// should become the real dialog - currently we just use messageboxes 
-// -> maybe unused forever
-KGameErrorMessageDialog::KGameErrorMessageDialog(TQWidget* parent) 
-		: KDialogBase(Plain, i18n("Error"), Ok, Ok, parent, 0, true, true)
-{
-}
-
-KGameErrorMessageDialog::~KGameErrorMessageDialog()
-{
-}
-
-
-
-#include "kgameerrordialog.moc"
diff --git a/libkdegames/kgame/dialogs/kgameerrordialog.h b/libkdegames/kgame/dialogs/kgameerrordialog.h
deleted file mode 100644
index 08726dc2..00000000
--- a/libkdegames/kgame/dialogs/kgameerrordialog.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEERRORDIALOG_H__
-#define __KGAMEERRORDIALOG_H__
-
-#include <kdialogbase.h>
-
-class KGame;
-class KGameErrorDialogPrivate;
-
-/**
- * Use error(), warning() and information() to display the information about a
- * network game. Maybe a better solution is to use KMessageBoxes
- * You can connect to the public slots, too - they will call the static
- * functions, so that you can always have a KGameErrorDialog object lying around
- * without losing much memory (a KGameErrorMessageDialog Object will be
- * created)
- * @short Error handling for KGame
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameErrorDialog : public TQObject
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameErrorDialog(TQWidget* parent);
-	~KGameErrorDialog();
-
-	/**
-	 * Automatically connects the KGame object to all error dependant slots. 
-	 * Create a KGameErrorDialog object, call this function and forget
-	 * everything.
-	 * @param g The KGame which will emit the erorrs (or not ;-) )
-	 **/
-	void setKGame(const KGame* g);
-
-	/**
-	 * KGame couldn't establish a connection. Use this if
-	 * KGame::initConnection returns false
-	 * @param s A string that describes the error further (like port is
-	 * already in use). Will be ignored if TQString()
-	 **/
-	void connectionError(TQString s = TQString());
-
-public slots:
-	void slotError(int error, TQString text);
-	
-	/**
-	 * The connection to the @ref KMessageServer has been lost
-	 *
-	 * See @ref KGameNetwork::signalConnectionBroken
-	 **/
-	void slotServerConnectionLost();
-
-	/**
-	 * The connection to a client has been lost by accident
-	 *
-	 * See @ref KGameNetwork::signalClientDisconnected
-	 **/
-	void slotClientConnectionLost(TQ_UINT32 clientID,bool broken);
-	
-	/**
-	 * Unsets a @ref KGame which has been set using @ref setKGame before.
-	 * This is called automatically when the @ref KGame object is destroyed
-	 * and you normally don't have to call this yourself.
-	 *
-	 * Note that @ref setKGame also unsets an already existing @ref KGame
-	 * object if exising.
-	 **/
-	void slotUnsetKGame();
-
-protected:
-	void error(const TQString& errorText, TQWidget* parent = 0);
-
-private:
-	KGameErrorDialogPrivate* d;
-};
-
-/**
- * The real class for error messages. KGameErrorDialog uses this to create error
- * messages (not yet).
- * Use @ref KGameErrorDialog instead.
- * @short Internally used by @ref KGameErrorDialog
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameErrorMessageDialog : public KDialogBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameErrorMessageDialog(TQWidget* parent);
-	~KGameErrorMessageDialog();
-
-private:
-};
-
-#endif
diff --git a/libkdegames/kgame/kgame.cpp b/libkdegames/kgame/kgame.cpp
deleted file mode 100644
index 2eebac64..00000000
--- a/libkdegames/kgame/kgame.cpp
+++ /dev/null
@@ -1,1475 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgame.h"
-#include "kgame.moc"
-#include "kgamepropertyhandler.h"
-#include "kgameproperty.h"
-#include "kplayer.h"
-#include "kgameio.h"
-#include "kgameerror.h"
-#include "kgamesequence.h"
-
-#include "kgamemessage.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include <tqbuffer.h>
-#include <tqtimer.h>
-#include <tqptrqueue.h>
-#include <tqfile.h>
-
-#include <klocale.h>
-#include <krandomsequence.h>
-#include <kdebug.h>
-
-#define KGAME_LOAD_COOKIE 4210
-
-// try to place as much as possible here
-// many things are *not* possible here as KGame has to use some inline function
-class KGamePrivate
-{
-public:
-    KGamePrivate()
-    {
-        mUniquePlayerNumber = 0;
-        mPolicy=KGame::PolicyLocal;
-        mGameSequence = 0;
-    }
-
-    int mUniquePlayerNumber;
-    TQPtrQueue<KPlayer> mAddPlayerList;// this is a list of to-be-added players. See addPlayer() docu
-    KRandomSequence* mRandom;
-    KGame::GamePolicy mPolicy;
-    KGameSequence* mGameSequence;
-
-
-    KGamePropertyHandler* mProperties;
-
-    // player lists
-    KGame::KGamePlayerList mPlayerList;
-    KGame::KGamePlayerList mInactivePlayerList;
-
-    //KGamePropertys
-    KGamePropertyInt mMaxPlayer;
-    KGamePropertyUInt mMinPlayer;
-    KGamePropertyInt mGametqStatus; // Game running?
-    TQValueList<int> mInactiveIdList;
-
-};
-
-// ------------------- GAME CLASS --------------------------
-KGame::KGame(int cookie,TQObject* parent) : KGameNetwork(cookie,parent)
-{
- kdDebug(11001) << k_funcinfo << " - " << this << ", sizeof(KGame)=" << sizeof(KGame) << endl;
- d = new KGamePrivate;
-
- d->mProperties = new KGamePropertyHandler(this);
-
- d->mProperties->registerHandler(KGameMessage::IdGameProperty,
-                                this,TQT_SLOT(sendProperty(int, TQDataStream&, bool* )),
-                                     TQT_SLOT(emitSignal(KGamePropertyBase *)));
- d->mMaxPlayer.registerData(KGamePropertyBase::IdMaxPlayer, this, i18n("MaxPlayers"));
- d->mMaxPlayer.setLocal(-1);  // Infinite
- d->mMinPlayer.registerData(KGamePropertyBase::IdMinPlayer, this, i18n("MinPlayers"));
- d->mMinPlayer.setLocal(0);   // Always ok
- d->mGametqStatus.registerData(KGamePropertyBase::IdGametqStatus, this, i18n("GameStatus"));
- d->mGametqStatus.setLocal(Init);
- // d->mUniquePlayerNumber = 0;
- d->mRandom = new KRandomSequence;
- d->mRandom->setSeed(0);
-
- connect(this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)),
-                this, TQT_SLOT(slotClientConnected(TQ_UINT32)));
- connect(this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)),
-                this, TQT_SLOT(slotClientDisconnected(TQ_UINT32,bool)));
- connect(this, TQT_SIGNAL(signalConnectionBroken()),
-                this, TQT_SLOT(slotServerDisconnected()));
-
- setGameSequence(new KGameSequence());
-
- // BL: FIXME This signal does no longer exist. When we are merging
- // MH: super....and how do I find out about the lost conenction now?
- // KGame and KGameNetwork, this could be improved!
-//  connect(this,TQT_SIGNAL(signalConnectionLost(KGameClient *)),
-//          this,TQT_SLOT(slotConnectionLost(KGameClient *)));
-}
-
-KGame::~KGame()
-{
- kdDebug(11001) << k_funcinfo << endl;
-// Debug();
- reset();
- delete d->mGameSequence;
- delete d->mRandom;
- delete d;
- kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-bool KGame::reset()
-{
- deletePlayers();
- deleteInactivePlayers();
- return true;
-}
-
-void KGame::deletePlayers()
-{
-// kdDebug(11001) << k_funcinfo << endl;
- KGamePlayerList tmp = d->mPlayerList; // in case of PolicyClean player=d->mPlayerList.first() is infinite
- KPlayer *player;
- while((player=tmp.first()))
- {
-   delete player; // delete and removes the player
-   tmp.removeFirst();
- }
-// kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-void KGame::deleteInactivePlayers()
-{
- KPlayer *player;
- while((player=d->mInactivePlayerList.first()))
- {
-   //player->setGame(0); // prevent call backs
-   d->mInactivePlayerList.remove(player);
-   delete player;
- }
-}
-
-bool KGame::load(TQString filename,bool reset)
-{
-  if (filename.isNull())
-  {
-    return false;
-  }
-  TQFile f(filename);
-  if (!f.open(IO_ReadOnly))
-  {
-    return false;
-  }
-  TQDataStream s( &f );
-  load(s,reset);
-  f.close();
-  return true;
-}
-
-bool KGame::load(TQDataStream &stream,bool reset)
-{ return loadgame(stream, false,reset); }
-
-bool KGame::loadgame(TQDataStream &stream, bool network,bool resetgame)
-{
- // Load Game Data
-
- // internal data
- TQ_INT32 c;
- stream >> c; // cookie
-
- if (c!=cookie())
- {
-   kdWarning(11001) << "Trying to load different game version we="<<cookie() << " saved=" << c << endl;
-   bool result=false;
-   emit signalLoadError(stream,network,(int)c,result);
-   return result;
- }
- if (resetgame) reset();
-
- uint i;
- stream >> i;
-// setPolicy((GamePolicy)i);
-
- stream >> d->mUniquePlayerNumber;
-
- if (gameSequence())
- {
-   gameSequence()->setCurrentPlayer(0);  // TODO !!!
- }
- int newseed;
- stream >> newseed;
- d->mRandom->setSeed(newseed);
-
- // Switch off the direct emitting of signals while
- // loading properties. This can cause inconsistencies
- // otherwise if a property emits and this emit accesses
- // a property not yet loaded
- // Note we habe to have this external locking to prevent the games unlocking
- // to access the players
- dataHandler()->lockDirectEmit();
- KPlayer *player;
- for ( player=playerList()->first(); player != 0; player=playerList()->next() )
- {
-   player->dataHandler()->lockDirectEmit();
-   // kdDebug(11001) << "Player "<<player->id() << " to indirect emit" <<endl;
- }
-
- // Properties
- dataHandler()->load(stream);
-
- // If there is additional data to be loaded before players are loaded then do
- // this here.
- emit signalLoadPrePlayers(stream);
-
- // Load Playerobjects
- uint playercount;
- stream >> playercount;
- kdDebug(11001) << "Loading KGame " << playercount << " KPlayer objects " << endl;
- for (i=0;i<playercount;i++)
- {
-   KPlayer *newplayer=loadPlayer(stream,network);
-   systemAddPlayer(newplayer);
- }
-
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie==KGAME_LOAD_COOKIE) {
-   kdDebug(11001) << "   Game loaded propertly"<<endl;
- } else {
-   kdError(11001) << "   Game loading error. probably format error"<<endl;
- }
-
- // Switch back on the direct emitting of signals and emit the
- // queued signals.
- // Note we habe to have this external locking to prevent the games unlocking
- // to access the players
- dataHandler()->unlockDirectEmit();
- for ( player=playerList()->first(); player != 0; player=playerList()->next() )
- {
-   player->dataHandler()->unlockDirectEmit();
-   // kdDebug(11001) << "Player "<<player->id() << " to direct emit" <<endl;
- }
-
- emit signalLoad(stream);
- return true;
-}
-
-bool KGame::save(TQString filename,bool saveplayers)
-{
- if (filename.isNull())
- {
-   return false;
- }
- TQFile f(filename);
- if (!f.open(IO_WriteOnly))
- {
-   return false;
- }
- TQDataStream s( &f );
- save(s,saveplayers);
- f.close();
- return true;
-}
-
-bool KGame::save(TQDataStream &stream,bool saveplayers)
-{ return savegame(stream, false,saveplayers); }
-
-bool KGame::savegame(TQDataStream &stream,bool /*network*/,bool saveplayers)
-{
-  // Save Game Data
-
-  // internal variables
-  TQ_INT32 c=cookie();
-  stream << c;
-
-  uint p=(uint)policy();
-  stream << p;
-  stream << d->mUniquePlayerNumber;
-  int newseed=(int)d->mRandom->getLong(65535);
-  stream << newseed;
-  d->mRandom->setSeed(newseed);
-
- // Properties
- dataHandler()->save(stream);
-
- // Save all data that need to be saved *before* the players are saved
- emit signalSavePrePlayers(stream);
-
- if (saveplayers)
- {
-   savePlayers(stream,playerList());
- }
- else
- {
-   stream << (uint)0; // no players saved
- }
-
- stream << (TQ_INT16)KGAME_LOAD_COOKIE;
-
- emit signalSave(stream);
- return true;
-}
-
-void KGame::savePlayer(TQDataStream &stream,KPlayer* p)
-{
-// this could be in KGameMessage as well
- stream << (TQ_INT32)p->rtti();
- stream << (TQ_INT32)p->id();
- stream << (TQ_INT32)p->calcIOValue();
- p->save(stream);
-}
-
-void KGame::savePlayers(TQDataStream &stream, KGamePlayerList *list)
-{
- if (!list)
- {
-   list=playerList();
- }
-
- TQ_INT32 cnt=list->count();
- kdDebug(11001) << "Saving KGame " << cnt << " KPlayer objects " << endl;
- stream << cnt;
- KPlayer *player;
- for ( player=list->first(); player != 0; player=list->next() )
- {
-   savePlayer(stream,player);
- }
-}
-
-KPlayer *KGame::createPlayer(int /*rtti*/,int /*io*/,bool /*isvirtual*/)
-{
-  kdWarning(11001) << "   No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
-  return new KPlayer;
-}
-KPlayer *KGame::loadPlayer(TQDataStream& stream,bool isvirtual)
-{
-  TQ_INT32 rtti,id,iovalue;
-  stream >> rtti >> id >> iovalue;
-  KPlayer *newplayer=findPlayer(id);
-  if (!newplayer)
-  {
-    kdDebug(11001) << k_funcinfo << "Player "<< id << " not found...asking user to create one " << endl;
-    newplayer=createPlayer(rtti,iovalue,isvirtual);
-    //emit signalCreatePlayer(newplayer,rtti,iovalue,isvirtual,this);
-  }
-  /*
-  if (!newplayer)
-  {
-    kdWarning(11001) << "   No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
-    newplayer=new KPlayer;
-  }
-  else
-  {
-    kdDebug(11001) << "   USER Player " << newplayer << " done player->rtti=" << newplayer->rtti() << " rtti=" << rtti << endl;
-  }
-  */
-  newplayer->load(stream);
-  if (isvirtual)
-  {
-    newplayer->setVirtual(true);
-  }
-  return newplayer;
-}
-
-// ----------------- Player handling -----------------------
-
-KPlayer * KGame::findPlayer(TQ_UINT32 id) const
-{
- for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
- {
-   if (it.current()->id() == id)
-   {
-     return it.current();
-   }
- }
- for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
- {
-   if (it.current()->id() == id)
-   {
-     return it.current();
-   }
- }
- return 0;
-}
-
-// it is necessary that addPlayer and systemAddPlayer are called in the same
-// order. Ie if addPlayer(foo) followed by addPlayer(bar) is called, you must
-// not call systemAddPlayer(bar) followed by systemAddPlayer(foo), as the
-// mAddPlayerList would get confused. Should be no problem as long as comServer
-// and the clients are working correctly.
-// BUT: if addPlayer(foo) does not arrive by any reason while addPlayer(bar)
-// does, we would be in trouble...
-void KGame::addPlayer(KPlayer* newplayer)
-{
- kdDebug(11001) << k_funcinfo << ":  " << "; maxPlayers=" << maxPlayers() << " playerCount=" << playerCount() << endl;
- if (!newplayer)
- {
-  kdFatal(11001) << "trying to add NULL player in KGame::addPlayer()" << endl;
-  return ;
- }
-
- if (maxPlayers() >= 0 && (int)playerCount() >= maxPlayers())
- {
-   kdWarning(11001) << "cannot add more than " << maxPlayers() << " players - deleting..." << endl;
-   delete newplayer;
-   return;
- }
-
- if (newplayer->id() == 0)
- {
-   d->mUniquePlayerNumber++;
-   newplayer->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber, gameId()));
-   kdDebug(11001) << k_funcinfo << "NEW!!! player " << newplayer << " now has id " << newplayer->id() << endl;
- }
- else
- {
-   // this could happen in games which use their own ID management by certain
-   // reasons. that is NOT recommended
-   kdDebug(11001) << k_funcinfo << "player " << newplayer << " already has an id: " << newplayer->id() << endl;
- }
-
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- // We distinguis here what policy we have
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
-   systemAddPlayer(newplayer);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
-   savePlayer(stream,newplayer);
-   // Store the player for delayed clean adding
-   if (policy()==PolicyClean)
-   {
-     d->mAddPlayerList.enqueue(newplayer);
-   }
-   sendSystemMessage(stream,(int)KGameMessage::IdAddPlayer, 0);
- }
-}
-
-void KGame::systemAddPlayer(KPlayer* newplayer)
-{
- if (!newplayer)
- {
-   kdFatal(11001) << "trying to add NULL player in KGame::systemAddPlayer()" << endl;
-   return ;
- }
- if (newplayer->id() == 0)
- {
-   kdWarning(11001) << k_funcinfo << "player " << newplayer << " has no ID" << endl;
- }
-
- if (findPlayer(newplayer->id()))
- {
-   kdError(11001) << "ERROR: Double adding player !!!!! NOT GOOD !!!!!! " << newplayer->id() << "...I delete it again" << endl;
-   delete newplayer;
- }
- else
- {
-   kdDebug(11001) << "Trying to add player " << newplayer <<" maxPlayers="<<maxPlayers()<<" playerCount="<<playerCount() << endl;
-   // Add the player to the game
-   d->mPlayerList.append(newplayer);
-   newplayer->setGame(this);
-   kdDebug(11001) << "Player: isVirtual=" << newplayer->isVirtual() << endl;
-   kdDebug(11001) << "        id=" << newplayer->id() << "  #Players="
-                  << d->mPlayerList.count() << " added " << newplayer
-                  << "  (virtual=" << newplayer->isVirtual() << ")" << endl;
-   emit signalPlayerJoinedGame(newplayer);
- }
-}
-
-// Called by the KPlayer destructor
-void KGame::playerDeleted(KPlayer *player)
-{
- kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
-   systemRemovePlayer(player,false);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
-   if (!player->isVirtual())
-   {
-     kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
-     sendSystemMessage(player->id(), KGameMessage::IdRemovePlayer, 0);
-   }
- }
-}
-
-bool KGame::removePlayer(KPlayer * player, TQ_UINT32 receiver)
-{//transmit to all clients, or to receiver only
- if (!player)
- {
-   kdFatal(11001) << "trying to remove NULL player in KGame::removePlayer()" << endl;
-   return false;
- }
- kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
-   systemRemovePlayer(player,true);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
-   kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
-   sendSystemMessage(player->id(),KGameMessage::IdRemovePlayer, receiver);
- }
- return true;
- // we will receive the message in networkTransmission()
-}
-
-void KGame::systemRemovePlayer(KPlayer* player,bool deleteit)
-{
- kdDebug(11001) << k_funcinfo << endl;
- if (!player)
- {
-   kdWarning(11001) << "cannot remove NULL player" << endl;
-   return;
- }
- if (!systemRemove(player,deleteit))
- {
-   kdWarning(11001) << "player " << player << "(" << player->id() << ") Could not be found!" << endl;
- }
-
- if (gametqStatus()==(int)Run && playerCount()<minPlayers())
- {
-   kdWarning(11001) << k_funcinfo ": not enough players, PAUSING game\n" << endl;
-   setGametqStatus(Pause);
- }
-}
-
-bool KGame::systemRemove(KPlayer* p,bool deleteit)
-{
- if (!p)
- {
-   kdWarning(11001) << "cannot remove NULL player" << endl;
-   return false;
- }
- bool result;
- kdDebug(11001) << k_funcinfo << ": Player (" << p->id() << ") to be removed " << p << endl;
-
- if (d->mPlayerList.count() == 0)
- {
-   result = false;
- }
- else
- {
-   result = d->mPlayerList.remove(p);
- }
-
- emit signalPlayerLeftGame(p);
-
- p->setGame(0);
- if (deleteit)
- {
-   delete p;
- }
-
- return result;
-}
-
-bool KGame::inactivatePlayer(KPlayer* player)
-{
- if (!player)
- {
-   return false;
- }
- kdDebug(11001) << "Inactivate player " << player->id() << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
-   systemInactivatePlayer(player);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
-   sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
- }
-
- return true;
-}
-
-bool KGame::systemInactivatePlayer(KPlayer* player)
-{
- if (!player || !player->isActive())
- {
-   return false;
- }
- kdDebug(11001) << " Inactivate player " << player->id() << endl;
-
- int pid=player->id();
- // Virtual players cannot be deactivated. They will be removed
- if (player->isVirtual())
- {
-   systemRemovePlayer(player,true);
- }
- else
- {
-   d->mPlayerList.remove(player);
-   d->mInactivePlayerList.prepend(player);
-   player->setActive(false);
- }
- emit signalPlayerLeftGame(player);
- if (isAdmin())
- {
-   d->mInactiveIdList.prepend(pid);
- }
- return true;
-}
-
-bool KGame::activatePlayer(KPlayer * player)
-{
-  if (!player)
-  {
-    return false;
-  }
-  kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
-  if (policy()==PolicyLocal || policy()==PolicyDirty)
-  {
-    systemActivatePlayer(player);
-  }
-  if (policy()==PolicyClean || policy()==PolicyDirty)
-  {
-    sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer);
-  }
- return true;
-}
-
-bool KGame::systemActivatePlayer(KPlayer* player)
-{
- if (!player || player->isActive())
- {
-   return false;
- }
- kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
-
- d->mInactivePlayerList.remove(player);
- player->setActive(true);
- addPlayer(player);
- if (isAdmin())
- {
-   d->mInactiveIdList.remove(player->id());
- }
- return true;
-}
-
-// -------------------- Properties ---------------------------
-
-void KGame::setMaxPlayers(uint maxnumber)
-{ if (isAdmin()) { d->mMaxPlayer.changeValue(maxnumber); } }
-
-void KGame::setMinPlayers(uint minnumber)
-{ if (isAdmin()) { d->mMinPlayer.changeValue(minnumber); } }
-
-uint KGame::minPlayers() const
-{ return d->mMinPlayer.value(); }
-
-int KGame::maxPlayers() const
-{ return d->mMaxPlayer.value(); }
-
-uint KGame::playerCount() const
-{ return d->mPlayerList.count(); }
-
-int KGame::gametqStatus() const
-{ return d->mGametqStatus.value(); }
-
-bool KGame::isRunning() const
-{ return d->mGametqStatus.value() == Run; }
-
-KGamePropertyHandler* KGame::dataHandler() const
-{ return d->mProperties; }
-
-
-KGame::KGamePlayerList* KGame::inactivePlayerList()
-{ return &d->mInactivePlayerList; }
-
-const KGame::KGamePlayerList* KGame::inactivePlayerList() const
-{ return &d->mInactivePlayerList; }
-
-KGame::KGamePlayerList* KGame::playerList()
-{ return &d->mPlayerList; }
-
-const KGame::KGamePlayerList* KGame::playerList() const
-{ return &d->mPlayerList; }
-
-KRandomSequence* KGame::random() const
-{ return d->mRandom; }
-
-
-bool KGame::sendPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
-{
- if (!player)
- {
-   kdError(11001) << k_funcinfo << ": NULL player" << endl;
-   return false;
- }
- if (!isRunning())
- {
-   kdError(11001) << k_funcinfo << ": game not running" << endl;
-   return false;
- }
-
- kdDebug(11001) << k_funcinfo << ": transmitting playerInput over network" << endl;
- sendSystemMessage(msg, (int)KGameMessage::IdPlayerInput, player->id(), sender);
- return true;
-}
-
-bool KGame::systemPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
-{
- if (!player)
- {
-   kdError(11001) << k_funcinfo << ": NULL player" << endl;
-   return false;
- }
- if (!isRunning())
- {
-   kdError(11001) << k_funcinfo << ": game not running" << endl;
-   return false;
- }
- kdDebug(11001) << "KGame: Got playerInput from messageServer... sender: " << sender << endl;
- if (playerInput(msg,player))
- {
-   playerInputFinished(player);
- }
- else
- {
-   kdDebug(11001) << k_funcinfo<<": switching off player input"<<endl;
-   // TODO: (MH 03-2003): We need an return option from playerInput so that
-   // the player's is not automatically disabled here 
-   if (!player->asyncInput())
-   {
-     player->setTurn(false); // in turn based games we have to switch off input now
-   }
- }
- return true;
-}
-
-
-KPlayer * KGame::playerInputFinished(KPlayer *player)
-{
- kdDebug(11001) << k_funcinfo<<"player input finished for "<<player->id()<<endl;
- // Check for game over and if not allow the next player to move
- int gameOver = 0;
- if (gameSequence())
- {
-   gameSequence()->setCurrentPlayer(player);
- }
- // do not call gameSequence()->checkGameOver() to keep backward compatibility!
- gameOver = checkGameOver(player);
- if (gameOver!=0)
- {
-   if (player)
-   {
-     player->setTurn(false);
-   }
-   setGametqStatus(End);
-   emit signalGameOver(gameOver,player,this);
- }
- else if (!player->asyncInput())
- {
-   player->setTurn(false); // in turn based games we have to switch off input now
-   if (gameSequence())
-   {
-     TQTimer::singleShot(0,this,TQT_SLOT(prepareNext()));
-   }
- }
- return player;
-}
-
-// Per default we do not do anything
-int KGame::checkGameOver(KPlayer *player)
-{
- if (gameSequence())
- {
-   return gameSequence()->checkGameOver(player);
- }
- return 0;
-}
-
-void KGame::setGameSequence(KGameSequence* sequence)
-{
- delete d->mGameSequence;
- d->mGameSequence = sequence;
- if (d->mGameSequence)
- {
-   d->mGameSequence->setGame(this);
- }
-}
-
-KGameSequence* KGame::gameSequence() const
-{
-  return d->mGameSequence;
-}
-
-void KGame::prepareNext()
-{
- if (gameSequence())
- {
-   // we don't call gameSequence->nextPlayer() to keep old code working
-   nextPlayer(gameSequence()->currentPlayer());
- }
-}
-
-KPlayer *KGame::nextPlayer(KPlayer *last,bool exclusive)
-{
- if (gameSequence())
- {
-   return gameSequence()->nextPlayer(last, exclusive);
- }
- return 0;
-}
-
-void KGame::setGametqStatus(int status)
-{
- kdDebug(11001) << k_funcinfo << ": GAMESTATUS CHANGED  to" << status << endl;
- if (status==(int)Run && playerCount()<minPlayers()) 
- {
-   kdDebug(11001) << k_funcinfo << ": not enough players, pausing game\n" << endl;
-   status=Pause;
- }
- d->mGametqStatus = status;
-}
-
-void KGame::networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 /*clientID*/)
-{//clientID is unused
- // message targets a playerobject. If we find it we forward the message to the
- // player. Otherwise we proceed here and hope the best that the user processes
- // the message
-
-//  kdDebug(11001) << k_funcinfo << ": we="<<(int)gameId()<<" id="<<msgid<<" recv=" << receiver << " sender=" << sender << endl;
-
- 
- // *first* notice the game that something has changed - so no return prevents
- // this
- emit signalMessageUpdate(msgid, receiver, sender);
- if (KGameMessage::isPlayer(receiver))
- {
-   //kdDebug(11001) << "message id " << msgid << " seems to be for a player ("<<active=p->isActive()<<" recv="<< receiver << endl;
-   KPlayer *p=findPlayer(receiver);
-   if (p && p->isActive())
-   {
-     p->networkTransmission(stream,msgid,sender);
-     return;
-   }
-   if (p)
-   {
-      kdDebug(11001) << "player is here but not active" << endl;
-   }
-   else
-   {
-      kdDebug(11001) << "no player found" << endl;
-   }
- }
- // If it is not for a player it is meant for us!!!! Otherwise the
- // gamenetwork would not have passed the message to us!
-
- // GameProperties processed
- if (d->mProperties->processMessage(stream, msgid, sender == gameId())) 
- {
-//   kdDebug(11001 ) << "KGame: message taken by property - returning" << endl;
-   return ;
- }
-
- switch(msgid)
- {
-   case KGameMessage::IdSetupGame:  // Client: First step in setup game
-   {
-     TQ_INT16 v;
-     TQ_INT32 c;
-     stream >> v >> c;
-     kdDebug(11001) << " ===================> (Client) " << k_funcinfo << ": Got IdSetupGame ================== " << endl;
-     kdDebug(11001) << "our game id is " << gameId() << " Lib version=" << v << " App Cookie=" << c << endl; 
-     // Verify identity of the network partners
-     if (c!=cookie())
-     {
-       kdError(11001) << "IdGameSetup: Negotiate Game: cookie mismatch I'am="<<cookie()<<" master="<<c<<endl;
-       sendError(KGameError::Cookie, KGameError::errCookie(cookie(), c));
-       disconnect(); // disconnect from master
-     }
-     else if (v!=KGameMessage::version())
-     {
-       sendError(KGameError::Version, KGameError::errVersion(v));
-       disconnect(); // disconnect from master
-     }
-     else
-     {
-       setupGame(sender);
-     }
-     kdDebug(11001) << "========== (Client) Setup game done\n";
-   }
-   break;
-   case KGameMessage::IdSetupGameContinue:  // Master: second step in game setup
-   {
-     kdDebug(11001) << "=====>(Master) " << k_funcinfo << " - IdSetupGameContinue" << endl;
-     setupGameContinue(stream, sender);
-   }
-   break;
-   case KGameMessage::IdActivatePlayer:  // Activate Player
-   {
-     int id;
-     stream >> id;
-     kdDebug(11001) << "Got IdActivatePlayer id=" << id << endl;
-     if (sender!=gameId()  || policy()!=PolicyDirty)
-     {
-       systemActivatePlayer(findPlayer(id));
-     }
-   }
-   break;
-   case KGameMessage::IdInactivatePlayer:  // Inactivate Player
-   {
-     int id;
-     stream >> id;
-     kdDebug(11001) << "Got IdInactivatePlayer id=" << id << endl;
-     if (sender!=gameId()  || policy()!=PolicyDirty)
-     {
-       systemInactivatePlayer(findPlayer(id));
-     }
-   }
-   break;
-   case KGameMessage::IdAddPlayer:
-   {
-     kdDebug(11001) << k_funcinfo << ": Got IdAddPlayer" << endl;
-     if (sender!=gameId()  || policy()!=PolicyDirty)
-     {
-       KPlayer *newplayer=0;
-       // We sent the message so the player is already available
-       if (sender==gameId())
-       {
-          kdDebug(11001) << "dequeue previously added player" << endl;
-          newplayer = d->mAddPlayerList.dequeue();
-       }
-       else
-       {
-         newplayer=loadPlayer(stream,true);
-       }
-       systemAddPlayer(newplayer);// the final, local, adding
-       //systemAddPlayer(stream);
-     }
-   }
-   break;
-   case KGameMessage::IdRemovePlayer: // Client should delete player id
-   {
-     int id;
-     stream >> id;
-     kdDebug(11001) << k_funcinfo << ": Got IdRemovePlayer " << id << endl;
-     KPlayer *p=findPlayer(id);
-     if (p)
-     {
-       // Otherwise the player is already removed
-       if (sender!=gameId()  || policy()!=PolicyDirty)
-       {
-         systemRemovePlayer(p,true);
-       }
-     }
-     else
-     {
-       kdWarning(11001) << k_funcinfo << "Cannot find player " << id << endl;
-     }
-   }
-   break;
-   case KGameMessage::IdGameLoad:
-   {
-     kdDebug(11001) << "====> (Client) " << k_funcinfo << ": Got IdGameLoad" << endl;
-     loadgame(stream,true,false);
-   }
-   break;
-   case KGameMessage::IdGameSetupDone:
-   {
-     int cid;
-     stream >> cid;
-     kdDebug(11001) << "====> (CLIENT) " << k_funcinfo << ": Got IdGameSetupDone for client "
-             << cid << " we are =" << gameId() << endl;
-     sendSystemMessage(gameId(), KGameMessage::IdGameConnected, 0);
-   }
-   break;
-   case KGameMessage::IdGameConnected:
-   {
-     int cid;
-     stream >> cid;
-     kdDebug(11001) << "====> (ALL) " << k_funcinfo << ": Got IdGameConnected for client "<< cid << " we are =" << gameId() << endl;
-     emit signalClientJoinedGame(cid,this);
-   }
-   break;
-
-   case KGameMessage::IdSyncRandom:  // Master forces a new random seed on us
-   {
-     int newseed;
-     stream >> newseed;
-     kdDebug(11001) << "CLIENT: setting random seed to " << newseed << endl;
-     d->mRandom->setSeed(newseed);
-   }
-   break;
-   case KGameMessage::IdDisconnect:
-   {
-   // if we disconnect we *always* start a local game. 
-   // this could lead into problems if we just change the message server
-     if (sender != gameId())
-     {
-         kdDebug(11001) << "client " << sender << " leaves game" << endl;
-         return;
-     }
-     kdDebug(11001) << "leaving the game" << endl;
-     // start a new local game
-     // no other client is by default connected to this so this call should be
-     // enough
-     setMaster();
-   }
-   break;
-   default:
-    {
-     if (msgid < KGameMessage::IdUser)
-     {
-       kdError(11001) << "incorrect message id " << msgid << " - emit anyway"
-                      << endl;
-     }
-     kdDebug(11001) << k_funcinfo << ": User data msgid " << msgid << endl;
-     emit signalNetworkData(msgid - KGameMessage::IdUser,((TQBuffer*)stream.device())->readAll(),receiver,sender);
-   }
-   break;
- }
-
-}
-
-// called by the IdSetupGameContinue Message - MASTER SIDE
-// Here the master needs to decide which players can take part at the game
-// and which will be deactivated
-void KGame::setupGameContinue(TQDataStream& stream, TQ_UINT32 sender)
-{
-  KPlayer *player;
-  TQ_INT32 cnt;
-  int i;
-  stream >> cnt;
-
-  TQValueList<int> inactivateIds;
-
-  KGamePlayerList newPlayerList;
-  newPlayerList.setAutoDelete(true);
-  for (i=0;i<cnt;i++)
-  {
-    player=loadPlayer(stream,true);
-    kdDebug(11001) << " Master got player " << player->id() <<" rawgame=" << KGameMessage::rawGameId(player->id())  << " from sender " << sender << endl;
-    if (KGameMessage::rawGameId(player->id()) != sender)
-    {
-      kdError(11001) << "Client tries to add player with wrong game id - cheat possible" << endl;
-    }
-    else
-    {
-      newPlayerList.append(player);
-      kdDebug(11001) << " newplayerlist appended " << player->id() << endl;
-    }
-  }
-
-  newPlayersJoin(playerList(),&newPlayerList,inactivateIds);
-
-
-  kdDebug(11001) << " Master calculates how many players to activate client has cnt=" << cnt << endl;
-  kdDebug(11001) << " The game has " << playerCount() << " active players" << endl;
-  kdDebug(11001) << " The user deactivated "<< inactivateIds.count() << " player already " << endl;
-  kdDebug(11001) << " MaxPlayers for this game is " << maxPlayers() << endl;
-
-  // Do we have too many players? (After the programmer disabled some?)
-  // MH: We cannot use have player here as it CHANGES in the loop
-  // int havePlayers = cnt+playerCount()-inactivateIds.count();
-  kdDebug(11001) << " havePlayers " << cnt+playerCount()-inactivateIds.count() << endl;
-  while (maxPlayers() > 0 && maxPlayers() < (int)(cnt+playerCount() - inactivateIds.count()))
-  {
-    kdDebug(11001) << "  Still to deacticvate "
-            << (int)(cnt+playerCount()-inactivateIds.count())-(int)maxPlayers() 
-            << endl;
-    KPlayer *currentPlayer=0;
-    int currentPriority=0x7fff; // MAX_UINT (16bit?) to get the maximum of the list
-    // find lowest network priority which is not yet in the newPlayerList
-    // do this for the new players
-    for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() ) 
-    {
-      // Already in the list
-      if (inactivateIds.find(player->id())!=inactivateIds.end()) 
-      {
-        continue;
-      }
-      if (player->networkPriority()<currentPriority)
-      {
-        currentPriority=player->networkPriority();
-        currentPlayer=player;
-      }
-    }
-
-    // find lowest network priority which is not yet in the newPlayerList
-    // Do this for the network players
-    for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
-    {
-      // Already in the list
-      if (inactivateIds.find(player->id())!=inactivateIds.end()) 
-      {
-        continue;
-      }
-      if (player->networkPriority()<currentPriority)
-      {
-        currentPriority=player->networkPriority();
-        currentPlayer=player;
-      }
-    }
-
-    // add it to inactivateIds
-    if (currentPlayer)
-    {
-      kdDebug(11001) << "Marking player " << currentPlayer->id() << " for inactivation" << endl;
-      inactivateIds.append(currentPlayer->id());
-    }
-    else
-    {
-      kdError(11001) << "Couldn't find a player to dectivate..That is not so good..." << endl;
-      break;
-    }
-  }
-
-  kdDebug(11001) << "Alltogether deactivated " << inactivateIds.count() << " players" << endl;
-
-  TQValueList<int>::Iterator it;
-  for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
-  {
-    int pid=*it;
-    kdDebug(11001) << " pid=" << pid << endl;
-  }
-
-  // Now deactivate the network players from the inactivateId list
-  //TQValueList<int>::Iterator it;
-  for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
-  {
-    int pid=*it;
-    if (KGameMessage::rawGameId(pid) == sender)
-    {
-      continue; // client's player
-    }
-    kdDebug(11001) << " -> the network needs to deactivate " << pid <<endl;
-    player=findPlayer(pid);
-    if (player)
-    {
-      // We have to make REALLY sure that the player is gone. With any policy
-      systemInactivatePlayer(player);
-      if (policy()!=PolicyLocal)
-      {
-        sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
-      }
-    }
-    else
-    {
-      kdError(11001) << " We should deactivate a player, but cannot find it...not good." << endl;
-    }
-  }
-
-  // Now send out the player list which the client can activate
-  for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() )
-  {
-    kdDebug(11001) << " newplayerlist contains " << player->id() << endl;
-    // Only activate what is not in the list
-    if (inactivateIds.find(player->id())!=inactivateIds.end())
-    {
-      continue;
-    }
-    kdDebug(11001) << " -> the client can ******** reactivate ********  " << player->id() << endl;
-    sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer, sender);
-  }
-
-  // Save the game over the network
-  TQByteArray bufferS;
-  TQDataStream streamS(bufferS,IO_WriteOnly);
-  // Save game over netowrk and save players
-  savegame(streamS,true,true);
-  sendSystemMessage(streamS,KGameMessage::IdGameLoad,sender);
-
-
-  // Only to the client first , as the client will add players
-  sendSystemMessage(sender, KGameMessage::IdGameSetupDone, sender);
-}
-
-// called by the IdSetupGame Message - CLIENT SIDE
-// Client needs to prepare for network transfer
-void KGame::setupGame(TQ_UINT32 sender)
-{
-  TQByteArray bufferS;
-  TQDataStream streamS(bufferS,IO_WriteOnly);
-
-  // Deactivate all players
-  KGamePlayerList mTmpList(d->mPlayerList); // we need copy otherwise the removal crashes
-  TQ_INT32 cnt=mTmpList.count();
-  kdDebug(11001) << "Client: playerlistcount=" << d->mPlayerList.count() << " tmplistcout=" << cnt << endl;
-
-  streamS << cnt;
-
-  TQPtrListIterator<KPlayer> it(mTmpList);
-  KPlayer *player;
-  while (it.current())
-  {
-    player=it.current();
-    systemInactivatePlayer(player);
-    // Give the new game id to all players (which are inactivated now)
-    player->setId(KGameMessage::createPlayerId(player->id(),gameId()));
-
-    // Save it for the master to decide what to do
-    savePlayer(streamS,player);
-
-    ++it;
-    --cnt;
-  }
-  if (d->mPlayerList.count() > 0 || cnt!=0)
-  {
-    kdFatal(11001) << "KGame::setupGame(): Player list is not empty! or cnt!=0=" <<cnt << endl;
-  }
-
-  sendSystemMessage(streamS,KGameMessage::IdSetupGameContinue,sender);
-}
-
-// unused by KGame
-void KGame::syncRandom()
-{
- int newseed=(int)d->mRandom->getLong(65535);
- sendSystemMessage(newseed,KGameMessage::IdSyncRandom); // Broadcast
- d->mRandom->setSeed(newseed);
-}
-
-void KGame::Debug()
-{
- KGameNetwork::Debug();
- kdDebug(11001) << "------------------- KGAME -------------------------" << endl;
- kdDebug(11001) << "this:          " << this << endl;
- kdDebug(11001) << "uniquePlayer   " << d->mUniquePlayerNumber << endl;
- kdDebug(11001) << "gameStatus     " << gametqStatus() << endl;
- kdDebug(11001) << "MaxPlayers :   " << maxPlayers() << endl;
- kdDebug(11001) << "NoOfPlayers :  " << playerCount() << endl;
- kdDebug(11001) << "NoOfInactive:  " << d->mInactivePlayerList.count() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-void KGame::slotClientConnected(TQ_UINT32 clientID)
-{
- if (isAdmin())
- {
-   negotiateNetworkGame(clientID);
- }
-}
-
-void KGame::slotServerDisconnected() // Client side
-{
-  kdDebug(11001) << "======= SERVER DISCONNECT ======="<<endl;
-  kdDebug(11001) << "+++ (CLIENT)++++++++" << k_funcinfo << ": our GameID="<<gameId() << endl;
-
-  int oldgamestatus=gametqStatus();
-
-  KPlayer *player;
-  KGamePlayerList removeList;
-  kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
-  kdDebug(11001) << "Inactive Playerlist of client=" << d->mInactivePlayerList.count() << " count" << endl;
-  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
-  {
-    // TODO: CHECK: id=0, could not connect to server in the first place??
-    if (KGameMessage::rawGameId(player->id()) != gameId() && gameId()!=0)
-    {
-      kdDebug(11001) << "Player " << player->id() << " belongs to a removed game" << endl;
-      removeList.append(player);
-    }
-  }
-
-  for ( player=removeList.first(); player != 0; player=removeList.next() )
-  {
-    bool remove = true;
-    emit signalReplacePlayerIO(player, &remove);
-    if (remove)
-    {
-      kdDebug(11001) << " ---> Removing player " << player->id() <<  endl;
-      systemRemovePlayer(player,true); // no network necessary
-    }
-  }
-
-  setMaster();
-  kdDebug(11001) << " our game id is after setMaster " << gameId() << endl;
-
-  KGamePlayerList mReList(d->mInactivePlayerList);
-  for ( player=mReList.first(); player != 0; player=mReList.next() )
-  {
-    // TODO ?check for priority? Sequence should be ok
-    if ((int)playerCount()<maxPlayers() || maxPlayers()<0)
-    {
-      systemActivatePlayer(player);
-    }
-  }
-  kdDebug(11001) << " Players activated player-cnt=" << playerCount() << endl;
-
-  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
-  {
-    int oldid=player->id();
-    d->mUniquePlayerNumber++;
-    player->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber,gameId()));
-    kdDebug(11001) << "Player id " << oldid <<" changed to " << player->id() << " as we are now local" << endl;
-  }
-  // TODO clear inactive lists ?
-  Debug();
-  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
-  {
-    player->Debug();
-  }
-  kdDebug(11001) << "+++++++++++" << k_funcinfo << " DONE=" << endl;
-  emit signalClientLeftGame(0,oldgamestatus,this);
-}
-
-void KGame::slotClientDisconnected(TQ_UINT32 clientID,bool /*broken*/) // server side
-{
- kdDebug(11001) << "++++(SERVER)+++++++" << k_funcinfo << " clientId=" << clientID << endl;
-
- int oldgamestatus=gametqStatus();
-
- KPlayer *player;
- KGamePlayerList removeList;
- kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
-   if (KGameMessage::rawGameId(player->id())==clientID)
-   {
-     kdDebug(11001) << "Player " << player->id() << " belongs to the removed game" << endl;
-     removeList.append(player);
-   }
- }
-
- for ( player=removeList.first(); player != 0; player=removeList.next() )
- {
-   // try to replace the KGameIO first
-   bool remove = true;
-   emit signalReplacePlayerIO(player, &remove);
-   if (remove) {
-     // otherwise (no new KGameIO) remove the player
-     kdDebug(11001) << " ---> Removing player " << player->id() <<  endl;
-     removePlayer(player,0);
-   }
- }
-
- // Now add inactive players - sequence should be ok
- // TODO remove players from removed game
- for (unsigned int idx=0;idx<d->mInactiveIdList.count();idx++)
- {
-   TQValueList<int>::Iterator it1 = d->mInactiveIdList.at(idx);
-   player = findPlayer(*it1);
-   if (((int)playerCount() < maxPlayers() || maxPlayers() < 0) && player && KGameMessage::rawGameId(*it1) != clientID)
-   {
-     activatePlayer(player);
-   }
- }
-  emit signalClientLeftGame(clientID,oldgamestatus,this);
-}
-
-
-// -------------------- Synchronisation -----------------------
-
-// this initializes a newly connected client.
-// we send the number of players (including type) as well as game status and
-// properties to the client. After the initialization has been completed both
-// clients should have the same status (ie players, properties, etc)
-void KGame::negotiateNetworkGame(TQ_UINT32 clientID)
-{
- kdDebug(11001) << "===========================" << k_funcinfo << ": clientID=" << clientID << " =========================== "<< endl;
- if (!isAdmin())
- {
-   kdError(11001) << k_funcinfo << ": Serious WARNING..only gameAdmin should call this" << endl;
-   return ;
- }
-
- TQByteArray buffer;
- TQDataStream streamGS(buffer,IO_WriteOnly);
-
- // write Game setup specific data
- //streamGS << (TQ_INT32)maxPlayers();
- //streamGS << (TQ_INT32)minPlayers();
-
- // send to the newly connected client *only*
- TQ_INT16 v=KGameMessage::version();
- TQ_INT32 c=cookie();
- streamGS << v << c;
- sendSystemMessage(streamGS, KGameMessage::IdSetupGame, clientID);
-}
-
-bool KGame::sendGroupMessage(const TQByteArray &msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{
-// AB: group must not be i18n'ed!! we should better use an id for group and use
-// a groupName() for the name // FIXME
- KPlayer *player;
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
-   if (player && player->group()==group)
-   {
-     sendMessage(msg,msgid,player->id(), sender);
-   }
- }
- return true;
-}
-
-bool KGame::sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{ return sendGroupMessage(((TQBuffer*)msg.device())->buffer(), msgid, sender, group); }
-
-bool KGame::sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- stream << msg;
- return sendGroupMessage(stream, msgid, sender, group);
-}
-
-bool KGame::addProperty(KGamePropertyBase* data)
-{ return dataHandler()->addProperty(data); }
-
-bool KGame::sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId)
-{ return sendSystemMessage(s, msgid, playerId); }
-
-void KGame::sendProperty(int msgid, TQDataStream& stream, bool* sent)
-{
-  bool s = sendSystemMessage(stream, msgid);
-  if (s)
-  {
-    *sent = true;
-  }
-}
-
-void KGame::emitSignal(KGamePropertyBase *me)
-{
- emit signalPropertyChanged(me,this);
-}
-
-KGamePropertyBase* KGame::findProperty(int id) const
-{ return d->mProperties->find(id); }
-
-KGame::GamePolicy KGame::policy() const
-{
- return d->mPolicy;
-}
-void KGame::setPolicy(GamePolicy p,bool recursive)
-{
- // Set KGame policy
- d->mPolicy=p;
- if (recursive)
- {
-   // Set all KGame property policy
-   dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
-
-   // Set all KPLayer (active or inactive) property policy
-   for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
-   {
-     it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
-   }
-   for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
-   {
-     it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
-   }
- }
-}
-
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgame.h b/libkdegames/kgame/kgame.h
deleted file mode 100644
index bf66dcb8..00000000
--- a/libkdegames/kgame/kgame.h
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAME_H_
-#define __KGAME_H_
-
-#include <tqstring.h>
-#include <tqptrlist.h>
-#include <tqvaluelist.h>
-
-#include "kgamenetwork.h"
-#include <kdemacros.h>
-class KRandomSequence;
-
-class KPlayer;
-class KGamePropertyBase;
-class KGamePropertyHandler;
-class KGameSequence;
-
-class KGamePrivate;
-
-/**
- * @short The main KDE game object
- *
- * The KGame class is the central game object. A game basically
- * consists of following features:
- * - Player handling (add, remove,...)
- * - Game status (end,start,pause,...)
- * - load/save
- * - Move (and message) handling
- * - nextPlayer and gameOver()
- * - Network connection (for KGameNetwork)
- *
- * Example:
- * \code
- * KGame *game=new KGame;
- * \endcode
- *
- *
- * @author Martin Heni <martin@heni-online.de>
- *
- */
-class KDE_EXPORT KGame : public KGameNetwork
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-	typedef TQPtrList<KPlayer> KGamePlayerList;
-
-	/**
-	 * The policy of the property. This can be PolicyClean (setVale uses
-	 * send), PolicyDirty (setValue uses changeValue) or
-	 * PolicyLocal (setValue uses setLocal).
-	 *
-	 * A "clean" policy means that the property is always the same on every
-	 * client. This is achieved by calling send which actually changes
-	 * the value only when the message from the MessageServer is received.
-	 *
-	 * A "dirty" policy means that as soon as setValue is called the
-	 * property is changed immediately. And additionally sent over network.
-	 * This can sometimes lead to bugs as the other clients do not
-	 * immediately have the same value. For more information see
-	 * changeValue.
-	 *
-	 * PolicyLocal means that a KGameProperty behaves like ever
-	 * "normal" variable. Whenever setValue is called (e.g. using "=")
-	 * the value of the property is changes immediately without sending it
-	 * over network. You might want to use this if you are sure that all
-	 * clients set the property at the same time.
-	 **/
-	enum GamePolicy
-	{
-		PolicyUndefined = 0,
-		PolicyClean = 1,
-		PolicyDirty = 2,
-		PolicyLocal = 3
-	};
-
-    /**
-     * Create a KGame object. The cookie is used to identify your
-     * game in load/save and network operations. Change this between
-     * games.
-     */
-    KGame(int cookie=42,TQObject* parent=0);
-
-    /**
-    * Destructs the game
-    */
-    virtual ~KGame();
-
-    /**
-     * Gives debug output of the game status
-     */
-    virtual void Debug();
-
-    /**
-     * Game status - Use this to Control the game flow.
-     * The KGame e.g. sets the status to Pause when you have
-     * less player than the minimum amount
-     */
-	enum GametqStatus
-	{
-		Init = 0,
-		Run = 1,
-		Pause = 2,
-		End = 3,
-		Abort = 4,
-		SystemPause = 5,
-		Intro = 6,
-		UsertqStatus = 7
-	};
-
-    // Properties
-    /**
-     * Returns a list of all active players
-     *
-     * @return the list of players
-     */
-    KGamePlayerList *playerList();
-
-    /**
-     * The same as @ref playerList but returns a const pointer.
-     **/
-    const KGamePlayerList *playerList() const;
-
-    /**
-     * Returns a list of all inactive players
-     * @return the list of players
-     */
-    KGamePlayerList *inactivePlayerList();
-
-    /**
-     * The same as @ref inactivePlayerList but returns a const pointer.
-     **/
-    const KGamePlayerList *inactivePlayerList() const;
-
-    /**
-     * Returns a pointer to the game's KRandomSequence. This sequence is
-     * identical for all network players!
-     * @return KRandomSequence pointer
-     */
-    KRandomSequence *random() const;
-
-    /**
-     * @return The KGameSequence object that is currently in use.
-     * @see setGameSequence
-     **/
-    KGameSequence *gameSequence() const;
-
-    /**
-     * Is the game running
-     * @return true/false
-     */
-    bool isRunning() const;
-
-    // Player handling
-    /**
-     * Returns the player object for a given player id
-     * @param id Player id
-     * @return player object
-     */
-    KPlayer *findPlayer(TQ_UINT32 id) const;
-
-    /**
-     * Set a new @ref KGameSequence to control player management. By default
-     * KGame uses a normal @ref KGameSequence object. You might want to subclass
-     * that and provide your own object.
-     *
-     * The previous sequence will get deleted.
-     * @param sequence The new game sequence object. KGame takes ownership and
-     * will delete it on destruction!
-     **/
-    void setGameSequence(KGameSequence* sequence);
-
-    /**
-     * Note that KPlayer::save must be implemented properly, as well as
-     * KPlayer::rtti
-     * This will only send a message to all clients. The player is _not_ added
-     * directly!
-     * See also playerInput which will be called as soon as the
-     * player really has been added.
-     *
-     * Note that an added player will first get into a "queue" and won't be in
-     * the game. It will be added to the game as soon as systemAddPlayer is
-     * called what will happen as soon as IdAddPlayer is received.
-     *
-     * Note: you probably want to connect to signalPlayerJoinedGame for
-     * further initialization!
-     * @param newplayer The player you want to add. KGame will send a message to
-     * all clients and add the player using systemAddPlayer
-     **/
-    void addPlayer(KPlayer* newplayer);
-
-    /**
-     * Sends a message over the network, msgid=IdRemovePlayer.
-     *
-     * As soon as this message is received by networkTransmission
-     * systemRemovePlayer is called and the player is removed.
-     **/
-    //AB: TODO: make sendMessage to return if the message will be able to be
-    //sent, eg if a socket is connected, etc. If sendMessage returns false
-    //remove the player directly using systemRemovePlayer
-    bool removePlayer(KPlayer * player) { return removePlayer(player, 0); }
-
-    /**
-     * Called by the destructor of KPlayer to remove itself from the game
-     *
-     **/
-    void playerDeleted(KPlayer * player);
-
-    /**
-     * sends activate player: internal use only?
-     */
-    bool activatePlayer(KPlayer *player);
-
-    /**
-     * sends inactivate player: internal use only?
-     */
-    bool inactivatePlayer(KPlayer *player);
-
-    /**
-     * Set the maximal number of players. After this is
-     * reached no more players can be added. You must be ADMIN to call this (@see
-     * isAdmin).
-     * @param maxnumber maximal number of players
-     */
-    void setMaxPlayers(uint maxnumber);
-
-    /**
-     * What is the maximal number of players?
-     * @return maximal number of players
-     */
-    int maxPlayers() const;
-
-    /**
-     * Set the minimal number of players. A game can not be started
-     * with less player resp. is paused when already running. You must be ADMIN
-     * to call this (see @ref isAdmin)!
-     * @param minnumber minimal number of players
-     */
-    void setMinPlayers(uint minnumber);
-
-    /**
-     * What is the minimal number of players?
-     * @return minimal number of players
-     */
-    uint minPlayers() const;
-
-    /**
-     * Returns how many players are plugged into the game
-     * @return number of players
-     */
-    uint playerCount() const;
-
-    /**
-     * @deprecated
-     * Use @ref KGameSequence::nextPlayer instead
-     **/
-    virtual KPlayer * nextPlayer(KPlayer *last,bool exclusive=true);
-
-    // Input events
-    /**
-     * Called by KPlayer to send a player input to the
-     * KMessageServer.
-     **/
-    virtual bool sendPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
-
-    /**
-     * Called when a player input arrives from KMessageServer.
-     *
-     * Calls prepareNext (using TQTimer::singleShot) if gameOver()
-     * returns 0. This function should normally not be used outside KGame.
-     * It could be made non-virtual,protected in a later version. At the
-     * moment it is a virtual function to give you more control over KGame.
-     *
-     * For documentation see playerInput.
-     **/
-    virtual bool systemPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
-
-    /**
-    * This virtual function is called if the KGame needs to create a new player.
-    * This happens only over a network and with load/save. Doing nothing
-    * will create a default KPlayer. If you want to have your own player
-    * you have to create one with the given rtti here.
-    * Note: If your game uses a player class derived from KPlayer you MUST
-    * override this function and create your player here. Otherwise the
-    * game will crash.
-    * Example:
-    * \code
-    *  KPlayer *MyGame::createPlayer(int rtti,int io,bool isvirtual)
-    *  {
-    *    KPlayer *player=new MyPlayer;
-    *    if (!isvirtual) // network player ?
-    *    {
-    *      // Define something like this to add the IO modules
-    *      createIO(player,(KGameIO::IOMode)io);
-    *    }
-    *    return player;
-    *    }
-    * \endcode
-    *
-    * @param rtti is the type of the player (0 means default KPlayer)
-    * @param io is the 'or'ed rtti of the KGameIO's
-    * @param isvirtual true if player is virtual
-    */
-    virtual KPlayer *createPlayer(int rtti,int io,bool isvirtual);
-
-    // load/save
-    /**
-     * Load a saved game, from file OR network. This function has
-     * to be overwritten or you need to connect to the load signal
-     * if you have game data other than KGameProperty.
-     * For file load you should reset() the game before any load attempt
-     * to make sure you load into an clear state.
-     *
-     * @param stream a data stream where you can stream the game from
-     * @param reset - shall the game be reset before loading
-     *
-     * @return true?
-     */
-    virtual bool load(TQDataStream &stream,bool reset=true);
-
-    /**
-     * Same as above function but with different parameters
-     *
-     * @param filename - the filename of the file to be opened
-     * @param reset - shall the game be reset before loading
-     *
-     * @return true?
-     **/
-    virtual bool load(TQString filename,bool reset=true);
-
-    /**
-     * Save a game to a file OR to network. Otherwise the same as
-     * the load function
-     *
-     * @param stream a data stream to load the game from
-     * @param saveplayers If true then all players wil be saved too
-     *
-     * @return true?
-     */
-    virtual bool save(TQDataStream &stream,bool saveplayers=true);
-
-    /**
-     * Same as above function but with different parameters
-     *
-     * @param filename the filename of the file to be saved
-     * @param saveplayers If true then all players wil be saved too
-     *
-     * @return true?
-     **/
-    virtual bool save(TQString filename,bool saveplayers=true);
-
-    /**
-     * Resets the game, i.e. puts it into a state where everything
-     * can be started from, e.g. a load game
-     * Right now it does only need to delete all players
-     *
-     * @return true on success
-     */
-    virtual bool reset();
-
-
-    // Game sequence
-    /**
-     * returns the game status, ie running,pause,ended,...
-     *
-     * @return game status
-     */
-    int gametqStatus() const;
-
-    /**
-     * sets the game status
-     *
-     * @param status the new status
-     */
-    void setGametqStatus(int status);
-
-    /**
-    *  docu: see KPlayer
-    **/
-    bool addProperty(KGamePropertyBase* data);
-
-    /**
-     * This is called by KPlayer::sendProperty only! Internal function!
-     **/
-    bool sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId);
-
-    /**
-    * This function allows to find the pointer to a player
-    * property when you know it's id
-    */
-    KGamePropertyBase* findProperty(int id) const;
-
-    /**
-     * Changes the consistency policy of a property. The
-     * GamePolicy is one of PolicyClean (default), PolicyDirty or PolicyLocal.
-     *
-     * It is up to you to decide how you want to work.
-     **/
-    void setPolicy(GamePolicy p,bool recursive=true);
-
-    /**
-     * @return The default policy of the property
-     **/
-    GamePolicy policy() const;
-
-    /**
-     * See KGameNetwork::sendMessage
-     *
-     * Send a network message msg with a given message ID msgid to all players of
-     * a given group (see KPlayer::group)
-     * @param msg the message which will be send. See messages.txt for contents
-     * @param msgid an id for this message
-     * @param sender the id of the sender
-     * @param group the group of the tqreceivers
-     * @return true if worked
-     */
-    bool sendGroupMessage(const TQByteArray& msg, int msgid, TQ_UINT32 sender, const TQString& group);
-    bool sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group);
-    bool sendGroupMessage(int msg, int msgid, TQ_UINT32 sender, const TQString& group);
-    bool sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group);
-
-    /**
-     * This will either forward an incoming message to a specified player
-     * (see KPlayer::networkTransmission) or
-     * handle the message directly (e.g. if msgif==IdRemovePlayer it will remove
-     * the (in the stream) specified player). If both is not possible (i.e. the
-     * message is user specified data) the signal signalNetworkData is
-     * emitted.
-     *
-     * This emits signalMessageUpdate <em>before</em> doing anything with
-     * the message. You can use this signal when you want to be notified about
-     * an update/change.
-     * @param msgid Specifies the kind of the message. See messages.txt for
-     * further information
-     * @param stream The message that is being sent
-     * @param receiver The is of the player this message is for. 0 For broadcast.
-     * @param sender
-     * @param clientID the client from which we received the transmission - hardly used
-     **/
-    virtual void networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 clientID);
-
-    /**
-     * Returns a pointer to the KGame property handler
-     **/
-    KGamePropertyHandler* dataHandler() const;
-
-protected slots:
-    /**
-     * Called by KGamePropertyHandler only! Internal function!
-     **/
-    void sendProperty(int msgid, TQDataStream& stream, bool* sent);
-
-    /**
-      * Called by KGamePropertyHandler only! Internal function!
-     **/
-    void emitSignal(KGamePropertyBase *me);
-
-    /**
-     * @deprecated
-     * Use KGameSequence::prepareNext() instead
-     **/
-    virtual void prepareNext();
-
-
-    /**
-     * Calls negotiateNetworkGame()
-     * See KGameNetwork::signalClientConnected
-     **/
-    void slotClientConnected(TQ_UINT32 clientId);
-
-    /**
-     * This slot is called whenever the connection to a client is lost (ie the
-     * signal KGameNetwork::signalClientDisconnected is emitted) and will remove
-     * the players from that client.
-     * @param clientId The client the connection has been lost to
-     * @param broken (ignore this - not used)
-     **/
-    void slotClientDisconnected(TQ_UINT32 clientId,bool broken);
-
-    /**
-     * This slot is called whenever the connection to the server is lost (ie the
-     * signal KGameNetwork::signalConnectionBroken is emitted) and will
-     * switch to local game mode
-     **/
-    void slotServerDisconnected();
-
-signals:
-    /**
-     * When a client disconnects from the game usually all players from that
-     * client are removed. But if you use completely the KGame structure you
-     * probably don't want this. You just want to replace the KGameIO of the
-     * (human) player by a computer KGameIO. So this player continues game but
-     * is from this point on controlled by the computer.
-     *
-     * You achieve this by connecting to this signal. It is emitted as soon as a
-     * client disconnects on <em>all</em> other clients. Make sure to add a new
-     * KGameIO only once! you might want to use @ref isAdmin for this. If you
-     * added a new KGameIO set *remove=false otherwise the player is completely
-     * removed.
-     * @param player The player that is about to be removed. Add your new
-     * KGameIO here - but only on <em>one</em> client!
-     * @param remove Set this to FALSE if you don't want this player to be
-     * removed completely.
-     **/
-    void signalReplacePlayerIO(KPlayer* player, bool* remove);
-
-    /**
-     * The game will be loaded from the given stream. Load from here
-     * the data which is NOT a game or player property.
-     * It is not necessary to use this signal for a full property game.
-     *
-     * This signal is emitted <em>before</em> the players are loaded by 
-     * KGame. See also signalLoad
-     *
-     * You must load <em>exactly</em> the same data from the stream that you have saved
-     * in signalSavePrePlayers. Otherwise player loading will not work
-     * anymore.
-     *
-     * @param stream the load stream
-     */
-    void signalLoadPrePlayers(TQDataStream &stream);
-
-    /**
-     * The game will be loaded from the given stream. Load from here
-     * the data which is NOT a game or player property.
-     * It is not necessary to use this signal for a full property game.
-     *
-     * @param stream the load stream
-     */
-    void signalLoad(TQDataStream &stream);
-
-    /**
-     * The game will be saved to the given stream. Fill this with data
-     * which is NOT a game or player property.
-     * It is not necessary to use this signal for a full property game.
-     *
-     * This signal is emitted <em>before</em> the players are saved by 
-     * KGame. See also signalSave
-     *
-     * If you can choose between signalSavePrePlayers and signalSave then
-     * better use signalSave
-     *
-     * @param stream the save stream
-     **/
-    void signalSavePrePlayers(TQDataStream &stream);
-    
-    /**
-     * The game will be saved to the given stream. Fill this with data
-     * which is NOT a game or player property.
-     * It is not necessary to use this signal for a full property game.
-     *
-     * @param stream the save stream
-     */
-    void signalSave(TQDataStream &stream);
-
-    /**
-     * Is emmited if a game with a different version cookie is loaded.
-     * Normally this should result in an error. But maybe you do support
-     * loading of older game versions. Here would be a good place to do a
-     * conversion.
-     *
-     * @param stream - the load stream
-     * @param network - true if this is a network connect. False for load game
-     * @param cookie - the saved cookie. It differs from KGame::cookie()
-     * @param result - set this to true if you managed to load the game
-     */
-    void signalLoadError(TQDataStream &stream,bool network,int cookie, bool &result);
-
-    /**
-     * We got an user defined update message. This is usually done
-     * by a sendData in a inherited KGame Object which defines its
-     * own methods and has to syncronise them over the network.
-     * Reaction to this is usually a call to a KGame function.
-     */
-    void signalNetworkData(int msgid,const TQByteArray& buffer, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-    /**
-     * We got an network message. this can be used to notify us that something
-     * changed. What changed can be seen in the message id. Whether this is
-     * the best possible method to do this is unclear...
-     */
-    void signalMessageUpdate(int msgid,TQ_UINT32 receiver,TQ_UINT32 sender);
-
-    /**
-     * a player left the game because of a broken connection or so!
-     *
-     * Note that when this signal is emitted the player is not part of @ref
-     * playerList anymore but the pointer is still valid. You should do some
-     * final cleanups here since the player is usually deleted after the signal
-     * is emitted.
-     *
-     * @param player the player who left the game
-     */
-    void signalPlayerLeftGame(KPlayer *player);
-
-    /**
-     * a player joined the game
-     *
-     * @param player the player who joined the game
-     */
-    void signalPlayerJoinedGame(KPlayer *player);
-
-
-    /**
-    * This signal is emmited if a player property changes its value and
-    * the property is set to notify this change
-    */
-    void signalPropertyChanged(KGamePropertyBase *property, KGame *me);
-
-    /**
-     * Is emitted after a call to gameOver() returns a non zero
-     * return code. This code is forwarded to this signal as 'status'.
-     *
-     * @param status the return code of gameOver()
-     * @param current the player who did the last move
-     * @param me a pointer to the KGame object
-     */
-    void signalGameOver(int status, KPlayer *current, KGame *me);
-
-    /**
-    * Is emmited after a client is successfully connected to the game.
-    * The client id is the id of the new game client. An easy way to
-    * check whether that's us is
-    * \code
-    *   if (clientid==gameid()) .. // we joined
-    *   else ... // someone joined the game
-    * \endcode
-    * @param clientid - The id of the new client
-    * @param me - our game pointer
-    */
-    void signalClientJoinedGame(TQ_UINT32 clientid,KGame *me);
-
-    /**
-    * This signal is emitted after a network partner left the
-    * game (either by a broken connection or voluntarily).
-    * All changes to the network players have already be done.
-    * If there are not enough players left, the game might have
-    * been paused. To check this you get the old gamestatus
-    * before the disconnection as argument here. The id of the
-    * client who left the game allows to distinguish who left the
-    * game. If it is 0, the server disconnected and you were a client
-    * which has been switched back to local play.
-    * You can use this signal to, e.g. set some menues back to local
-    * player when they were network before.
-    *
-    * @param clientID - 0:server left, otherwise the client who left
-    * @param oldgamestatus - the gamestatus before the loss
-    * @param me - our game pointer
-    **/
-    void signalClientLeftGame(int clientID,int oldgamestatus,KGame *me);
-
-
-protected:
-    /**
-     * A player input occurred. This is the most important function
-     * as the given message will contain the current move made by
-     * the given player.
-     * Note that you HAVE to overwrite this function. Otherwise your
-     * game makes no sense at all.
-     * Generally you have to return TRUE in this function. Only then
-     * the game sequence is proceeded by calling @ref playerInputFinished
-     * which in turn will check for game over or the next player
-     * However, if you have a delayed move, because you e.g. move a
-     * card or a piece you want to return FALSE to pause the game sequence
-     * and then manually call @ref playerInputFinished to resume it.
-     * Example:
-     * \code
-     * bool MyClass::playerInput(TQDataStream &msg,KPlayer *player)
-     * {
-     *   TQ_INT32 move;
-     *   msg >>  move;
-     *   kdDebug() << "  Player " << player->id() << " moved to " << move <<
-     *   endl;
-     *   return true;
-     * }
-     * \endcode
-     *
-     * @param msg the move message
-     * @param player the player who did the move
-     * @return true - input ready, false: input manual
-     */
-    virtual bool playerInput(TQDataStream &msg,KPlayer *player)=0;
-
-
-    /**
-    * Called after the player input is processed by the game. Here the
-    * checks for game over and nextPlayer (in the case of turn base games)
-    * are processed.
-    * Call this manually if you have a delayed move, i.e. your playerInput
-    * function returns FALSE. If it returns true you need not do anything
-    * here.
-    *
-    * @return the current player
-    *
-    **/
-    KPlayer *playerInputFinished(KPlayer *player);
-
-
-    /**
-    * This virtual function can be overwritten for your own player management.
-    * It is called when a new game connects to an existing network game or
-    * to the network master. In case you do not want all players of both games
-    * to be present in the new network game, you can deactivate players here.
-    * This is of particular importance if you have a game with fixed number of
-    * player like e.g. chess. A network connect needs to disable one player of
-    * each game to make sense.
-    *
-    * Not overwriting this function will activate a default behaviour which
-    * will deactivate players until the @ref maxPlayers() numebr is reached
-    * according to the KPlayer::networkPriority() value. Players with a low
-    * value will be kicked out first. With equal priority players of the new
-    * client will leave first. This means, not setting this value and not
-    * overwriting this function will never allow a chess game to add client
-    * players!!!
-    * On the other hand setting one player of each game to a networkPriorty of
-    * say 10, already does most of the work for you.
-    *
-    * The parameters of this function are the playerlist of the network game,
-    * which is @ref playerList(). The second argument is the player list of
-    * the new client who wants to join and the third argument serves as return
-    * parameter. All <em>player ID's</em> which are written into this list
-    * will be <em>removed</em> from the created game. You do this by an
-    * \code
-    * inactivate.append(player->id());
-    * \endcode
-    *
-    * @param oldplayer - the list of the network players
-    * @param newplayer - the list of the client players
-    * @param inactivate - the value list of ids to be deactivated
-    *
-    **/
-    virtual void newPlayersJoin(KGamePlayerList *oldplayer,
-				KGamePlayerList *newplayer,
-				TQValueList<int> &inactivate) {
-		Q_UNUSED( oldplayer );
-		Q_UNUSED( newplayer );
-		Q_UNUSED( inactivate );
-	}
-
-    /**
-    * Save the player list to a stream. Used for network game and load/save.
-    * Can be overwritten if you know what you are doing
-    *
-    * @param stream is the stream to save the player ot
-    * @param list the optional list is the player list to be saved, default is playerList()
-    *
-    **/
-    void savePlayers(TQDataStream &stream,KGamePlayerList *list=0);
-
-    /**
-     * Prepare a player for being added. Put all data about a player into the
-     * stream so that it can be sent to the KGameCommunicationServer using
-     * addPlayer (e.g.)
-     *
-     * This function ensures that the code for adding a player is the same in
-     * addPlayer as well as in negotiateNetworkGame
-     * @param stream is the stream to add the player
-     * @param player The player to add
-     **/
-    void savePlayer(TQDataStream& stream,KPlayer* player);
-
-    /**
-    * Load the player list from a stream. Used for network game and load/save.
-    * Can be overwritten if you know what you are doing
-    *
-    * @param stream is the stream to save the player to
-    * @param isvirtual will set the virtual flag true/false
-    *
-    **/
-    KPlayer *loadPlayer(TQDataStream& stream,bool isvirtual=false);
-
-
-    /**
-     * inactivates player. Use @ref inactivatePlayer instead!
-     */
-    bool systemInactivatePlayer(KPlayer *player);
-
-    /**
-     * activates player. Use @ref activatePlayer instead!
-     */
-    bool systemActivatePlayer(KPlayer *player);
-
-    /**
-     * Adds a player to the game
-     *
-     * Use @ref addPlayer to send @ref KGameMessage::IdAddPlayer. As soon as
-     * this Id is received this function is called, where the player (see @ref
-     * KPlayer::rtti) is added as well as its properties (see @ref KPlayer::save
-     * and @ref KPlayer::load)
-     *
-     * This method calls the overloaded @ref systemAddPlayer with the created
-     * player as argument. That method will really add the player.
-     * If you need to do some changes to your newly added player just connect to
-     * @ref signalPlayerJoinedGame
-     */
-
-    /**
-     * Finally adds a player to the game and therefore to the list.
-     **/
-    void systemAddPlayer(KPlayer* newplayer);
-
-    /**
-     * Removes a player from the game
-     *
-     * Use removePlayer to send KGameMessage::IdRemovePlayer. As soon
-     * as this Id is received systemRemovePlayer is called and the player is
-     * removed directly.
-     **/
-    void systemRemovePlayer(KPlayer* player,bool deleteit);
-
-    /**
-     * This member function will transmit e.g. all players to that client, as well as
-     * all properties of these players (at least if they have been added by
-     * @ref KPlayer::addProperty) so that the client will finally have the same
-     * status as the master. You want to overwrite this function if you expand
-     * KGame by any properties which have to be known by all clients.
-     *
-     * Only the ADMIN is allowed to call this.
-     * @param clientID The ID of the message client which has connected
-     **/
-    virtual void negotiateNetworkGame(TQ_UINT32 clientID);
-
-    /**
-     * syncronise the random numbers with all network clients
-     * not used by KGame - if it should be kept then as public method
-     */
-    void syncRandom();
-
-    void deletePlayers();
-    void deleteInactivePlayers();
-
-    /**
-     * @deprecated
-     * Use @ref KGameSequence instead.
-     *
-     * @param player the player who made the last move
-     * @return anything else but 0 is considered as game over
-     */
-    virtual int checkGameOver(KPlayer *player);
-
-    /**
-     * Load a saved game, from file OR network. Internal. 
-     * Warning: loadgame must not rely that all players all already
-     * activated. Actually the network will activate a player AFTER
-     * the loadgame only. This is not true anymore. But be careful 
-     * anyway.
-     *
-     * @param stream a data stream where you can stream the game from
-     * @param network is it a network call -> make players virtual
-     * @param reset shall the game be reset before loading
-     *
-     * @return true?
-     */
-    virtual bool loadgame(TQDataStream &stream, bool network, bool reset);
-
-    /**
-     * Save a game, to file OR network. Internal. 
-     *
-     * @param stream a data stream where you can stream the game from
-     * @param network is it a call from the network or from a file (unused but informative)
-     * @param saveplayers shall the players be saved too (should be TRUE)
-     *
-     * @return true?
-     */
-    virtual bool savegame(TQDataStream &stream, bool network,bool saveplayers);
-
-private:
-    //AB: this is to hide the "receiver" parameter from the user. It shouldn't be
-    //used if possible (except for init).
-    /**
-     * This is an overloaded function. Id differs from the public one only in
-     * its parameters:
-     *
-     * @param receiver The Client that will receive the message. You will hardly
-     * ever need this. It it internally used to initialize a newly connected
-     * client.
-     **/
-    //void addPlayer(KPlayer* newplayer, TQ_UINT32 receiver);
-
-    /**
-     * Just the same as the public one except receiver:
-     * @param receiver 0 for broadcast, otherwise the receiver. Should only be
-     * used in special circumstances and not outside KGame.
-     **/
-    bool removePlayer(KPlayer * player, TQ_UINT32 receiver);
-
-    /**
-     * Helping function - game negotiation
-     **/
-    void setupGame(TQ_UINT32 sender);
-
-    /**
-     * Helping function - game negotiation
-     **/
-    void setupGameContinue(TQDataStream& msg, TQ_UINT32 sender);
-
-    /**
-     * Removes a player from all lists, removes the @ref KGame pointer from the
-     * @ref KPlayer and deletes the player. Used by (e.g.) @ref
-     * systemRemovePlayer
-     * @return True if the player has been removed, false if the current is not
-     * found
-     **/
-    bool systemRemove(KPlayer* player,bool deleteit);
-
-
-private:
-    KGamePrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamechat.cpp b/libkdegames/kgame/kgamechat.cpp
deleted file mode 100644
index 11f47f7b..00000000
--- a/libkdegames/kgame/kgamechat.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamechat.h"
-#include "kgamechat.moc"
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgameproperty.h"
-#include "kgamemessage.h"
-
-#include <klocale.h>
-#include <kdebug.h>
-
-#include <tqmap.h>
-#include <tqintdict.h>
-
-//FIXME:
-#define FIRST_ID 2 // first id, that is free of use, aka not defined above
-
-class KGameChatPrivate
-{
-public:
-	KGameChatPrivate()
-	{
-		mFromPlayer = 0;
-		mGame = 0;
-
-		mToMyGroup = -1;
-	}
-	
-	KGame* mGame;
-	KPlayer* mFromPlayer;
-	int mMessageId;
-
-
-	TQIntDict<KPlayer> mIndex2Player;
-
-	TQMap<int, int> mSendId2PlayerId;
-	int mToMyGroup; // just as the above - but for the group, not for players
-};
-
-KGameChat::KGameChat(KGame* g, int msgid, TQWidget* parent) : KChatBase(parent)
-{
- init(g, msgid); 
-}
-
-KGameChat::KGameChat(KGame* g, int msgid, KPlayer* fromPlayer, TQWidget* parent) : KChatBase(parent)
-{
- init(g, msgid);
- setFromPlayer(fromPlayer);
-}
-
-KGameChat::KGameChat(TQWidget* parent) : KChatBase(parent)
-{
- init(0, -1);
-}
-
-KGameChat::~KGameChat()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameChat::init(KGame* g, int msgId)
-{
- kdDebug(11001) << k_funcinfo << endl;
- d = new KGameChatPrivate;
- setMessageId(msgId);
-
- setKGame(g);
-}
-
-void KGameChat::addMessage(int fromId, const TQString& text)
-{
- if (!d->mGame) {
-	kdWarning(11001) << "no KGame object has been set" << endl;
-	addMessage(i18n("Player %1").tqarg(fromId), text);
- } else {
-	KPlayer* p = d->mGame->findPlayer(fromId);
-	if (p) {
-		kdDebug(11001) << "adding message of player " << p->name() << "id=" << fromId << endl;
-		addMessage(p->name(), text);
-	} else {
-		kdWarning(11001) << "Could not find player id " << fromId << endl;
-		addMessage(i18n("Unknown"), text);
-	}
- }
-}
-
-void KGameChat::returnPressed(const TQString& text)
-{
- if (!d->mFromPlayer) {
-	kdWarning(11001) << k_funcinfo << ": You must set a player first!" << endl;
-	return;
- }
- if (!d->mGame) {
-	kdWarning(11001) << k_funcinfo << ": You must set a game first!" << endl;
-	return;
- }
-
- kdDebug(11001) << "from: " << d->mFromPlayer->id() << "==" << d->mFromPlayer->name() << endl;
-
- int id = sendingEntry();
-
- if (isToGroupMessage(id)) {
-	// note: there is currently no support for other groups than the players
-	// group! It might be useful to send to other groups, too
-	TQString group = d->mFromPlayer->group();
-	kdDebug(11001) << "send to group " << group << endl;
-	int sender = d->mFromPlayer->id();
-	d->mGame->sendGroupMessage(text, messageId(), sender, group);
-
-	//TODO
-	//AB: this message is never received!! we need to connect to
-	//KPlayer::networkData!!!
-	//TODO
-	
- } else {
-	int toPlayer = 0;
-	if (!isSendToAllMessage(id) && isToPlayerMessage(id)) {
-		toPlayer = playerId(id);
-		if (toPlayer == -1) {
-			kdError(11001) << k_funcinfo << ": don't know that player "
-					<< "- internal ERROR" << endl;
-		}
-	} 
-	int receiver = toPlayer;
-	int sender = d->mFromPlayer->id();
-	d->mGame->sendMessage(text, messageId(), receiver, sender);
- }
-}
-
-void KGameChat::setMessageId(int msgid)
-{ d->mMessageId = msgid; }
-
-int KGameChat::messageId() const
-{ return d->mMessageId; }
-
-bool KGameChat::isSendToAllMessage(int id) const
-{ return (id == KChatBase::SendToAll); }
-
-bool KGameChat::isToGroupMessage(int id) const
-{ return (id == d->mToMyGroup); }
-
-bool KGameChat::isToPlayerMessage(int id) const
-{
-return d->mSendId2PlayerId.contains(id); }
-
-TQString KGameChat::sendToPlayerEntry(const TQString& name) const
-{ return i18n("Send to %1").tqarg(name); }
-
-int KGameChat::playerId(int id) const
-{
- if (!isToPlayerMessage(id)) {
-	return -1;
- }
-
- return d->mSendId2PlayerId[id];
-}
-
-int KGameChat::sendingId(int playerId) const
-{
- TQMap<int, int>::Iterator it;
- for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
-	if (it.data() == playerId) {
-		return it.key();
-	}
- }
- return -1;
-}
-
-const TQString& KGameChat::fromName() const
-{ return d->mFromPlayer ? d->mFromPlayer->name() : TQString(); }
-
-bool KGameChat::hasPlayer(int id) const
-{
- return (sendingId(id) != -1);
-}
-
-void KGameChat::setFromPlayer(KPlayer* p)
-{
- if (!p) {
-	kdError(11001) << k_funcinfo << ": NULL player" << endl;
-	removeSendingEntry(d->mToMyGroup);
-	d->mFromPlayer = 0;
-	return;
- }
- if (d->mFromPlayer) {
-	changeSendingEntry(p->group(), d->mToMyGroup);
- } else {
-	if (d->mToMyGroup != -1) {
-		kdWarning(11001) << "send to my group exists already - removing" << endl;
-		removeSendingEntry(d->mToMyGroup);
-	}
-	d->mToMyGroup = nextId();
-	addSendingEntry(i18n("Send to My Group (\"%1\")").tqarg(p->group()), d->mToMyGroup);
- }
- d->mFromPlayer = p;
- kdDebug(11001) << k_funcinfo << " player=" << p << endl;
-}
-
-
-void KGameChat::setKGame(KGame* g)
-{
- if (d->mGame) {
-	slotUnsetKGame();
- }
- kdDebug(11001) << k_funcinfo << " game=" << g << endl;
- d->mGame = g;
-
- if (d->mGame) {
-	connect(d->mGame, TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)), 
-			this, TQT_SLOT(slotAddPlayer(KPlayer*)));
-	connect(d->mGame, TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)), 
-			this, TQT_SLOT(slotRemovePlayer(KPlayer*)));
-	connect(d->mGame, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)),
-			this, TQT_SLOT(slotReceiveMessage(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)));
-	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-
-	TQPtrList<KPlayer> playerList = *d->mGame->playerList();
-	for (int unsigned i = 0; i < playerList.count(); i++) {
-		slotAddPlayer(playerList.at(i));
-	}
- }
-}
-
-KGame* KGameChat::game() const
-{
- return d->mGame;
-}
-
-KPlayer* KGameChat::fromPlayer() const
-{
- return d->mFromPlayer;
-}
-
-void KGameChat::slotUnsetKGame()
-{
-//TODO: test this method!
-
- if (!d->mGame) {
-	return;
- }
- disconnect(d->mGame, 0, this, 0);
- removeSendingEntry(d->mToMyGroup);
- TQMap<int, int>::Iterator it;
- for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
-	removeSendingEntry(it.data());
- }
-}
-
-void KGameChat::slotAddPlayer(KPlayer* p)
-{
- if (!p) {
-	kdError(11001) << k_funcinfo << ": cannot add NULL player" << endl;
-	return;
- }
- if (hasPlayer(p->id())) {
-	kdError(11001) << k_funcinfo << ": player was added before" << endl;
-	return;
- }
-
- int sendingId = nextId();
- addSendingEntry(comboBoxItem(p->name()), sendingId);
- d->mSendId2PlayerId.insert(sendingId, p->id());
- connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
-		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
- connect(p, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, KPlayer*)),
-		this, TQT_SLOT(slotReceivePrivateMessage(int, const TQByteArray&, TQ_UINT32, KPlayer*)));
-}
-
-void KGameChat::slotRemovePlayer(KPlayer* p)
-{
- if (!p) {
-	kdError(11001) << k_funcinfo << ": NULL player" << endl;
-	return;
- }
- if (!hasPlayer(p->id())) {
-	kdError(11001) << k_funcinfo << ": cannot remove non-existent player" << endl;
-	return;
- }
-
- int id = sendingId(p->id());
- removeSendingEntry(id);
- p->disconnect(this);
- d->mSendId2PlayerId.remove(id);
-}
-
-void KGameChat::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
-{
- if (prop->id() == KGamePropertyBase::IdName) {
-//	kdDebug(11001) << "new Name" << endl;
-	changeSendingEntry(player->name(), sendingId(player->id()));
-/*
-	mCombo->changeItem(comboBoxItem(player->name()), index);
- */
- } else if (prop->id() == KGamePropertyBase::IdGroup) {
- //TODO
- }
-}
-
-void KGameChat::slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me)
-{
- if (!me || me != fromPlayer()) {
-	kdDebug() << k_funcinfo << "nope - not for us!"  << endl;
-	return;
- }
- slotReceiveMessage(msgid, buffer, me->id(), sender);
-}
-
-void KGameChat::slotReceiveMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 , TQ_UINT32 sender)
-{
- TQDataStream msg(buffer, IO_ReadOnly);
- if (msgid != messageId()) {
-	return;
- }
-
- TQString text;
- msg >> text;
-
- addMessage(sender, text);
-}
-
diff --git a/libkdegames/kgame/kgamechat.h b/libkdegames/kgame/kgamechat.h
deleted file mode 100644
index 88139d33..00000000
--- a/libkdegames/kgame/kgamechat.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMECHAT_H__
-#define __KGAMECHAT_H__
-
-#include <tqstring.h>
-
-#include "kchatbase.h"
-#include <kdemacros.h>
-class KPlayer;
-class KGame;
-class KGamePropertyBase;
-
-class KGameChatPrivate;
-
-/**
- * @short A Chat widget for KGame-based games
- *
- * Call @ref setFromPlayer() first - this will be used as the "from" part of
- * every message you will send. Otherwise it won't work! You can also use the
- * fromPlayer parameter in the constructor though...
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameChat : public KChatBase
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	/**
-	 * Construct a @ref KGame chat widget on @p game that used @p msgid for
-	 * the chat message. The @p fromPlayer is the local player (see @ref
-	 * setFromPlayer).
-	 **/
-	KGameChat(KGame* game, int msgid, KPlayer* fromPlayer, TQWidget * parent);
-
-	/**
-	 * @overload
-	 * To make use of this widget you need to call @ref setFromPlayer
-	 * manually.
-	 **/
-	KGameChat(KGame* game, int msgId, TQWidget* parent);
-
-	/**
-	 * @overload
-	 * This constructs a widget that is not usable. You must call at least
-	 * setGame, setFromPlayer and setMessageId manually.
-	 * @since 3.2
-	 **/
-	KGameChat(TQWidget* parent);
-
-	virtual ~KGameChat();
-
-	enum SendingIds {
-		SendToGroup = 1
-	};
-
-	/**
-	 * This sets the fromPlayer to @p player. The fromPlayer is the
-	 * player that will appear as "from" when you send messages through this
-	 * widget.
-	 * @param player The player of this widget
-	 **/
-	void setFromPlayer(KPlayer* player);
-
-	KPlayer* fromPlayer() const;
-
-	/**
-	 * Set the @ref KGame object for this chat widget. All messages will be
-	 * sent through this object. You don't have to implement any send
-	 * functions, just call this function, call @ref setFromPlayer and be
-	 * done :-)
-	 * @param g The @ref KGame object the messages will be sent through
-	 **/
-	void setKGame(KGame* g);
-
-	KGame* game() const;
-
-	/**
-	 * @return The id of the messages produced by KGameChat. The id will be
-	 * used in @ref KGame as parameter msgid in the method @ref KGame::sendMessage
-	 **/
-	int messageId() const;
-
-	/**
-	 * Change the message id of the chat widget. It is recommended that you
-	 * don't use this but prefer the constructor instead, but in certain
-	 * situations (such as using this widget in TQt designer) it may be
-	 * useful to change the message id.
-	 *
-	 * See also @ref messageId
-	 * @since 3.2
-	 **/
-	void setMessageId(int msgid);
-
-	/**
-	 * reimplemented from @ref KChatBase
-	 * @return @ref KPlayer::name() for the player set by @ref setFromPlayer
-	 **/
-	virtual const TQString& fromName() const;
-
-
-public slots:
-	virtual void addMessage(const TQString& fromName, const TQString& text) { KChatBase::addMessage(fromName, text);}
-	virtual void addMessage(int fromId, const TQString& text);
-
-	void slotReceiveMessage(int, const TQByteArray&, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-protected:
-	/**
-	 * @param id The ID of the sending entry, as returned by @ref
-	 * KChatBase::sendingEntry
-	 * @return True if the entry "send to all" was selected, otherwise false
-	 **/
-	bool isSendToAllMessage(int id) const;
-
-	/**
-	 * Used to indicate whether a message shall be sent to a group of
-	 * players. Note that this was not yet implemented when this doc was
-	 * written so this description might be wrong. (FIXME)
-	 * @param id The ID of the sending entry, as returned by @ref
-	 * KChatBase::sendingEntry
-	 * @return True if the message is meant to be sent to a group (see @ref
-	 * KPlayer::group), e.g. if "send to my group" was selected.
-	 **/
-	bool isToGroupMessage(int id) const;
-	
-
-	/**
-	 * Used to indicate whether the message shall be sent to a single player
-	 * only. Note that you can also call @ref isSendToAllMessage and @ref
-	 * isToGroupMessage - if both return false it must be a player message.
-	 * This behaviour might be changed later - so don't depend on it.
-	 *
-	 * See also toPlayerId
-	 * @param id The ID of the sending entry, as returned by 
-	 * KChatBase::sendingEntry
-	 * @return True if the message shall be sent to a special player,
-	 * otherwise false.
-	 **/
-	bool isToPlayerMessage(int id) const;
-
-	/**
-	 * @param id The ID of the sending entry, as returned by
-	 * KChatBase::sendingEntry
-	 * @return The ID of the player (see KPlayer::id) the sending entry
-	 * belongs to. Note that the parameter id is an id as returned by ref
-	 * KChatBase::sendingEntry and the id this method returns is a 
-	 * KPlayer ID. If isToPlayerMessage returns false this method
-	 * returns -1
-	 **/
-	int playerId(int id) const;
-
-	/**
-	 * @param playerId The ID of the KPlayer object
-	 * @return The ID of the sending entry (see KChatBase) or -1 if
-	 * the player id was not found.
-	 **/
-	int sendingId(int playerId) const;
-
-	/**
-	 * @return True if the player with this ID was added before (see 
-	 * slotAddPlayer)
-	 **/
-	bool hasPlayer(int id) const;
-
-	/**
-	 * @param name The name of the added player
-	 * @return A string that will be added as sending entry in @ref
-	 * KChatBase. By default this is "send to name" where name is the name
-	 * that you specify. See also KChatBase::addSendingEntry
-	 **/
-	virtual TQString sendToPlayerEntry(const TQString& name) const;
-
-
-protected slots:
-	/**
-	 * Unsets a KGame object that has been set using setKGame
-	 * before. You don't have to call this - this is usually done
-	 * automatically.
-	 **/
-	void slotUnsetKGame();
-
-
-	void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
-	void slotAddPlayer(KPlayer*);
-	void slotRemovePlayer(KPlayer*);
-
-	/**
-	 * Called when KPlayer::signalNetworkData is emitted. The message
-	 * gets forwarded to slotReceiveMessage if @p me equals
-	 * fromPlayer.
-	 **/
-	void slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me);
-
-protected:
-	virtual void returnPressed(const TQString& text);
-
-private:
-	void init(KGame* g, int msgid);
-
-private:
-	KGameChatPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameerror.cpp b/libkdegames/kgame/kgameerror.cpp
deleted file mode 100644
index ef6145fb..00000000
--- a/libkdegames/kgame/kgameerror.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgameerror.h"
-#include "kgamemessage.h"
-
-#include <klocale.h>
-
-TQByteArray KGameError::errVersion(int remoteVersion)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- s << (TQ_INT32)KGameMessage::version();
- s << (TQ_INT32)remoteVersion;
- return b;
-}
-
-TQByteArray KGameError::errCookie(int localCookie, int remoteCookie)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- s << (TQ_INT32)localCookie;
- s << (TQ_INT32)remoteCookie;
- return b;
-}
-
-TQString KGameError::errorText(int errorCode, const TQByteArray& message)
-{
- TQDataStream s(message, IO_ReadOnly);
- return errorText(errorCode, s);
-}
-
-TQString KGameError::errorText(int errorCode, TQDataStream& s)
-{
- TQString text;
- switch (errorCode) {
-	case Cookie:
-	{
-		TQ_INT32 cookie1; 
-		TQ_INT32 cookie2;
-		s >> cookie1;
-		s >> cookie2;
-		text = i18n("Cookie mismatch!\nExpected Cookie: %1\nReceived Cookie: %2").tqarg(cookie1).tqarg(cookie2);
-		break;
-	}
-	case Version:
-	{
-		TQ_INT32 version1;
-		TQ_INT32 version2;
-		s >> version1;
-		s >> version2;
-		text = i18n("KGame Version mismatch!\nExpected Version: %1\nReceived Version: %2\n").tqarg(version1).tqarg(version2);
-		break;
-	}
-	default:
-		text = i18n("Unknown error code %1").tqarg(errorCode);
- }
- return text;
-}
-
diff --git a/libkdegames/kgame/kgameerror.h b/libkdegames/kgame/kgameerror.h
deleted file mode 100644
index 071737cc..00000000
--- a/libkdegames/kgame/kgameerror.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEERROR_H_
-#define __KGAMEERROR_H_
-
-#include <tqstring.h>
-
-
-class KGameError
-{
-public:
-	KGameError() { }
-	~KGameError() { }
-
-	enum ErrorCodes {
-		Cookie = 0, // Cookie mismatch
-		Version = 1 // Version mismatch
-	};
-
-	/**
-	 * Generate an error message with Erorr Code = ErrCookie
-	 **/
-	static TQByteArray errCookie(int localCookie, int remoteCookie);
-	static TQByteArray errVersion(int remoteVersion);
-
-	/**
-	 * Create an erorr text using a TQDataStream (TQByteArray) which was
-	 * created using @ref KGameError. This is the opposite function to all
-	 * the errXYZ() function (e.g. @ref errVersion).
-	 * You want to use this to generate the message that shall be 
-	 * displayed to the user.
-	 * @return an error message 
-	 **/
-	static TQString errorText(int errorCode, TQDataStream& message);
-	static TQString errorText(int errorCode, const TQByteArray& message);
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameio.cpp b/libkdegames/kgame/kgameio.cpp
deleted file mode 100644
index 5b736ea0..00000000
--- a/libkdegames/kgame/kgameio.cpp
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgameio.h"
-#include "kgameio.moc"
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamemessage.h"
-#include "kmessageio.h"
-
-#include <kdebug.h>
-
-#include <tqwidget.h>
-#include <tqbuffer.h>
-#include <tqtimer.h>
-
-#include <stdlib.h>
-
-// ----------------------- Generic IO -------------------------
-KGameIO::KGameIO() : TQObject(0,0)
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
-  mPlayer = 0;
-}
-
-KGameIO::KGameIO(KPlayer* player) : TQObject(0,0)
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
-  mPlayer = 0;
-  if (player)
-  {
-    player->addGameIO(this);
-  }
-}
-
-KGameIO::~KGameIO()
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
-  // unregister ourselves
-  if (player())
-  {
-    player()->removeGameIO(this, false);
-  }
-}
-
-void KGameIO::initIO(KPlayer *p)
-{
-  setPlayer(p);
-}
-
-void KGameIO::notifyTurn(bool b)
-{
-  if (!player())
-  {
-    kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
-    return;
-  }
-  bool sendit=false;
-  TQByteArray buffer;
-  TQDataStream stream(buffer, IO_WriteOnly);
-  emit signalPrepareTurn(stream, b, this, &sendit);
-  if (sendit)
-  {
-    TQDataStream ostream(buffer,IO_ReadOnly);
-    TQ_UINT32 sender = player()->id();  // force correct sender
-    kdDebug(11001) << "Prepare turn sendInput" << endl;
-    sendInput(ostream, true, sender);
-  }
-}
-
-KGame* KGameIO::game() const
-{
-  if (!player())
-  {
-    return 0;
-  }
-  return player()->game();
-}
-
-bool KGameIO::sendInput(TQDataStream& s, bool transmit, TQ_UINT32 sender)
-{
-  if (!player())
-  {
-    return false;
-  }
-  return player()->forwardInput(s, transmit, sender);
-}
-
-void KGameIO::Debug()
-{
-  kdDebug(11001) << "------------------- KGAMEINPUT --------------------" << endl;
-  kdDebug(11001) << "this:    " << this << endl;
-  kdDebug(11001) << "rtti :   " << rtti() << endl;
-  kdDebug(11001) << "Player:  " << player() << endl;
-  kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-
-// ----------------------- Key IO ---------------------------
-KGameKeyIO::KGameKeyIO(TQWidget *parent) 
-   : KGameIO()
-{
-  if (parent)
-  {
-    kdDebug(11001) << "Key Event filter installed" << endl;
-    parent->installEventFilter(this);
-  }
-}
-
-KGameKeyIO::~KGameKeyIO()
-{
-  if (parent())
-  {
-    parent()->removeEventFilter(this);
-  }
-}
-
-int KGameKeyIO::rtti() const { return KeyIO; }
-
-bool KGameKeyIO::eventFilter( TQObject *o, TQEvent *e )
-{
-  if (!player())
-  {
-    return false;
-  }
-
-  // key press/release
-  if ( e->type() == TQEvent::KeyPress ||
-       e->type() == TQEvent::KeyRelease )
-  {
-     TQKeyEvent *k = (TQKeyEvent*)e;
-  //   kdDebug(11001) << "KGameKeyIO " << this << " key press/release " <<  k->key() << endl ;
-     TQByteArray buffer;
-     TQDataStream stream(buffer,IO_WriteOnly);
-     bool eatevent=false;
-     emit signalKeyEvent(this,stream,k,&eatevent);
-     TQDataStream msg(buffer,IO_ReadOnly);
-
-     if (eatevent && sendInput(msg))
-     {
-       return eatevent;
-     }
-     return false; // do not eat otherwise
-  }
-  return TQObject::eventFilter( o, e );    // standard event processing
-}
-
-
-// ----------------------- Mouse IO ---------------------------
-KGameMouseIO::KGameMouseIO(TQWidget *parent,bool trackmouse) 
-   : KGameIO()
-{
-  if (parent)
-  {
-    kdDebug(11001) << "Mouse Event filter installed tracking=" << trackmouse << endl;
-    parent->installEventFilter(this);
-    parent->setMouseTracking(trackmouse);
-  }
-}
-
-KGameMouseIO::~KGameMouseIO()
-{
-  if (parent())
-  {
-    parent()->removeEventFilter(this);
-  }
-}
-
-int KGameMouseIO::rtti() const
-{
-  return MouseIO;
-}
-
-void KGameMouseIO::setMouseTracking(bool b)
-{
-  if (parent())
-  {
-    ((TQWidget*)parent())->setMouseTracking(b);
-  }
-}
-
-bool KGameMouseIO::eventFilter( TQObject *o, TQEvent *e )
-{
-  if (!player())
-  {
-    return false;
-  }
-//  kdDebug(11001) << "KGameMouseIO " << this  << endl ;
-
-  // mouse action
-  if ( e->type() == TQEvent::MouseButtonPress ||
-       e->type() == TQEvent::MouseButtonRelease ||
-       e->type() == TQEvent::MouseButtonDblClick ||
-       e->type() == TQEvent::Wheel ||
-       e->type() == TQEvent::MouseMove
-       )
-  {
-     TQMouseEvent *k = (TQMouseEvent*)e;
-     // kdDebug(11001) << "KGameMouseIO " << this  << endl ;
-     TQByteArray buffer;
-     TQDataStream stream(buffer,IO_WriteOnly);
-     bool eatevent=false;
-     emit signalMouseEvent(this,stream,k,&eatevent);
-//     kdDebug(11001) << "################# eatevent=" << eatevent << endl;
-     TQDataStream msg(buffer,IO_ReadOnly);
-     if (eatevent && sendInput(msg))
-     {
-       return eatevent;
-     }
-     return false; // do not eat otherwise
-  }
-  return TQObject::eventFilter( o, e );    // standard event processing
-}
-
-
-// ----------------------- KGameProcesPrivate ---------------------------
-class KGameProcessIO::KGameProcessIOPrivate
-{
-public:
-  KGameProcessIOPrivate()
-  {
-    //mMessageServer = 0;
-    //mMessageClient = 0;
-    mProcessIO=0;
-  }
-  //KMessageServer *mMessageServer;
-  //KMessageClient *mMessageClient;
-  KMessageProcess *mProcessIO;
-};
-
-// ----------------------- Process IO ---------------------------
-KGameProcessIO::KGameProcessIO(const TQString& name) 
-   : KGameIO()
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)=" << sizeof(KGameProcessIO) << endl;
-  d = new KGameProcessIOPrivate;
-
-  //kdDebug(11001) << "================= KMEssageServer ==================== " << endl;
-  //d->mMessageServer=new KMessageServer(0,this);
-  //kdDebug(11001) << "================= KMEssageClient ==================== " << endl;
-  //d->mMessageClient=new KMessageClient(this);
-  kdDebug(11001) << "================= KMEssageProcessIO ==================== " << endl;
-  d->mProcessIO=new KMessageProcess(this,name);
-  kdDebug(11001) << "================= KMEssage Add client ==================== " << endl;
-  //d->mMessageServer->addClient(d->mProcessIO);
-  //kdDebug(11001) << "================= KMEssage SetSErver ==================== " << endl;
-  //d->mMessageClient->setServer(d->mMessageServer);
-  kdDebug(11001) << "================= KMEssage: Connect ==================== " << endl;
-  //connect(d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
-  //        this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32)));
-  //connect(d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)),
-  //        this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)));
-  connect(d->mProcessIO, TQT_SIGNAL(received(const TQByteArray&)),
-          this, TQT_SLOT(receivedMessage(const TQByteArray&)));
-  //kdDebug(11001) << "Our client is id="<<d->mMessageClient->id() << endl;
-}
-
-KGameProcessIO::~KGameProcessIO()
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
-  kdDebug(11001) << "player="<<player() << endl;
-  if (player())
-  {
-    player()->removeGameIO(this,false);
-  }
-  if (d->mProcessIO)
-  {
-    delete d->mProcessIO;
-    d->mProcessIO=0;
-  }
-  delete d;
-}
-
-int KGameProcessIO::rtti() const
-{
-  return ProcessIO;
-}
-
-void KGameProcessIO::initIO(KPlayer *p)
-{
-  KGameIO::initIO(p);
-  // Send 'hello' to process
-  TQByteArray buffer;
-  TQDataStream stream(buffer, IO_WriteOnly);
-  TQ_INT16 id = p->userId();
-  stream << id;
-
-  bool sendit=true;
-  if (p)
-  {
-    emit signalIOAdded(this,stream,p,&sendit);
-    if (sendit )
-    {
-      TQ_UINT32 sender = p->id();
-      kdDebug(11001) <<  "Sending IOAdded to process player !!!!!!!!!!!!!! " << endl;
-      sendSystemMessage(stream, KGameMessage::IdIOAdded, 0, sender);
-    }
-  }
-}
-
-void KGameProcessIO::notifyTurn(bool b)
-{
-  if (!player())
-  {
-    kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
-    return;
-  }
-  bool sendit=true;
-  TQByteArray buffer;
-  TQDataStream stream(buffer,IO_WriteOnly);
-  stream << (TQ_INT8)b;
-  emit signalPrepareTurn(stream,b,this,&sendit);
-  if (sendit)
-  {
-    TQ_UINT32 sender=player()->id();
-    kdDebug(11001) <<  "Sending Turn to process player !!!!!!!!!!!!!! " << endl;
-    sendSystemMessage(stream, KGameMessage::IdTurn, 0, sender);
-  }
-}
-
-void KGameProcessIO::sendSystemMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
-  sendAllMessages(stream, msgid, receiver, sender, false);
-}
-
-void KGameProcessIO::sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
-  sendAllMessages(stream, msgid, receiver, sender, true);
-}
-
-void KGameProcessIO::sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg)
-{
-  kdDebug(11001) << "==============>  KGameProcessIO::sendMessage (usermsg="<<usermsg<<")" << endl;
-  // if (!player()) return ;
-  //if (!player()->isActive()) return ;
-
-  if (usermsg)
-  {
-    msgid+=KGameMessage::IdUser;
-  }
-
-  kdDebug(11001) << "=============* ProcessIO (" << msgid << "," << receiver << "," << sender << ") ===========" << endl;
-
-  TQByteArray buffer;
-  TQDataStream ostream(buffer,IO_WriteOnly);
-  TQBuffer *device=(TQBuffer *)stream.device();
-  TQByteArray data=device->buffer();;
-
-  KGameMessage::createHeader(ostream,sender,receiver,msgid);
-  // ostream.writeRawBytes(data.data()+device->at(),data.size()-device->at());
-  ostream.writeRawBytes(data.data(),data.size());
-  kdDebug(11001) << "   Adding user data from pos="<< device->at() <<" amount= " << data.size() << " byte " << endl;
-  //if (d->mMessageClient) d->mMessageClient->sendBroadcast(buffer);
-  if (d->mProcessIO)
-  {
-    d->mProcessIO->send(buffer);
-  }
-}
-
-//void KGameProcessIO::clientMessage(const TQByteArray& receiveBuffer, TQ_UINT32 clientID, const TQValueList <TQ_UINT32> &recv)
-void KGameProcessIO::receivedMessage(const TQByteArray& receiveBuffer)
-{
-  TQDataStream stream(receiveBuffer,IO_ReadOnly);
-  int msgid;
-  TQ_UINT32 sender;
-  TQ_UINT32 receiver;
-  KGameMessage::extractHeader(stream,sender,receiver,msgid);
-
-  kdDebug(11001) << "************* Got process message sender =" << sender 
-          << " receiver=" << receiver << "   msgid=" << msgid << endl;
-
-
-  // Cut out the header part...to not confuse network code
-  TQBuffer *buf=(TQBuffer *)stream.device();
-  TQByteArray newbuffer;
-  newbuffer.setRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
-  TQDataStream ostream(newbuffer,IO_ReadOnly);
-  kdDebug(11001) << "Newbuffer size=" << newbuffer.size() << endl;
-
-
-
-// This is a dummy message which allows us the process to talk with its owner
-  if (msgid==KGameMessage::IdProcessQuery)
-  {
-    emit signalProcessQuery(ostream,this);
-  }
-  else if (player())
-  {
-    sender = player()->id();  // force correct sender
-    if (msgid==KGameMessage::IdPlayerInput) 
-    {
-      sendInput(ostream,true,sender);
-    }
-    else
-    {
-      player()->forwardMessage(ostream,msgid,receiver,sender);
-    }
-  }
-  else
-  {
-    kdDebug(11001) << k_funcinfo << ": Got message from process but no player defined!" << endl;
-  }
-  newbuffer.resetRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
-}
-
-
-// ----------------------- Computer IO --------------------------
-class KGameComputerIO::KGameComputerIOPrivate
-{
-//TODO: maybe these should be KGameProperties!!
-public:
-  KGameComputerIOPrivate()
-  {
-    mAdvanceCounter = 0;
-    mReactionPeriod = 0;
-
-    mPauseCounter = 0;
-
-    mAdvanceTimer = 0;
-  }
-  int mAdvanceCounter;
-  int mReactionPeriod;
-
-  int mPauseCounter;
-
-  TQTimer* mAdvanceTimer;
-};
-
-KGameComputerIO::KGameComputerIO() : KGameIO()
-{
-  init();
-}
-
-KGameComputerIO::KGameComputerIO(KPlayer* p) : KGameIO(p)
-{
-  init();
-}
-
-void KGameComputerIO::init()
-{
-  d = new KGameComputerIOPrivate;
-}
-
-KGameComputerIO::~KGameComputerIO()
-{
-  if (d->mAdvanceTimer)
-  {
-    delete d->mAdvanceTimer;
-  }
-  delete d;
-}
-
-int KGameComputerIO::rtti() const
-{
-  return ComputerIO;
-}
-
-void KGameComputerIO::setReactionPeriod(int calls)
-{
- d->mReactionPeriod = calls;
-}
-
-int KGameComputerIO::reactionPeriod() const
-{
-  return d->mReactionPeriod;
-}
-
-void KGameComputerIO::setAdvancePeriod(int ms)
-{
-  stopAdvancePeriod();
-  d->mAdvanceTimer = new TQTimer(this);
-  connect(d->mAdvanceTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(advance()));
-  d->mAdvanceTimer->start(ms);
-}
-
-void KGameComputerIO::stopAdvancePeriod()
-{
-  if (d->mAdvanceTimer)
-  {
-    d->mAdvanceTimer->stop();
-    delete d->mAdvanceTimer;
-  }
-}
-
-void KGameComputerIO::pause(int calls)
-{
-  d->mPauseCounter = calls;
-}
-
-void KGameComputerIO::unpause()
-{
-  pause(0);
-}
-
-void KGameComputerIO::advance()
-{
-  if (d->mPauseCounter > 0)
-  {
-    d->mPauseCounter--;
-    return;
-  }
-  else if (d->mPauseCounter < 0)
-  {
-    return;
-  }
-  d->mAdvanceCounter++;
-  if (d->mAdvanceCounter >= d->mReactionPeriod)
-  {
-    d->mAdvanceCounter = 0;
-    reaction();
-  }
-}
-
-void KGameComputerIO::reaction()
-{
-  emit signalReaction();
-}
-
-
diff --git a/libkdegames/kgame/kgameio.h b/libkdegames/kgame/kgameio.h
deleted file mode 100644
index 510ab0b7..00000000
--- a/libkdegames/kgame/kgameio.h
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEIO_H__
-#define __KGAMEIO_H__
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KPlayer;
-class KGame;
-class KProcess;
-
-/**
- *  \short Base class for IO devices for games
- *
- *  This is the master class for
- *  creating IO game devices. You cannot use it directly.
- *  Either take one of the classes derived from it or
- *  you have to create your own IO class derived from it (more probably).
- *
- *  The idea behind this class is to provide a common interface
- *  for input devices into your game. By programming a KGameIO
- *  device you need not distinguish the actual IO in the game
- *  anymore. All work is done by the IO's. This allows very
- *  easy reuse in other games as well.
- *  A further advantage of using the IO's is that you can exchange
- *  the control of a player at runtime. E.g. you switch a player
- *  to be controlled by the computer or vice versa.
- *
- *  To achieve this you have to make all of your player inputs through a
- *  KGameIO. You will usually call KGameIO::sendInput to do so. 
- *
- *  @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameIO : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-    /**
-     * Constructs a KGameIO object
-     */
-   KGameIO();
-   KGameIO(KPlayer*);
-   virtual ~KGameIO();
-
-    /**
-     * Gives debug output of the game status
-     */
-   void Debug();
-
-   /**
-    * Identifies the KGameIO via the rtti function
-    */
-   enum IOMode {GenericIO=1,KeyIO=2,MouseIO=4,ProcessIO=8,ComputerIO=16};
-   /**
-    * Run time idendification. Predefined values are from IOMode
-    * You MUST overwrite this in derived classes!
-    *
-    * @return rtti value
-    */
-   virtual int rtti() const = 0;  // Computer, network, local, ...
-   
-   /**
-    * This function returns the player who owns this IO
-    *
-    * @return the player this IO device is plugged into
-    */
-   KPlayer *player() const {return mPlayer;}
-
-   /**
-    * Equivalent to player()->game()
-    * @return the @ref KGame object of this player
-    **/
-   KGame* game() const;
-
-   /**
-    * Sets the player to which this IO belongs to. This
-    * is done automatically when adding a device to a 
-    * player
-    *
-    * @param p the player
-    */
-   void setPlayer(KPlayer *p) {mPlayer=p;}
-
-   /**
-    * Init this device by setting the player and e.g. sending an
-    * init message to the device. This initialisation message is
-    * very useful for computer players as you can transmit the
-    * game status to them and only update this status in the setTurn
-    * commands.
-    *
-    * Called by @ref KPlayer::addGameIO only!
-    */
-   virtual void initIO(KPlayer *p);
-
-    /**
-     * Notifies the IO device that the player's setTurn had been called
-     * Called by KPlayer
-     *
-     * This emits @ref signalPrepareTurn and sends the turn if the send
-     * parameter is set to true.
-     *
-     * @param b turn is true/false
-     */
-    virtual void notifyTurn(bool b);
-
-    /**
-     * Send an input message using @ref KPlayer::forwardInput
-     **/
-    bool sendInput(TQDataStream& stream, bool transmit = true, TQ_UINT32 sender = 0);
-
-signals:
-    /**
-     * Signal generated when @ref KPlayer::myTurn changes. This can either be
-     * when you get the turn status or when you lose it.
-     *
-     * The datastream has to be filled with a move. If you set (or leave) the
-     * send parameter to FALSE then nothing happens: the datastream will be
-     * ignored. If you set it to TRUE @ref sendInput is used to
-     * send the move.
-     *
-     * Often you want to ignore this signal (leave send=FALSE) and send the
-     * message later. This is usually the case for a human player as he probably
-     * doesn't react immediately. But you can still use this e.g. to notify the
-     * player about the turn change. 
-     *
-     * Example:
-     * \code
-     *  void GameWindow::slotPrepareTurn(TQDataStream &stream,bool b,KGameIO *input,bool * )
-     *  {
-     *    KPlayer *player=input->player();
-     *    if (!player->myTurn()) return ;
-     *    if (!b) return ;        // only do something on setTurn(true)
-     *    stream << 1 << 2 << 3;  // Some data for the process
-     *  }
-     * \endcode
-     *
-     * @param io the KGameIO object itself
-     * @param stream the stream into which the move will be written
-     * @param turn the argument of setTurn
-     * @param send set this to true to send the generated move using @ref
-     * sendInput
-     **/
-    void signalPrepareTurn(TQDataStream & stream, bool turn, KGameIO *io, bool * send);
-
-
-private:
-   KPlayer *mPlayer;
-};
-
-/**
- *  The KGameKeyIO class. It is used to process keyboard input
- *  from a widget and create moves for the player it belongs to.
- *  @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameKeyIO : public KGameIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-    /**
-     * Create a keyboard input devices. All keyboards
-     * inputs of the given widgets are passed through a signal
-     * handler signalKeyEvent and can be used to generate
-     * a valid move for the player.
-     * Note the widget you pass to the constructor must be
-     * the main window of your application, e.g. view->parentWidget()
-     * as QT does not forward your keyevents otherwise. This means
-     * that this might be a different widget comapred to the one you
-     * use for mouse inputs!
-     * Example:
-     * \code
-     * KGameKeyIO *input;
-     *  input=new KGameKeyIO(myWidget);
-     *  connect(input,TQT_SIGNAL(signalKeyEvent(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)),
-     *          this,TQT_SLOT(slotKeyInput(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)));
-     * \endcode
-     *
-     * @param parent The parents widget whose keyboard events * should be grabbed
-     */
-    KGameKeyIO(TQWidget *parent);
-    virtual ~KGameKeyIO();
-
-    /**
-     * The idendification of the IO
-     *
-     * @return KeyIO
-     */
-    virtual int rtti() const;
-
-signals:
-      /**
-       * Signal handler for keyboard events. This function is called
-       * on every keyboard event. If appropriate it can generate a
-       * move for the player the device belongs to. If this is done
-       * and the event is eaten eatevent needs to be set to true.
-       * What move you generate (i.e. what you write to the stream)
-       * is totally up to you as it will not be evaluated but forwared
-       * to the player's/game's  input move function
-       * Example:
-       * \code
-       * KPlayer *player=input->player(); // Get the player
-       * TQ_INT32 key=e->key();
-       * stream << key;
-       * eatevent=true;
-       * \endcode
-       *
-       * @param io the IO device we belong to
-       * @param stream the stream where we write our move into
-       * @param m The TQKeyEvent we can evaluate
-       * @param eatevent set this to true if we processed the event
-       */
-      void signalKeyEvent(KGameIO *io,TQDataStream &stream,TQKeyEvent *m,bool *eatevent);
-
-protected:
-       /**
-       * Internal method to process the events
-       */
-       bool eventFilter( TQObject *o, TQEvent *e );
-};
-
-/**
- *  The KGameMouseIO class. It is used to process mouse input
- *  from a widget and create moves for the player it belongs to.
- *  @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameMouseIO : public KGameIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-    
-public:
-    /**
-     * Creates a mouse IO device. It captures all mouse
-     * event of the given widget and forwards them to the
-     * signal handler signalMouseEvent.
-     * Example:
-     * \code
-     * KGameMouseIO *input;
-     * input=new KGameMouseIO(mView);
-     * connect(input,TQT_SIGNAL(signalMouseEvent(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)),
-     *        this,TQT_SLOT(slotMouseInput(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)));
-     * \endcode
-     *
-     * @param parent The widget whose events should be captured
-     * @param trackmouse enables mouse tracking (gives mouse move events)
-     */
-    KGameMouseIO(TQWidget *parent,bool trackmouse=false);
-    virtual ~KGameMouseIO();
-    
-    /**
-     * Manually activate or deactivate mouse tracking
-     *
-     * @param b true = tracking on
-     */
-    void setMouseTracking(bool b);
-    /**
-     * The idendification of the IO
-     *
-     * @return MouseIO
-     */
-    virtual int rtti() const; 
-
-signals:
-      /**
-       * Signal handler for mouse events. This function is called
-       * on every mouse event. If appropriate it can generate a
-       * move for the player the device belongs to. If this is done
-       * and the event is eaten eatevent needs to be set to true.
-       * @see signalKeyEvent
-       * Example:
-       * \code
-       * KPlayer *player=input->player(); // Get the player
-       * TQ_INT32 button=e->button();
-       * stream << button;
-       * eatevent=true;
-       * \endcode
-       *
-       * @param io the IO device we belong to
-       * @param stream the stream where we write our move into
-       * @param m The TQMouseEvent we can evaluate
-       * @param eatevent set this to true if we processed the event
-       */
-      void signalMouseEvent(KGameIO *io,TQDataStream &stream,TQMouseEvent *m,bool *eatevent);
-
-protected:
-      /**
-      * Internal event filter
-      */
-      bool eventFilter( TQObject *o, TQEvent *e );
-
-};
-
-
-/**
- *  The KGameProcessIO class. It is used to create a computer player
- *  via a separate process and communicate transparetly with it.
- *  Its counterpart is the @ref KGameProcess class which needs
- *  to be used by the computer player. See its documentation
- *  for the definition of the computer player.
- *  @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameProcessIO : public KGameIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-    
-public:
-    /** 
-     * Creates a computer player via a separate process. The process
-     * name is given as fully qualified filename. 
-     * Example:
-     * \code
-     * KGameProcessIO *input;
-     *   input=new KGameProcessIO(executable_file);
-     *  connect(input,TQT_SIGNAL(signalPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)),
-     *          this,TQT_SLOT(slotPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)));
-     *  connect(input,TQT_SIGNAL(signalProcessQuery(TQDataStream &,KGameProcessIO *)),
-     *          this,TQT_SLOT(slotProcessQuery(TQDataStream &,KGameProcessIO *)));
-     * \endcode
-     *
-     * @param name the filename of the process to start
-     */
-    KGameProcessIO(const TQString& name);
-
-    /**
-     * Deletes the process input devices 
-     */
-    virtual ~KGameProcessIO();
-
-    /**
-     * The idendification of the IO
-     *
-     * @return ProcessIO
-     */
-    int rtti() const;
-    
-    /**
-     * Send a message to the process. This is analogous to the sendMessage
-     * commands of KGame. It will result in a signal of the computer player
-     * on which you can react in the process player.
-     *
-     * @param stream  - the actual data
-     * @param msgid - the id of the message
-     * @param receiver - not used
-     * @param sender - who send the message
-     */
-    void sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-    /**
-     * Send a system message to the process. This is analogous to the sendMessage
-     * commands of KGame. It will result in a signal of the computer player
-     * on which you can react in the process player.
-     *
-     * @param stream  - the actual data
-     * @param msgid - the id of the message
-     * @param receiver - not used
-     * @param sender - who send the message
-     */
-    void sendSystemMessage(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-    /** 
-     * Init this device by setting the player and e.g. sending an
-     * init message to the device. Calling this function will emit
-     * the IOAdded signal on which you can react and initilise the
-     * computer player. 
-     * This function is called automatically when adding the IO to
-     * a player.
-     */
-    void initIO(KPlayer *p);
-
-    /**
-     *  Notifies the IO device that the player's setTurn had been called
-     *  Called by KPlayer. You can react on the @ref signalPrepareTurn to
-     *  prepare a message for the process, i.e. either update it on
-     * the changes made to the game since the last turn or the initIO
-     * has been called or transmit your gamestatus now.
-     *
-     *  @param turn is true/false
-     */
-    virtual void notifyTurn(bool turn);
-
-  protected:
-    /**
-     * Internal ~ombined function for all message handling 
-     **/
-    void sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg);
-
-  protected slots:
-  /**
-  * Internal message handler to receive data from the process
-  */
-    void receivedMessage(const TQByteArray& receiveBuffer);
-
-  
-signals:
-  /**
-   * A computer query message is received. This is a 'dummy'
-   * message sent by the process if it needs to communicate
-   * with us. It is not forwarded over the network.
-   * Reacting to this message allows you to 'answer' questions
-   * of the process, e.g. sending addition data which the process
-   * needs to calculate a move.
-   *
-   * Example:
-   * \code
-   *  void GameWindow::slotProcessQuery(TQDataStream &stream,KGameProcessIO *reply)
-   *  {
-   *    int no;
-   *    stream >> no;  // We assume the process sends us an integer question numner
-   *    if (no==1)     // but YOU have to do this in the process player
-   *    {
-   *      TQByteArray buffer;
-   *      TQDataStream out(buffer,IO_WriteOnly);
-   *      reply->sendSystemMessage(out,4242,0,0);  // lets reply something...
-   *    }
-   *  }
-   * \endcode
-   */
-  void signalProcessQuery(TQDataStream &stream,KGameProcessIO *me);
-
-  /**
-  * Signal generated when the computer player is added. 
-  * You can use this to communicated with the process and
-  * e.g. send initialisation information to the process.
-  *
-  * @param game the KGameIO object itself
-  * @param stream the stream into which the move will be written
-  * @param p the player itself
-  * @param send set this to false if no move should be generated
-  */
-  void signalIOAdded(KGameIO *game,TQDataStream &stream,KPlayer *p,bool *send);
-
-
-protected:
-
-private:
-  class KGameProcessIOPrivate;
-  KGameProcessIOPrivate* d;
-};
-
-/**
- *  \brief KGameIO variant for real-time games
- *
- *  The KGameComputerIO class. It is used to create a LOCAL computer player
- *  and communicate transparently with it. 
- *  Question: Is this needed or is it overwritten anyway for a real game?
- *
- *  You most probably don't want to use this if you want to design a turn based
- *  game/player. You'll rather use @ref KGameIO directly, i.e. subclass it
- *  yourself. You just need to use @ref KGameIO::signalPrepareTurn and/or @ref
- *  KGameIO::notifyTurn there.
- *
- *  This is rather meant to be of use in real time games.
- *
- *  @author  <b_mann@gmx.de>
- */
-class KDE_EXPORT KGameComputerIO : public KGameIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-    
-public:
-    /** 
-     * Creates a LOCAL computer player 
-     *
-     */
-    KGameComputerIO();
-    KGameComputerIO(KPlayer* player);
-    ~KGameComputerIO();
-
-    int rtti() const;
-
-    /**
-     * The number of advance calls until the player (or rather: the IO)
-     * does something (default: 1). 
-     **/
-    void setReactionPeriod(int advanceCalls);
-    int reactionPeriod() const;
-
-    /**
-     * Start a TQTimer which calls advance every @p ms milli seconds.
-     **/
-    void setAdvancePeriod(int ms);
-
-    void stopAdvancePeriod();
-
-    /**
-     * Ignore calls number of advance calls. if calls is -1 then all 
-     * following advance calls are ignored until unpause is called.
-     *
-     * This simply prevents the internal advance counter to be increased.
-     *
-     * You may want to use this to emulate a "thinking" computer player. Note
-     * that this means if you increase the advance period (see 
-     * setAdvancePeriod), i.e. if you change the speed of your game, your
-     * computer player thinks "faster".
-     * @param calls Number of advance calls to be ignored
-     **/
-    void pause(int calls = -1);
-
-    /**
-     * Equivalent to pause(0). Immediately continue to increase the internal
-     * advance counter.
-     **/
-    void unpause();
-    
-public slots:
-    /**
-     * Works kind of similar to TQCanvas::advance. Increase the internal
-     * advance counter. If @p reactionPeriod is reached the counter is set back to
-     * 0 and @ref signalReaction is emitted. This is when the player is meant 
-     * to do something (move its units or so).
-     *
-     * This is very useful if you use TQCanvas as you can use this in your
-     * TQCanvas::advance call. The advantage is that if you change the speed
-     * of the game (i.e. change TQCanvas::setAdvancePeriod) the computer
-     * player gets slower as well.
-     *
-     * If you don't use TQCanvas you can use setAdvancePeriod to get
-     * the same result. Alternatively you can just use a TQTimer.
-     * 
-     **/
-    virtual void advance();
-  
-signals:
-    /**
-     * This signal is emitted when your computer player is meant to do
-     * something, or better is meant to be allowed to do something.
-     **/
-    void signalReaction();
-
-protected:
-    /**
-     * Default implementation simply emits signalReaction
-     **/
-    virtual void reaction();
-
-private:
-    void init();
- 
-private:
-    class KGameComputerIOPrivate;
-    KGameComputerIOPrivate* d;
-};
-
-
-#endif
diff --git a/libkdegames/kgame/kgamemessage.cpp b/libkdegames/kgame/kgamemessage.cpp
deleted file mode 100644
index 9f5e4694..00000000
--- a/libkdegames/kgame/kgamemessage.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgamemessage.h"
-
-#include <klocale.h>
-
-#define MESSAGE_VERSION 2
-
-TQ_UINT32 KGameMessage::createPlayerId(int oldplayerid,TQ_UINT32 gameid)
-{
-  int p;
-  p = oldplayerid & 0x3ff; // remove game id
-  p |= (gameid << 10);
-  return p;
-}
-
-int KGameMessage::rawPlayerId(TQ_UINT32 playerid)
-{
-  return playerid & 0x03ff;
-}
-
-TQ_UINT32 KGameMessage::rawGameId(TQ_UINT32 playerid)
-{
-  return (playerid & 0xfc00) >> 10;
-}
-
-bool KGameMessage::isPlayer(TQ_UINT32 msgid)
-{
-  if (msgid & 0xfc00) {
-	return true;
-  } else {
-	return false;
-  }
-}
-
-bool KGameMessage::isGame(TQ_UINT32 msgid)
-{
-  return !isPlayer(msgid);
-}
-
-
-void KGameMessage::createHeader(TQDataStream &msg,TQ_UINT32 sender,TQ_UINT32 receiver,int msgid)
-{
-  msg << (TQ_INT16)sender << (TQ_INT16)receiver << (TQ_INT16)msgid;
-}
-
-void KGameMessage::extractHeader(TQDataStream &msg,TQ_UINT32 &sender,TQ_UINT32 &receiver,int &msgid)
-{
-  TQ_INT16 d3,d4,d5;
-  msg >> d3 >> d4 >> d5;
-  sender=d3;receiver=d4;msgid=d5;
-}
-
-void KGameMessage::createPropertyHeader(TQDataStream &msg,int id)
-{
-  msg << (TQ_INT16)id;
-}
-
-void KGameMessage::extractPropertyHeader(TQDataStream &msg,int &id)
-{
-  TQ_INT16 d1;
-  msg >> d1;
-  id=d1;
-}
-
-void KGameMessage::createPropertyCommand(TQDataStream &msg,int cmdid,int pid,int cmd)
-{
-  createPropertyHeader(msg,cmdid);
-  msg << (TQ_INT16)pid ;
-  msg << (TQ_INT8)cmd ;
-}
-
-void KGameMessage::extractPropertyCommand(TQDataStream &msg,int &pid,int &cmd)
-{
-  TQ_INT16 d1;
-  TQ_INT8 d2;
-  msg >> d1 >> d2;
-  pid=d1;
-  cmd=d2;
-}
-
-int KGameMessage::version()
-{
-  return MESSAGE_VERSION;
-}
-
-TQString KGameMessage::messageId2Text(int msgid)
-{
-// this should contain all KGameMessage::GameMessageIds
-// feel free to add missing ones, to remove obsolete one and even feel free to
-// let it be ;-)
-  switch (msgid) {
-	case KGameMessage::IdSetupGame:
-		return i18n("Setup Game");
-	case KGameMessage::IdSetupGameContinue:
-		return i18n("Setup Game Continue");
-	case KGameMessage::IdGameLoad:
-		return i18n("Load Game");
-	case KGameMessage::IdGameConnected:
-		return i18n("Client game connected");
-	case KGameMessage::IdGameSetupDone:
-		return i18n("Game setup done");
-	case KGameMessage::IdSyncRandom:
-		return i18n("Synchronize Random");
-	case KGameMessage::IdDisconnect:
-		return i18n("Disconnect");
-	case KGameMessage::IdPlayerProperty:
-		return i18n("Player Property");
-	case KGameMessage::IdGameProperty:
-		return i18n("Game Property");
-	case KGameMessage::IdAddPlayer:
-		return i18n("Add Player");
-	case KGameMessage::IdRemovePlayer:
-		return i18n("Remove Player");
-	case KGameMessage::IdActivatePlayer:
-		return i18n("Activate Player");
-	case KGameMessage::IdInactivatePlayer:
-		return i18n("Inactivate Player");
-	case KGameMessage::IdTurn:
-		return i18n("Id Turn");
-	case KGameMessage::IdError:
-		return i18n("Error Message");
-	case KGameMessage::IdPlayerInput:
-		return i18n("Player Input");
-	case KGameMessage::IdIOAdded:
-		return i18n("An IO was added");
-	case KGameMessage::IdProcessQuery:
-		return i18n("Process Query");
-	case KGameMessage::IdPlayerId:
-		return i18n("Player ID");
-	case KGameMessage::IdUser: // IdUser must be unknown for use, too!
-	default:
-		return TQString();
-  }
-}
diff --git a/libkdegames/kgame/kgamemessage.h b/libkdegames/kgame/kgamemessage.h
deleted file mode 100644
index f4029895..00000000
--- a/libkdegames/kgame/kgamemessage.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEMSG_H_
-#define __KGAMEMSG_H_
-
-#include <tqdatastream.h>
-#include <kdemacros.h>
-
-class KDE_EXPORT KGameMessage
-{
-  public:
-    /**
-     * Creates a fully qualified player ID which contains the original
-     * player id in the lower bits and the game number in the higher bits.
-     * Do not rely on the exact bit positions as they are internal.
-     *
-     * See also @ref rawPlayerId and @ref rawGameId which are the inverse
-     * operations
-     *
-     * @param playerid the player id - can include a gameid (will get removed)
-     * @param gameid The game id (<64). 0 For broadcast.
-     * @return the new player id
-     */
-    static TQ_UINT32 createPlayerId(int player, TQ_UINT32 game);
-
-    /**
-     * Returns the raw playerid, that is, a id which does not
-     * contain the game number encoded in it. See also @ref createPlayerId which
-     * is the inverse operation.
-     *
-     * @param the player id
-     * @return the raw player id
-     **/
-    static int rawPlayerId(TQ_UINT32 playerid);
-
-    /**
-     * Returns the raw game id, that is, the game id the player
-     * belongs to. Se also @ref createPlayerId which is the inverse operation.
-     *
-     * @param the player id
-     * @return the raw game id
-     **/
-    static TQ_UINT32 rawGameId(TQ_UINT32 playerid);
-
-    /**
-     * Checks whether a message receiver/sender is a player
-     *
-     * @param id The ID of the sender/receiver
-     * @return true/false
-     */
-    static bool isPlayer(TQ_UINT32 id);
-
-    /**
-     * Checks whether the sender/receiver of a message is a game
-     *
-     * @param id The ID of the sender/receiver
-     * @return true/false
-     */
-    static bool isGame(TQ_UINT32 id);
-
-    /**
-     * Creates a message header given cookie,sender,receiver,...
-     *
-     * Also puts "hidden" header into the stream which are used by KGameClient
-     * (message length and magic cookie). If you don't need them remove them
-     * with @ref dropExternalHeader
-     */
-    static void createHeader(TQDataStream &msg, TQ_UINT32 sender, TQ_UINT32 receiver, int msgid);
-
-    /**
-     * Retrieves the information like cookie,sender,receiver,... from a message header 
-     *
-     * Note that it could be necessary to call @ref dropExternalHeader first
-     */
-    static void extractHeader(TQDataStream &msg,TQ_UINT32 &sender, TQ_UINT32 &receiver, int &msgid);
-
-    /**
-     * Creates a property header  given the property id
-     */
-    static void createPropertyHeader(TQDataStream &msg, int id);
-
-    /**
-     * Retrieves the property id from a property message header
-     */
-    static void extractPropertyHeader(TQDataStream &msg, int &id);
-
-    /**
-     * Creates a property header given the property id
-     */
-    static void createPropertyCommand(TQDataStream &msg, int cmdid, int pid, int cmd);
-
-    /**
-     * Retrieves the property id from a property message header
-     */
-    static void extractPropertyCommand(TQDataStream &msg, int &pid, int &cmd);
-
-    /**
-     * @return Version of the network library
-     */
-    static int version();
-
-    /**
-     * This function takes a @ref GameMessageIds as argument and returns a
-     * suitable string for it. This string can't be used to identify a message
-     * (as it is i18n'ed) but it can make debugging more easy. See also @ref
-     * KGameDebugDialog.
-     * @return Either a i18n'ed string (the name of the id) or TQString() if
-     * the msgid is unknown
-     **/
-    static TQString messageId2Text(int msgid);
-
-
-  /**
-   * Message Ids used inside @ref KGame.
-   *
-   * You can use your own custom message Id by adding @p IdUser to it.
-   **/
-// please document every new id with a short comment
-  enum GameMessageIds {
-// game init, game load, disconnect, ...
-    IdSetupGame=1,         // sent to a newly connected player
-    IdSetupGameContinue=2, // continue the setup
-    IdGameLoad=3,          // load/save the game to the client
-    IdGameConnected=4,     // Client successfully connected to master
-    IdSyncRandom=5,        // new random seed set - sync games
-    IdDisconnect=6,        // KGame object disconnects from game
-    IdGameSetupDone=7,     // New game client is now operational
-
-// properties
-    IdPlayerProperty=20,   // a player property changed
-    IdGameProperty=21,     // a game property changed
-
-// player management
-    IdAddPlayer=30,         // add a player
-    IdRemovePlayer=31,      // the player will be removed
-    IdActivatePlayer=32,    // Activate a player
-    IdInactivatePlayer=33,  // Inactivate a player
-    IdTurn=34,              // Turn to be prepared
-
-// to-be-categorized
-    IdError=100,            // an error occurred
-    IdPlayerInput=101,      // a player input occurred
-    IdIOAdded=102,          // KGameIO got added to a player...init this IO
-
-// special ids for computer player
-    IdProcessQuery=220,     // Process queries data (process only)
-    IdPlayerId=221,         // PlayerId got changed (process only)
-
-    IdUser=256          // a user specified message
-  };
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamenetwork.cpp b/libkdegames/kgame/kgamenetwork.cpp
deleted file mode 100644
index a3548579..00000000
--- a/libkdegames/kgame/kgamenetwork.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgamenetwork.h"
-#include "kgamenetwork.moc"
-#include "kgamemessage.h"
-#include "kgameerror.h"
-
-#include "kmessageserver.h"
-#include "kmessageclient.h"
-#include "kmessageio.h"
-#include <dnssd/publicservice.h>
-
-#include <kdebug.h>
-
-#include <tqbuffer.h>
-
-
-class KGameNetworkPrivate
-{
-public:
-        KGameNetworkPrivate()
-        {
-                mMessageClient = 0;
-                mMessageServer = 0;
-                mDisconnectId = 0;
-		mService = 0;
-        }
-
-public:
-        KMessageClient* mMessageClient;
-        KMessageServer* mMessageServer;
-        TQ_UINT32 mDisconnectId;  // Stores gameId() over a disconnect process
-	DNSSD::PublicService* mService;
-	TQString mType;
-	TQString mName;
-
-        int mCookie;
-};
-
-// ------------------- NETWORK GAME ------------------------
-KGameNetwork::KGameNetwork(int c, TQObject* parent) : TQObject(parent, 0)
-{
- d = new KGameNetworkPrivate;
- d->mCookie = (TQ_INT16)c;
-
- // Init the game as a local game, i.e.
- // create your own KMessageServer and a KMessageClient connected to it.
- setMaster();
-
- kdDebug(11001) << k_funcinfo << "this=" << this <<", cookie=" << cookie() << " sizeof(this)="<<sizeof(KGameNetwork) << endl;
-}
-
-KGameNetwork::~KGameNetwork()
-{
- kdDebug(11001) << k_funcinfo << "this=" << this << endl;
-// Debug();
- delete d->mService;
- delete d;
-}
-
-// ----------------------------- status methods
-bool KGameNetwork::isNetwork() const
-{ return isOfferingConnections() || d->mMessageClient->isNetwork();}
-
-TQ_UINT32 KGameNetwork::gameId() const
-{
-  //return d->mMessageClient->id() ;
-  // Return stored id in the case of disconnect. In any other
-  // case the disconnect id is 0
-  if (d->mMessageClient->id()!=0 ) {
-    return d->mMessageClient->id() ;
-  } else {
-    return d->mDisconnectId;
-  }
-}
-
-int KGameNetwork::cookie() const
-{ return d->mCookie; }
-
-bool KGameNetwork::isMaster() const
-{ return (d->mMessageServer != 0); }
-
-bool KGameNetwork::isAdmin() const
-{ return (d->mMessageClient->isAdmin()); }
-
-KMessageClient* KGameNetwork::messageClient() const
-{ return d->mMessageClient; }
-
-KMessageServer* KGameNetwork::messageServer() const
-{ return d->mMessageServer; }
-
-// ----------------------- network init
-void KGameNetwork::setMaster()
-{
- if (!d->mMessageServer) {
-   d->mMessageServer = new KMessageServer (cookie(), this);
- } else {
-   kdWarning(11001) << k_funcinfo << "Server already running!!" << endl;
- }
- if (!d->mMessageClient) {
-   d->mMessageClient = new KMessageClient (this);
-   connect (d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
-            this, TQT_SLOT(receiveNetworkTransmission(const TQByteArray&, TQ_UINT32)));
-   connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
-            this, TQT_SIGNAL(signalConnectionBroken()));
-   connect (d->mMessageClient, TQT_SIGNAL(aboutToDisconnect(TQ_UINT32)),
-            this, TQT_SLOT(aboutToLoseConnection(TQ_UINT32)));
-   connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
-            this, TQT_SLOT(slotResetConnection()));
-
-   connect (d->mMessageClient, TQT_SIGNAL(adminStatusChanged(bool)),
-            this, TQT_SLOT(slotAdminStatusChanged(bool)));
-   connect (d->mMessageClient, TQT_SIGNAL(eventClientConnected(TQ_UINT32)),
-            this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)));
-   connect (d->mMessageClient, TQT_SIGNAL(eventClientDisconnected(TQ_UINT32, bool)),
-            this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32, bool)));
-
-   // broacast and direct messages are treated equally on receive.
-   connect (d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList<TQ_UINT32>&)),
-            d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)));
-
- } else {
-   // should be no problem but still has to be tested
-   kdDebug(11001) << k_funcinfo << "Client already exists!" << endl;
- }
- d->mMessageClient->setServer(d->mMessageServer);
-}
-
-void KGameNetwork::setDiscoveryInfo(const TQString& type, const TQString& name)
-{
- kdDebug() << k_funcinfo << type << ":" << name << endl;
- d->mType = type;
- d->mName = name;
- tryPublish();
-}
-
-void KGameNetwork::tryPublish()
-{
- if (d->mType.isNull() || !isOfferingConnections()) return;
- if (!d->mService) d->mService = new DNSSD::PublicService(d->mName,d->mType,port());
- else {
-   if (d->mType!=d->mService->type()) d->mService->setType(d->mType);
-   if (d->mName!=d->mService->serviceName()) d->mService->setServiceName(d->mName);
-   }
- if (!d->mService->isPublished()) d->mService->publishAsync();
-}
-
-void KGameNetwork::tryStopPublishing()
-{
- if (d->mService) d->mService->stop();
-}
-
-bool KGameNetwork::offerConnections(TQ_UINT16 port)
-{
- kdDebug (11001) << k_funcinfo << "on port " << port << endl;
- if (!isMaster()) {
-   setMaster();
- }
-
- // Make sure this is 0
- d->mDisconnectId = 0;
-
- // FIXME: This debug message can be removed when the program is working correct.
- if (d->mMessageServer && d->mMessageServer->isOfferingConnections()) {
-   kdDebug (11001) << k_funcinfo << "Already running as server! Changing the port now!" << endl;
- }
-
- tryStopPublishing();
- kdDebug (11001) << k_funcinfo << "before Server->initNetwork" << endl;
- if (!d->mMessageServer->initNetwork (port)) {
-   kdError (11001) << k_funcinfo << "Unable to bind to port " << port << "!" << endl;
-   // no need to delete - we just cannot listen to the port
-//   delete d->mMessageServer;
-//   d->mMessageServer = 0;
-//   d->mMessageClient->setServer((KMessageServer*)0);
-   return false;
- }
- kdDebug (11001) << k_funcinfo << "after Server->initNetwork" << endl;
- tryPublish();
- return true;
-}
-
-bool KGameNetwork::connectToServer (const TQString& host, TQ_UINT16 port)
-{
- if (host.isEmpty()) {
-   kdError(11001) << k_funcinfo << "No hostname given" << endl;
-   return false;
- }
-
- // Make sure this is 0
- d->mDisconnectId = 0;
-
-// if (!d->mMessageServer) {
-//   // FIXME: What shall we do here? Probably must stop a running game.
-//   kdWarning (11001) << k_funcinfo << "We are already connected to another server!" << endl;
-/// }
-
- if (d->mMessageServer) {
-   // FIXME: What shall we do here? Probably must stop a running game.
-   kdWarning(11001) << "we are server but we are trying to connect to another server! "
-                    << "make sure that all clients connect to that server! "
-                    << "quitting the local server now..." << endl;
-   stopServerConnection();
-   d->mMessageClient->setServer((KMessageIO*)0);
-   delete d->mMessageServer;
-   d->mMessageServer = 0;
- }
-
- kdDebug(11001) << "    about to set server" << endl;
- d->mMessageClient->setServer(host, port);
- emit signalAdminStatusChanged(false); // as we delete the connection above isAdmin() is always false now!
-
- // OK: We say that we already have connected, but this isn't so yet!
- // If the connection cannot be established, it will look as being disconnected
- // again ("slotConnectionLost" is called).
- // Shall we differ between these?
- kdDebug(11001) << "connected to " << host << ":" << port << endl;
- return true;
-}
-
-TQ_UINT16 KGameNetwork::port() const
-{
- if (isNetwork()) {
-   if (isOfferingConnections()) {
-     return d->mMessageServer->serverPort();
-   } else {
-     return d->mMessageClient->peerPort();
-   }
- }
- return 0;
-}
-
-TQString KGameNetwork::hostName() const
-{
- return d->mMessageClient->peerName();
-}
-
-bool KGameNetwork::stopServerConnection()
-{
- // We still are the Master, we just don't accept further connections!
- tryStopPublishing();
- if (d->mMessageServer) {
-   d->mMessageServer->stopNetwork();
-   return true;
- }
- return false;
-}
-
-bool KGameNetwork::isOfferingConnections() const
-{ return (d->mMessageServer && d->mMessageServer->isOfferingConnections()); }
-
-void KGameNetwork::disconnect()
-{
- // TODO MH
- kdDebug(11001) << k_funcinfo << endl;
- stopServerConnection();
- if (d->mMessageServer) {
-    TQValueList <TQ_UINT32> list=d->mMessageServer->clientIDs();
-    TQValueList<TQ_UINT32>::Iterator it;
-    for( it = list.begin(); it != list.end(); ++it )
-    {
-      kdDebug(11001) << "Client id=" << (*it) <<  endl;
-      KMessageIO *client=d->mMessageServer->findClient(*it);
-      if (!client)
-      {
-        continue;
-      }
-      kdDebug(11001) << "   rtti=" << client->rtti() <<  endl;
-      if (client->rtti()==2)
-      {
-        kdDebug(11001) << "DIRECT IO " << endl;
-      }
-      else
-      {
-        d->mMessageServer->removeClient(client,false);
-      }
-    }
- }
- else
- {
-   kdDebug(11001) << k_funcinfo << "before client->disconnect() id="<<gameId()<< endl;
-   //d->mMessageClient->setServer((KMessageIO*)0);
-   kdDebug(11001) << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
-   d->mMessageClient->disconnect();
-
-   kdDebug(11001) << "++++++--------------------------------------------+++++"<<endl;
- }
- //setMaster();
- /*
- if (d->mMessageServer) {
-  //delete d->mMessageServer;
-  //d->mMessageServer=0;
-  server=true;
-  kdDebug(11001) << "  server true" << endl;
-  d->mMessageServer->deleteClients();
-  kdDebug(11001) << "  server deleteClients" << endl;
- }
- */
- kdDebug(11001) << k_funcinfo << "DONE" << endl;
-}
-
-void KGameNetwork::aboutToLoseConnection(TQ_UINT32 clientID)
-{
-  kdDebug(11001) << "Storing client id of connection "<<clientID<<endl;
-  d->mDisconnectId = clientID;
-}
-
-void KGameNetwork::slotResetConnection()
-{
-  kdDebug(11001) << "Resseting client disconnect id"<<endl;
-  d->mDisconnectId = 0;
-}
-
-void KGameNetwork::electAdmin(TQ_UINT32 clientID)
-{
- if (!isAdmin()) {
-	kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
-	return;
- }
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_ADMIN_CHANGE );
- stream << clientID;
- d->mMessageClient->sendServerMessage(buffer);
-}
-
-void KGameNetwork::setMaxClients(int max)
-{
- if (!isAdmin()) {
-	kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
-	return;
- }
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_MAX_NUM_CLIENTS );
- stream << (TQ_INT32)max;
- d->mMessageClient->sendServerMessage(buffer);
-}
-
-void KGameNetwork::lock()
-{
- if (messageClient()) {
-   messageClient()->lock();
- }
-}
-
-void KGameNetwork::unlock()
-{
- if (messageClient()) {
-   messageClient()->unlock();
- }
-}
-
-// --------------------- send messages ---------------------------
-
-bool KGameNetwork::sendSystemMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << data;
- return sendSystemMessage(buffer,msgid,receiver,sender);
-}
-
-bool KGameNetwork::sendSystemMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- stream << msg;
- return sendSystemMessage(buffer, msgid, receiver, sender);
-}
-
-bool KGameNetwork::sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(((TQBuffer*)msg.device())->buffer(), msgid, receiver, sender); }
-
-bool KGameNetwork::sendSystemMessage(const TQByteArray& data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- if (!sender) {
-   sender = gameId();
- }
-
- TQ_UINT32 receiverClient = KGameMessage::rawGameId(receiver); // KGame::gameId()
- int receiverPlayer = KGameMessage::rawPlayerId(receiver); // KPlayer::id()
-
- KGameMessage::createHeader(stream, sender, receiver, msgid);
- stream.writeRawBytes(data.data(), data.size());
-
- /*
- kdDebug(11001) << "transmitGameClientMessage msgid=" << msgid << " recv="
-                << receiver << " sender=" << sender << " Buffersize="
-                << buffer.size() << endl;
-  */
-
- if (!d->mMessageClient) {
-   // No client created, this should never happen!
-   // Having a local game means we have our own
-   // KMessageServer and we are the only client.
-   kdWarning (11001) << k_funcinfo << "We don't have a client! Should never happen!" << endl;
-   return false;
- }
-
- if (receiverClient == 0 || receiverPlayer != 0)
- {
-   // if receiverClient == 0 this is a broadcast message. if it is != 0 but
-   // receiverPlayer is also != 0 we have to send broadcast anyway, because the
-   // KPlayer object on all clients needs to receive the message.
-   d->mMessageClient->sendBroadcast(buffer);
- }
- else
- {
-   d->mMessageClient->sendForward(buffer, receiverClient);
- }
- return true;
-}
-
-bool KGameNetwork::sendMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(data,msgid+KGameMessage::IdUser,receiver,sender); }
-
-bool KGameNetwork::sendMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg,msgid+KGameMessage::IdUser,receiver,sender); }
-
-bool KGameNetwork::sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
-
-bool KGameNetwork::sendMessage(const TQByteArray &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
-
-void KGameNetwork::sendError(int error,const TQByteArray& message, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << (TQ_INT32) error;
- stream.writeRawBytes(message.data(), message.size());
- sendSystemMessage(stream,KGameMessage::IdError,receiver,sender);
-}
-
-
-// ----------------- receive messages from the network
-void KGameNetwork::receiveNetworkTransmission(const TQByteArray& receiveBuffer, TQ_UINT32 clientID)
-{
- TQDataStream stream(receiveBuffer, IO_ReadOnly);
- int msgid;
- TQ_UINT32 sender; // the id of the KGame/KPlayer who sent the message
- TQ_UINT32 receiver; // the id of the KGame/KPlayer the message is for 
- KGameMessage::extractHeader(stream, sender, receiver, msgid);
-// kdDebug(11001) << k_funcinfo << "id=" << msgid << " sender=" << sender << " recv=" << receiver << endl;
-
- // No broadcast : receiver==0
- // No player isPlayer(receiver)
- // Different game gameId()!=receiver
- if (receiver &&  receiver!=gameId() && !KGameMessage::isPlayer(receiver) )
- {
-   // receiver=0 is broadcast or player message
-   kdDebug(11001) << k_funcinfo << "Message not meant for us "
-            << gameId() << "!=" << receiver << " rawid="
-            << KGameMessage::rawGameId(receiver) << endl;
-   return;
- }
- else if (msgid==KGameMessage::IdError)
- {
-   TQString text;
-   TQ_INT32 error;
-   stream >> error;
-   kdDebug(11001) << k_funcinfo << "Got IdError " << error << endl;
-   text = KGameError::errorText(error, stream);
-   kdDebug(11001) << "Error text: " << text.latin1() << endl;
-   emit signalNetworkErrorMessage((int)error,text);
- }
- else
- {
-   networkTransmission(stream, msgid, receiver, sender, clientID);
- }
-}
-
-// -------------- slots for the signals of the client
-void KGameNetwork::slotAdminStatusChanged(bool isAdmin)
-{
- emit signalAdminStatusChanged(isAdmin);
-
-// TODO: I'm pretty sure there are a lot of things that should be done here...
-}
-
-void KGameNetwork::Debug()
-{
- kdDebug(11001) << "------------------- KNETWORKGAME -------------------------" << endl;
- kdDebug(11001) << "gameId         " << gameId() << endl;
- kdDebug(11001) << "gameMaster     " << isMaster() << endl;
- kdDebug(11001) << "gameAdmin      " << isAdmin() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgamenetwork.h b/libkdegames/kgame/kgamenetwork.h
deleted file mode 100644
index b5975ffc..00000000
--- a/libkdegames/kgame/kgamenetwork.h
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMENETWORK_H_
-#define __KGAMENETWORK_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KGameIO;
-class KMessageClient;
-class KMessageServer;
-
-class KGameNetworkPrivate;
-
-/**
- * The KGameNetwork class is the KGame class with network
- * support. All other features are the same but they are
- * now network transparent. It is not used directly but
- * only via a KGame object. So you do not really have
- * to bother with this object.
- *
- * @short The main KDE game object
- * @author Martin Heni <martin@heni-online.de>
- * @version $Id$
- */
-class KDE_EXPORT KGameNetwork : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-    /**
-     * Create a KGameNetwork object
-     */
-    KGameNetwork(int cookie=42,TQObject* parent=0);
-    virtual ~KGameNetwork();
-
-    /**
-     * Gives debug output of the game status
-     **/
-    virtual void Debug();
-
-    /**
-     * @return TRUE if this is a network game - i.e. you are either MASTER or
-     * connected to a remote MASTER.
-     **/
-    bool isNetwork() const;
-
-    /**
-     * Is this the game MASTER (i.e. has started theKMessageServer). A
-     * game has always exactly one MASTER. This is either a KGame object (i.e. a
-     * Client) or an own MessageServer-process. A KGame object that has the
-     * MASTER status is always admin.
-     *
-     * You probably don't want to use this. It is a mostly internal method which
-     * will probably become protected. Better use isAdmin
-     *
-     * @see isAdmin
-     * @return Whether this client has started the KMessageServer
-     **/
-    bool isMaster() const;
-
-    /**
-     * The admin of a game is the one who initializes newly connected clients
-     * using  negotiateNetworkGame and is allowed to configure the game.
-     * E.g. only the admin is allowed to use KGame::setMaxPlayers.
-     *
-     * If one KGame object in the game is MASTER then this client is the admin
-     * as well. isMaster and isAdmin differ only if the KMessageServer
-     * is running in an own process.
-     * @return Whether this client (KGame object) is the admin
-     **/
-    bool isAdmin() const;
-
-    /**
-     * The unique ID of this game
-     *
-     * @return int id
-     **/
-    TQ_UINT32 gameId() const;
-
-    /**
-     * Inits a network game as network MASTER. Note that if the
-     * KMessageServer is not yet started it will be started here (see 
-     * setMaster). Any existing connection will be disconnected.
-     *
-     * If you already offer connections the port is changed.
-     *
-     * @param port The port on which the service is offered
-     * @return true if it worked
-     **/
-    bool offerConnections (TQ_UINT16 port);
-    
-    /**
-     * Announces game MASTER on network using DNS-SD. Clients then can discover it using
-     * DNSSD::ServiceBrowser (or KGameConnectWidget) instead of manually entering 
-     * IP address.
-     * @param type service type (something like _kwin4._tcp). 
-     * It should be unique for application.
-     * @param name game name that will be displayed by clients.  If not
-     * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
-     * @since 3.4
-     **/
-    void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
-    
-    /**
-     * Inits a network game as a network CLIENT
-     *
-     * @param host the host to which we want to connect
-     * @param port the port we want to connect to
-     *
-     * @return true if connected
-     **/
-    bool connectToServer(const TQString& host, TQ_UINT16 port);
-
-    /**
-     * @since 3.2
-     * @return The port we are listening to if offerConnections was called
-     * or the port we are connected to if connectToServer was called.
-     * Otherwise 0.
-     **/
-    TQ_UINT16 port() const;
-
-    /**
-     * @since 3.2
-     * @return The name of the host that we are currently connected to is
-     * isNetwork is TRUE and we are not the MASTER, i.e. if connectToServer
-     * was called. Otherwise this will return "localhost".
-     **/
-    TQString hostName() const;
-
-    /**
-     * Stops offering server connections - only for game MASTER
-     * @return true
-     **/
-    bool stopServerConnection();
-
-    /**
-     * Changes the maximal connection number of the KMessageServer to max.
-     * -1 Means infinite connections are possible. Note that existing
-     * connections are not affected, so even if you set this to 0 in a running
-     * game no client is being disconnected. You can call this only if you are
-     * the ADMIN!
-     *
-     * @see KMessageServer::setMaxClients
-     * @param max The maximal number of connections possible.
-     **/
-    void setMaxClients(int max);
-
-    //AB: is this now internal only? Can we make it protected (maybe with
-    //friends)? sendSystemMessage AND sendMessage is very confusing to the
-    //user.
-    /**
-     * Sends a network message msg with a given msg id msgid to all clients.
-     * Use this to communicate with KGame (e.g. to add a player ot to configure
-     * the game - usually not necessary). 
-     *
-     * For your own messages use  sendMessage instead! This is mostly
-     * internal!
-     *
-     * @param buffer the message which will be send. See messages.txt for contents
-     * @param msgid an id for this message. See
-     * KGameMessage::GameMessageIds
-     * @param receiver the KGame / KPlayer this message is for.
-     * @param sender The KGame / KPlayer this message is from (i.e.
-     * you). You
-     * probably want to leave this 0, then KGameNetwork will create the correct
-     * value for you. You might want to use this if you send a message from a
-     * specific player.
-     * @return true if worked
-     */
-    // AB: TODO: doc on how "receiver" and "sender" should be created!
-    bool sendSystemMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * @overload
-     **/
-    bool sendSystemMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * @overload
-     **/
-    bool sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * @overload
-     **/
-    bool sendSystemMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * Sends a network message
-     * @param error The error code
-     * @param message The error message - use KGameError
-     * @param receiver the KGame / KPlayer this message is for. 0 For
-     * all
-     * @param sender The KGame / KPlayer this message is from (i.e.
-     * you). You probably want to leave this 0, then KGameNetwork will create 
-     * the correct value for you. You might want to use this if you send a 
-     * message from a specific player.
-     **/
-    void sendError(int error, const TQByteArray& message, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * Are we still offer offering server connections - only for game MASTER
-     * @return true/false
-     **/
-    bool isOfferingConnections() const;
-
-    /**
-     * Application cookie. this idendifies the game application. It
-     * help to distinguish between e.g. KPoker and KWin4
-     * @return the application cookie
-     **/
-    int cookie() const;
-
-    /**
-     * Send a network message msg with a given message ID msgid to all clients.
-     * You want to use this to send a message to the clients.
-     *
-     * Note that a message is always sent to ALL clients! This is necessary so
-     * that all clients always have the same data and can easily be changed from
-     * network to non-network without restarting the game. If you want a
-     * specific KGame / KPlayer to react to the message use the
-     * receiver and sender parameters. See KGameMessage::calsMessageId
-     *
-     * SendMessage differs from sendSystemMessage only by the msgid parameter.
-     * sendSystemMessage is thought as a KGame only mehtod while
-     * sendMessage is for public use. The msgid parameter will be
-     * +=KGameMessage::IdUser and in KGame::signalNetworkData msgid will
-     * be -= KGameMessage::IdUser again, so that one can easily distinguish
-     * between system and user messages.
-     *
-     * Use sendSystemMessage to comunicate with KGame (e.g. by adding a
-     * player) and sendMessage for your own user message.
-     *
-     * Note: a player should send messages through a KGameIO!
-     *
-     * @param buffer the message which will be send. See messages.txt for contents
-     * @param msgid an id for this message. See KGameMessage::GameMessageIds
-     * @param receiver the KGame / KPlayer this message is for.
-     * @param sender The KGame / KPlayer this message is from (i.e.
-     * you). You
-     * probably want to leave this 0, then KGameNetwork will create the correct
-     * value for you. You might want to use this if you send a message from a
-     * specific player.
-     * @return true if worked
-     **/
-    // AB: TODO: doc on how "receiver" and "sender" should be created!
-    bool sendMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * This is an overloaded member function, provided for convenience.
-     **/
-    bool sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * This is an overloaded member function, provided for convenience.
-     **/
-    bool sendMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-    /**
-     * This is an overloaded member function, provided for convenience.
-     **/
-    bool sendMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-
-    /**
-     * Called by ReceiveNetworkTransmission(). Will be overwritten by
-     * KGame and handle the incoming message.
-     **/
-    virtual void networkTransmission(TQDataStream&, int, TQ_UINT32, TQ_UINT32, TQ_UINT32 clientID) = 0;
-
-
-    /**
-     * Disconnect the current connection and establish a new local one.
-     **/
-    void disconnect();
-
-
-    /**
-     * If you are the ADMIN of the game you can give the ADMIN status away to
-     * another client. Use this e.g. if you want to quit the game or if you want
-     * another client to administrate the game (note that disconnect calls
-     * this automatically).
-     * @param clientID the ID of the new ADMIN (note: this is the _client_ID
-     * which has nothing to do with the player IDs. See KMessageServer)
-     **/
-    void electAdmin(TQ_UINT32 clientID);
-
-    /**
-     * Don't use this unless you really know what youre doing! You might
-     * experience some strange behaviour if you send your messages directly
-     * through the KMessageClient!
-     *
-     * @return a pointer to the KMessageClient used internally to send the
-     * messages. You should rather use one of the send functions!
-     **/
-    KMessageClient* messageClient() const;
-
-    /**
-     * Don't use this unless you really know what you are doing! You might
-     * experience some strange behaviour if you use the message server directly!
-     *
-     * @return a pointer to the message server if this is the MASTER KGame
-     * object. Note that it might be possible that no KGame object contains
-     * the KMessageServer at all! It might even run stand alone!
-     **/
-    KMessageServer* messageServer() const;
-
-    /**
-     * You should call this before doing thigs like, e.g. tqApp->processEvents().
-     * Don't forget to call unlock once you are done!
-     * 
-     * @see KMessageClient::lock
-     **/
-    virtual void lock();
-
-    /**
-     * @see KMessageClient::unlock
-     **/
-    virtual void unlock();
-
-signals:
-    /**
-     * A network error occurred
-     * @param error the error code
-     * @param text the error text
-     */
-    void signalNetworkErrorMessage(int error, TQString text);
-
-    /**
-     * Our connection to the KMessageServer has broken.
-     * See KMessageClient::connectionBroken
-     **/
-    void signalConnectionBroken();
-
-    /**
-     * This signal is emitted whenever the KMessageServer sends us a message that a
-     * new client connected. KGame uses this to call KGame::negotiateNetworkGame
-     * for the newly connected client if we are admin (see isAdmin)
-     *
-     * @see KMessageClient::eventClientConnected
-     *
-     * @param clientID the ID of the newly connected client
-     **/
-    void signalClientConnected(TQ_UINT32 clientID);
-
-    /**
-     * This signal is emitted whenever the KMessageServer sends us a message
-     * that a connection to a client was detached. The second parameter can be used
-     * to distinguish between network errors or removing on purpose.
-     *
-     * @see KMessageClient::eventClientDisconnected
-     *
-     * @param clientID the client that has disconnected
-     * @param broken true if the connection was lost because of a network error, false
-     *        if the connection was closed by the message server admin.
-     */
-    void signalClientDisconnected(TQ_UINT32 clientID, bool broken);
-
-    /**
-     * This client gets or loses the admin status.
-     * @see KMessageClient::adminStatusChanged
-     * @param isAdmin True if this client gets the ADMIN status otherwise FALSE
-     **/
-    void signalAdminStatusChanged(bool isAdmin);
-
-protected:
-    /**
-     * @internal
-     * Start a KMessageServer object and use it as the MASTER of the game.
-     * Note that you must not call this if there is already another master
-     * running!
-     **/
-    void setMaster();
-
-protected slots:
-    /**
-     * Called by KMessageClient::broadcastReceived() and will check if the
-     * message format is valid. If it is not, it will generate an error (see
-     * signalNetworkVersionError and signalNetworkErorrMessage).
-     * If it is valid, the pure virtual method networkTransmission() is called.
-     * (This one is overwritten in KGame.)
-     **/
-    void receiveNetworkTransmission(const TQByteArray& a, TQ_UINT32 clientID);
-
-    /**
-     * This KGame object receives or loses the admin status.
-     * @param isAdmin Whether we are admin or not
-     **/
-    void slotAdminStatusChanged(bool isAdmin);
-
-    /**
-     * Called when the network connection is about to terminate. Is used
-     * to store the network parameter like the game id
-     */
-     void aboutToLoseConnection(TQ_UINT32 id);
-
-    /**
-     * Called when the network connection is terminated. Used to clean
-     * up the disconnect parameter
-     */
-     void slotResetConnection();
-
-
-private:
-     void tryPublish();
-     void tryStopPublishing();
-     KGameNetworkPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameprocess.cpp b/libkdegames/kgame/kgameprocess.cpp
deleted file mode 100644
index 9dcc66c0..00000000
--- a/libkdegames/kgame/kgameprocess.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgameprocess.h"
-#include "kplayer.h"
-#include "kgame.h"
-#include "kgamemessage.h"
-#include "kmessageio.h"
-
-#include <krandomsequence.h>
-
-#include <tqbuffer.h>
-#include <tqdatastream.h>
-#include <tqcstring.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#define READ_BUFFER_SIZE  1024
-
-// ----------------------- Process Child ---------------------------
-
-KGameProcess::KGameProcess() : TQObject(0,0)
-{
-  mTerminate=false;
-  // Check whether a player is set. If not create one!
-  rFile.open(IO_ReadOnly|IO_Raw,stdin);
-  wFile.open(IO_WriteOnly|IO_Raw,stdout);
-  mMessageIO=new KMessageFilePipe(this,&rFile,&wFile);
-//  mMessageClient=new KMessageClient(this);
-//  mMessageClient->setServer(mMessageIO);
-//  connect (mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
-//          this, TQT_SLOT(receivedMessage(const TQByteArray&, TQ_UINT32)));
-  connect (mMessageIO, TQT_SIGNAL(received(const TQByteArray&)),
-          this, TQT_SLOT(receivedMessage(const TQByteArray&)));
-  fprintf(stderr,"KGameProcess::constructor %p %p\n",&rFile,&wFile);
- 
-  mRandom = new KRandomSequence;
-  mRandom->setSeed(0);
-}
-KGameProcess::~KGameProcess() 
-{
-  delete mRandom;
-  //delete mMessageClient;
-  //delete mMessageServer;
-  delete mMessageIO;
-  rFile.close();
-  wFile.close();
-  fprintf(stderr,"KGameProcess::destructor\n");
-}
-
-
-bool KGameProcess::exec(int argc, char *argv[])
-{
-  // Get id and cookie, ... from command line
-  processArgs(argc,argv);
-  do
-  {
-    mMessageIO->exec();
-  }  while(!mTerminate);
-  return true;
-}
-
-//    You have to do this to create a message 
-//    TQByteArray buffer;
-//    TQDataStream wstream(buffer,IO_WriteOnly);
-//    then stream data into the stream and call this function
-void KGameProcess::sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
-{
-  fprintf(stderr,"KGameProcess::sendMessage id=%d recv=%d",msgid,receiver);
-  TQByteArray a;
-  TQDataStream outstream(a,IO_WriteOnly);
-
-  TQBuffer *device=(TQBuffer *)stream.device();
-  TQByteArray data=device->buffer();;
-
-  KGameMessage::createHeader(outstream,0,receiver,msgid);
-  outstream.writeRawBytes(data.data(),data.size());
-
-  //if (mMessageClient) mMessageClient->sendBroadcast(a);
-  // TODO: The fixed received 2 will cause problems. But how to address the
-  // proper one?
-//  if (mMessageClient) mMessageClient->sendForward(a,2);
-  if (mMessageIO) mMessageIO->send(a);
-}
-
-void KGameProcess::sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
-{
-  sendSystemMessage(stream,msgid+KGameMessage::IdUser,receiver);
-}
-
-void KGameProcess::processArgs(int argc, char *argv[])
-{
-  int v=0;
-  if (argc>2)
-  {
-    v=atoi(argv[2]);
-    //kdDebug(11001) << "cookie (unused) " << v << endl;
-  }
-  if (argc>1)
-  {
-    v=atoi(argv[1]);
-    //kdDebug(11001) << "id (unused) " << v << endl;
-  }
-  fprintf(stderr,"processArgs \n");
-  fflush(stderr);
-}
-
-void KGameProcess::receivedMessage(const TQByteArray& receiveBuffer)
-{
- TQDataStream stream(receiveBuffer, IO_ReadOnly);
- int msgid;
- TQ_UINT32 sender; 
- TQ_UINT32 receiver; 
- KGameMessage::extractHeader(stream, sender, receiver, msgid);
- fprintf(stderr,"------ receiveNetworkTransmission(): id=%d sender=%d,recv=%d\n",msgid,sender,receiver);
- switch(msgid)
- {
-   case KGameMessage::IdTurn:
-     TQ_INT8 b;
-     stream >> b;
-     emit signalTurn(stream,(bool)b);
-   break;
-   case KGameMessage::IdIOAdded:
-     TQ_INT16 id;
-     stream >> id;
-     emit signalInit(stream,(int)id);
-   break;
-   default:
-      emit signalCommand(stream,msgid-KGameMessage::IdUser,receiver,sender);
-   break;
- }
-}
-
-#include "kgameprocess.moc"
diff --git a/libkdegames/kgame/kgameprocess.h b/libkdegames/kgame/kgameprocess.h
deleted file mode 100644
index b7e2d145..00000000
--- a/libkdegames/kgame/kgameprocess.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEPROCESS_H_
-#define __KGAMEPROCESS_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <tqfile.h>
-
-#include "kgameproperty.h"
-#include <krandomsequence.h>
-#include <kdemacros.h>
-class KPlayer;
-class KMessageFilePipe;
-
-/**
- * This is the process class used on the computer player
- * side to communicate with its counterpart KProcessIO class.
- * Using these two classes will give fully transparent communication
- * via TQDataStreams.
- */
-class KDE_EXPORT KGameProcess:  public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-  public:
-    /**
-     * Creates a KGameProcess class. Done only in the computer
-     * player. To activate the communication you have to call
-     * the exec function of this class which will listen
-     * to the communication and emit signals to notify you of
-     * any incoming messages.
-     * Note: This function will only return after you set
-     * setTerminate(true) in one of the received signals.
-     * So you can not do any computer calculation after the exec function.
-     * Instead you react on the signals which are emitted after a
-     * message is received and perform the calculations there!
-     * Example:
-     * \code
-     *  int main(int argc ,char * argv[])
-     *  {
-     *    KGameProcess proc;
-     *    connect(&proc,TQT_SIGNAL(signalCommand(TQDataStream &,int ,int ,int )),
-     *                    this,TQT_SLOT(slotCommand(TQDataStream & ,int ,int ,int )));
-     *    connect(&proc,TQT_SIGNAL(signalInit(TQDataStream &,int)),
-     *                    this,TQT_SLOT(slotInit(TQDataStream & ,int )));
-     *    connect(&proc,TQT_SIGNAL(signalTurn(TQDataStream &,bool )),
-     *                    this,TQT_SLOT(slotTurn(TQDataStream & ,bool )));
-     *    return proc.exec(argc,argv);
-     *  }
-     *  \endcode
-     */
-    KGameProcess();
-    /**
-     * Destruct the process
-     */
-    ~KGameProcess();
-
-    /**
-     * Enters the event loop of the computer process. Does only
-     * return on setTerminate(true)!
-     */
-    bool exec(int argc, char *argv[]);
-
-    /**
-     * Should the computer process leave its exec function?
-     * Activated if you setTerminate(true);
-     *
-     * @return true/false
-     */
-    bool terminate() const {return mTerminate;}
-
-    /**
-     * Set this to true if the computer process should end, ie
-     * leave its exec function.
-     *
-     * @param b true for exit the exec function
-     */
-    void setTerminate(bool b) {mTerminate=b;}
-
-    /**
-     * Sends a message to the corresponding KGameIO
-     * device. Works like the sendSystemMessage but
-     * for user id's
-     *
-     * @param stream the TQDataStream containing the message
-     * @param msgid the message id for the message
-     * @param receiver unused
-     */
-    void sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
-
-    /**
-     * Sends a system message to the corresonding KGameIO device.
-     * This will normally be either a performed move or a query
-     * (IdProcessQuery). The query option is a way to communicate
-     * with the KGameIO at the other side and e.g. retrieve some
-     * game relevant data from here.
-     * Exmaple for a query:
-     * \code
-     *  TQByteArray buffer;
-     *  TQDataStream out(buffer,IO_WriteOnly);
-     *  int msgid=KGameMessage::IdProcessQuery;
-     *  out << (int)1;
-     *  proc.sendSystemMessage(out,msgid,0);
-     * \endcode
-     *
-     * @param stream the TQDataStream containing the message
-     * @param msgid the message id for the message
-     * @param receiver unused
-     */
-    void sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
-
-    /**
-     * Returns a pointer to a KRandomSequence. You can generate
-     * random numbers via e.g.
-     * \code
-     *   random()->getLong(100);
-     * \endcode
-     * 
-     * @return KRandomSequence pointer
-     */
-    KRandomSequence *random() {return mRandom;}
-
-  protected:
-    /**
-     * processes the command line argumens to set up the computer player
-     * Pass the argumens exactely as given by main()
-     */
-    void processArgs(int argc, char *argv[]);
-
-  protected slots:
-    /**
-     * A message is received via the interprocess connection. The
-     * appropriate signals are called.
-     */
-      void receivedMessage(const TQByteArray& receiveBuffer);
-
-  signals:
-    /**
-     * The generic communication signal. You have to connect to this
-     * signal to generate a valid computer response onto arbitrary messages.
-     * All signals but IdIOAdded and IdTurn end up here!
-     * Example:
-     * \code
-     * void Computer::slotCommand(int &msgid,TQDataStream &in,TQDataStream &out)
-     * {
-     *   TQ_INT32 data,move;
-     *   in >> data;
-     *   // compute move ...
-     *   move=data*2;
-     *   out << move;
-     * }
-     * \endcode
-     *
-     * @param inputStream the incoming data stream
-     * @param msgid the message id of the message which got transmitted to the computer
-     * @param receiver the id of the receiver
-     * @param sender the id of the sender
-     */
-     void signalCommand(TQDataStream &inputStream,int msgid,int receiver,int sender);
-
-     /**
-      * This signal is emmited if the computer player should perform a turn.
-      * Calculations can be made here and the move can then be send back with
-      * sendSystemMessage with the message id KGameMessage::IdPlayerInput.
-      * These must provide a move which complies to your other move syntax as
-      * e.g. produces by keyboard or mouse input.
-      * Additonal data which have been written into the stream from the
-      * ProcessIO's signal signalPrepareTurn can be retrieved from the
-      * stream here.
-      * Example:
-      * \code
-      * void slotTurn(TQDataStream &in,bool turn)
-      * {
-      *   int id;
-      *   int recv;
-      *   TQByteArray buffer;
-      *   TQDataStream out(buffer,IO_WriteOnly);
-      *   if (turn)
-      *   {
-      *     // Create a move - the format is yours to decide
-      *     // It arrives exactly as this in the kgame inputMove function!!
-      *     TQ_INT8 x1,y1,pl;
-      *     pl=-1;
-      *     x1=proc.random()->getLong(8);
-      *     y1=proc.random()->getLong(8);
-      *     // Stream it
-      *     out << pl << x1 << y1;
-      *     id=KGameMessage::IdPlayerInput;
-      *     proc.sendSystemMessage(out,id,0);
-      *   }
-      * }
-      * \endcode
-      *
-      * @param stream The datastream which contains user data
-      * @param turn True or false whether the turn is activated or deactivated
-      *
-      */
-     void signalTurn(TQDataStream &stream,bool turn);
-
-     /**
-      * This signal is emmited when the process is initialized, i.e. added
-      * to a KPlayer. Initial initialisation can be performed here be reacting
-      * to the KProcessIO signal signalIOAdded and retrieving the data here
-      * from the stream. 
-      * It works just as the signalTurn() but is only send when the player is
-      * added to the game, i.e. it needs some initialization data
-      *
-      * @param stream The datastream which contains user data 
-      * @param userid The userId of the player. (Careful to rely on it yet)
-      */
-     void signalInit(TQDataStream &stream,int userid);
-
-  protected:
-    bool mTerminate;
-    KMessageFilePipe *mMessageIO;
-  private:
-    TQFile rFile;
-    TQFile wFile;
-    KRandomSequence* mRandom;
-};
-#endif
diff --git a/libkdegames/kgame/kgameproperty.cpp b/libkdegames/kgame/kgameproperty.cpp
deleted file mode 100644
index 49a8984f..00000000
--- a/libkdegames/kgame/kgameproperty.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-#include "kgamemessage.h"
-#include "kplayer.h"
-#include "kgame.h"
-
-#define KPLAYERHANDLER_LOAD_COOKIE 6239
-
-KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
-{
- init();
- registerData(id, parent);
-}
-
-KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
-{
- init();
- registerData(id, parent);
-}
-
-KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
-{
- init();
- registerData(id, owner);
-}
-
-KGamePropertyBase::KGamePropertyBase()
-{
- init();
-}
-
-KGamePropertyBase::~KGamePropertyBase()
-{
- unregisterData();
-}
-
-void KGamePropertyBase::init()
-{
- mOwner = 0;
- setDirty(false);
-
- // this is very useful and used by e.g. KGameDialog so
- // it is activated by default. Big games may profit by deactivating it to get
- // a better performance. 
- setEmittingSignal(true);
-
- setOptimized(false); 
- 
- //setReadOnly(false);
- mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
-
- // local is default
- setPolicy(PolicyLocal);
-}
-
-int KGamePropertyBase::registerData(int id, KGame* owner, TQString name)
-{ return registerData(id, owner->dataHandler(), name);  }
-
-int KGamePropertyBase::registerData(int id, KPlayer* owner, TQString name)
-{ return registerData(id, owner->dataHandler(), name);  }
-
-int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
-{ return registerData(-1, owner,p, name);  }
-
-int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, TQString name)
-{ return registerData(id, owner,PolicyUndefined, name);  }
-
-int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
-{
-// we don't support changing the id
- if (!owner) {
-	kdWarning(11001) << k_funcinfo << "Resetting owner=0. Sure you want to do this?" << endl;
-	mOwner=0;
-	return -1;
- }
- if (!mOwner) {
-	if (id==-1) {
-		id=owner->uniquePropertyId();
-	}
-	mId = id;
-	mOwner = owner;
-	mOwner->addProperty(this, name);
-	if (p!=PolicyUndefined) {
-		setPolicy(p);
-	} else {
-		setPolicy(mOwner->policy());
-	}
- }
- return mId;
-}
-
-void KGamePropertyBase::unregisterData()
-{
- if (!mOwner) {
-	return;
- }
- mOwner->removeProperty(this);
- mOwner = 0;
-}
-
-bool KGamePropertyBase::sendProperty()
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyHeader(s, id());
- save(s);
- if (mOwner) {
-	return mOwner->sendProperty(s);
- } else {
-	kdError(11001) << k_funcinfo << "Cannot send because there is no receiver defined" << endl;
-	return false;
- }
-}
-
-bool KGamePropertyBase::sendProperty(const TQByteArray& data)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyHeader(s, id());
- s.writeRawBytes(data.data(), data.size());
- if (mOwner) {
-	return mOwner->sendProperty(s);
- } else {
-	kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
-	return false;
- }
-}
-
-bool KGamePropertyBase::lock()
-{
- if (isLocked()) {
-	return false;
- }
- setLock(true);
- return true;
-}
-
-bool KGamePropertyBase::unlock(bool force)
-{
- if (isLocked() && !force) {
-	return false;
- }
- setLock(false);
- return true;
-}
-
-void KGamePropertyBase::setLock(bool l)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
- 
- s << (TQ_INT8)l;
- if (mOwner) {
-	mOwner->sendProperty(s);
- } else {
-	kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
-	return ;
- }
-}
-
-void KGamePropertyBase::emitSignal()
-{
- //kdDebug(11001) << k_funcinfo << ": mOwnerP="<< mOwner << " id=" << id()   << endl;
- if (mOwner ) {
-	mOwner->emitSignal(this);
- } else {
-	kdError(11001) << k_funcinfo << ":id="<<id()<<" Cannot emitSignal because there is no handler set" << endl;
- }
-}
-
-void KGamePropertyBase::command(TQDataStream& s, int cmd, bool isSender)
-{
- switch (cmd) {
-	case CmdLock:
-	{
-		if (!isSender) {
-			TQ_INT8 locked;
-			s >> locked;
-			mFlags.bits.locked = (bool)locked ;
-			break;
-		}
-	}
-	default: // probably in derived classes
-		break;
- }
-}
-
diff --git a/libkdegames/kgame/kgameproperty.h b/libkdegames/kgame/kgameproperty.h
deleted file mode 100644
index f02c4db0..00000000
--- a/libkdegames/kgame/kgameproperty.h
+++ /dev/null
@@ -1,848 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTY_H_
-#define __KGAMEPROPERTY_H_
-
-#include <tqdatastream.h>
-
-#include <kdebug.h>
-#include <typeinfo>
-#include <kdemacros.h>
-class KGame;
-class KPlayer;
-class KGamePropertyHandler;
-using namespace std;
-
-/**
- * @short Base class of KGameProperty
- *
- * The KGamePropertyBase class is the base class of KGameProperty. See
- * KGameProperty for further information.
- * 
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGamePropertyBase
-{
-public:
-	enum PropertyDataIds  { // these belong to KPlayer/KGame!
-		//KPlayer
-		IdGroup=1,
-		IdUserId=2,
-		IdAsyncInput=3,
-		IdTurn=4,
-		IdName=5,
-
-		//KGame
-		IdGametqStatus=6,
-		IdMaxPlayer=7,
-		IdMinPlayer=8,
-
-    // Input Grabbing
-    IdGrabInput=16,
-    IdReleaseInput=17,
-
-		IdCommand, // Reserved for internal use
-		IdUser=256,
-
-		IdAutomatic=0x7000  // Id's from here on are automatically given (16bit)
-	};
-
-	/**
-	 * Commands for advanced properties (TQ_INT8)
-	 **/
-	enum PropertyCommandIds 
-	{
-		// General
-		CmdLock=1,
-		
-		// Array
-		CmdAt=51,
-		CmdResize=52,
-		CmdFill=53,
-		CmdSort=54,
-		// List (could be the same id's actually)
-		CmdInsert=61,
-		CmdAppend=62,
-		CmdRemove=63,
-		CmdClear=64
-	};
-
-	/**
-	 * The policy of the property. This can be PolicyClean (setValue uses
-	 * send), PolicyDirty (setValue uses changeValue) or
-	 * PolicyLocal (setValue uses setLocal).
-	 *
-	 * A "clean" policy means that the property is always the same on every
-	 * client. This is achieved by calling send which actually changes
-	 * the value only when the message from the MessageServer is received.
-	 *
-	 * A "dirty" policy means that as soon as setValue is called the
-	 * property is changed immediately. And additionally sent over network.
-	 * This can sometimes lead to bugs as the other clients do not 
-	 * immediately have the same value. For more information see 
-	 * changeValue.
-	 *
-	 * PolicyLocal means that a KGameProperty behaves like ever
-	 * "normal" variable. Whenever setValue is called (e.g. using "=")
-	 * the value of the property is changes immediately without sending it
-	 * over network. You might want to use this if you are sure that all
-	 * clients set the property at the same time.
-	 **/
-	enum PropertyPolicy
-	{
-		PolicyUndefined = 0,
-		PolicyClean = 1,
-		PolicyDirty = 2,
-		PolicyLocal = 3
-	};
-
-
-	/**
-	 * Constructs a KGamePropertyBase object and calls registerData.
-	 * @param id The id of this property. MUST be UNITQUE! Used to send and
-	 * receive changes in the property of the playere automatically via
-	 * network. 
-	 * @param owner The owner of the object. Must be a KGamePropertyHandler which manages
-	 * the changes made to this object, i.e. which will send the new data
-	 **/
-	KGamePropertyBase(int id, KGamePropertyHandler* owner);
-
-	KGamePropertyBase(int id, KGame* parent);
-	KGamePropertyBase(int id, KPlayer* parent);
-
-	/**
-	 * Creates a KGamePropertyBase object without an owner. Remember to call
-	 * registerData!
-	 **/
-	KGamePropertyBase();
-
-	virtual ~KGamePropertyBase();
-
-	/**
-	 * Changes the consistency policy of a property. The  
-	 * PropertyPolicy is one of PolicyClean (defaulz), PolicyDirty or PolicyLocal.
-	 *
-	 * It is up to you to decide how you want to work. 
-	 **/
-	void setPolicy(PropertyPolicy p) { mFlags.bits.policy = p; } 
-
-	/**
-	 * @return The default policy of the property
-	 **/
-	PropertyPolicy policy() const { return (PropertyPolicy)mFlags.bits.policy; }
-
-	/**
-	 * Sets this property to emit a signal on value changed.
-	 * As the proerties do not inehrit TQObject for optimisation
-	 * this signal is emited via the KPlayer or KGame object
-	 **/
-	void setEmittingSignal(bool p)	{ mFlags.bits.emitsignal=p; }
-
-	/**
-	 * See also setEmittingSignal
-	 * @return Whether this property emits a signal on value change
-	 **/
-	bool isEmittingSignal()	const { return mFlags.bits.emitsignal; }
-
-	/**
-	 * Sets this property to try to optimize signal and network handling
-	 * by not sending it out when the property value is not changed.
-	 **/
-	void setOptimized(bool p) { mFlags.bits.optimize = p ; }
-
-	/**
-	 * See also setOptimize
-	 * @return Whether the property optimizes access (signals,network traffic)
-	 **/
-	bool isOptimized() const { return mFlags.bits.optimize; }
-
-	/**
-	 * @return Whether this property is "dirty". See also setDirty
-	 **/
-	bool isDirty() const { return mFlags.bits.dirty; }
-
-	/**
-	 * A locked property can only be changed by the player who has set the
-	 * lock. See also setLocked
-	 * @return Whether this property is currently locked. 
-	 **/
-	bool isLocked() const { return mFlags.bits.locked; }
-
-	/**
-	 * A locked property can only be changed by the player who has set the
-	 * lock.
-	 *
-	 * You can only call this if isLocked is false. A message is sent
-	 * over network so that the property is locked for all players except
-	 * you.
-	 *
-	 * @return returns false if the property can not be locked, i.e. it is already locked
-	 *
-	 **/
-	bool lock();
-
-	/**
-	 * A locked property can only be changed by the player who has set the
-	 * lock.
-	 *
-	 * You can only call this if isLocked is false. A message is sent
-	 * over network so that the property is locked for all players except
-	 * you.
-	 *
-	 * @return returns false if the property can not be locked, i.e. it is already locked
-	 *
-	 **/
-	bool unlock(bool force=false);
-
-	/**
-	 * This will read the value of this property from the stream. You MUST
-	 * overwrite this method in order to use this class
-	 * @param s The stream to read from
-	 **/
-	virtual void load(TQDataStream& s) = 0;
-
-	/**
-	 * Write the value into a stream. MUST be overwritten
-	 **/
-	virtual void save(TQDataStream& s) = 0;
-
-	/** 
-	 * send a command to advanced properties like arrays
-	 * @param stream The stream containing the data of the comand
-	 * @param msgid The ID of the command - see PropertyCommandIds
-	 * @param isSender whether this client is also the sender of the command
-	 **/
-	virtual void command(TQDataStream &stream, int msgid, bool isSender=false);
-
-	/**
-	 * @return The id of this property
-	 **/
-	int id() const { return mId; }
-
-	/**
-	 * @return a type_info of the data this property contains. This is used
-	 * e.g. by KGameDebugDialog
-	 **/
-	virtual const type_info* typeinfo() { return &typeid(this); }
-
-	/**
-	 * You have to register a KGamePropertyBase before you can use it.
-	 *
-	 * You MUST call this before you can use KGamePropertyBase!
-	 *
-	 * @param id the id of this KGamePropertyBase object. The id MUST be
-	 * unique, i.e. you cannot have two properties with the same id for one
-	 * player, although (currently) nothing prevents you from doing so. But
-	 * you will get strange results!
-	 *
-	 * @param owner The owner of this data. This will send the data
-	 * using KPropertyHandler::sendProperty whenever you call send
-	 *
-	 * @param p If not 0 you can set the policy of the property here
-	 *
-	 * @param name if not 0 you can assign a name to this property
-	 *
-	 **/
-	int registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name=0);
-
-	/** 
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 **/
-	int registerData(int id, KGamePropertyHandler* owner, TQString name=0);
-
-	/** 
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 **/
-	int registerData(int id, KGame* owner, TQString name=0);
-
-	/** 
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 **/
-	int registerData(int id, KPlayer* owner, TQString name=0);
-
-	/** 
-	 * This is an overloaded member function, provided for convenience.
-	 * It differs from the above function only in what argument(s) it accepts.
-	 * In particular you can use this function to create properties which
-	 * will have an automatic id assigned. The new id is returned.
-	 **/
-	int registerData(KGamePropertyHandler* owner,PropertyPolicy p=PolicyUndefined, TQString name=0);
-
-	void unregisterData();
-
- 
-protected:
-	/**
-	 * A locked property can only be changed by the player who has set the
-	 * lock.
-	 *
-	 * You can only call this if isLocked is false. A message is sent
-	 * over network so that the property is locked for all players except
-	 * you. 
-	 * Usually you use lock and unlock to access this property
-	 *
-	 **/
-	void setLock(bool l);
-
-	/**
-	 * Sets the "dirty" flag of the property. If a property is "dirty" i.e.
-	 * KGameProperty::setLocal has been called there is no guarantee
-	 * that all clients share the same value. You have to ensure this
-	 * yourself e.g. by calling KGameProperty::setLocal on every
-	 * client. You can also ignore the dirty flag and continue working withe
-	 * the property depending on your situation.
-	 **/
-	void setDirty(bool d) { mFlags.bits.dirty = d ; }
-
-	/**
-	 * Forward the data to the owner of this property which then sends it
-	 * over network. save is used to store the data into a stream so
-	 * you have to make sure that function is working properly if you
-	 * implement your own property!
-	 *
-	 * Note: this sends the <em>current</em> property!
-	 *
-	 * Might be obsolete - KGamePropertyArray still uses it. Is this a bug
-	 * or correct?
-	 **/
-	bool sendProperty();
-	
-	/**
-	 * Forward the data to the owner of this property which then sends it
-	 * over network. save is used to store the data into a stream so
-	 * you have to make sure that function is working properly if you
-	 * implement your own property!
-	 *
-	 * This function is used by send to send the data over network.
-	 * This does <em>not</em> send the current value but the explicitly
-	 * given value. 
-	 *
-	 * @return TRUE if the message could be sent successfully, otherwise
-	 * FALSE
-	 **/
-	bool sendProperty(const TQByteArray& b);
-	
-	/**
-	 * Causes the parent object to emit a signal on value change
-	 **/
-	void emitSignal();
-
-protected:
-	KGamePropertyHandler* mOwner;
-	
-	// Having this as a union of the bitfield and the char
-	// allows us to stream this quantity easily (if we need to)
-	// At the moment it is not yet transmitted
-	union Flags {
-		char flag;
-		struct {
-			// unsigned char dosave : 1;   // do save this property
-			// unsigned char delaytransmit : 1;   // do not send immediately on
-                                             // change but a KPlayer:TQTimer
-                                             // sends it later on - fast
-                                             // changing variables
-			unsigned char emitsignal : 1; // KPlayer notifies on variable change (true)
-			//unsigned char readonly : 1; // whether the property can be changed (false)
-			unsigned char optimize : 1; // whether the property tries to optimize send/emit (false)
-			unsigned char dirty: 1; // whether the property dirty (setLocal() was used)
-			unsigned char policy : 2; // whether the property is always consistent (see PropertyPolicy)
-			unsigned char locked: 1; // whether the property is locked (true)
-		} bits;
-	} mFlags;
-	
-private:
-	friend class KGamePropertyHandler;
-	void init();
-	
-private:
-	int mId;
-
-};
-
-/**
- * @short A class for network transparent games
- *
- * Note: The entire API documentation is obsolete!
- * 
- * The class KGameProperty can store any form of data and will transmit it via
- * network whenver you call send. This makes network transparent games
- * very easy. You first have to register the data to a KGamePropertyHandler
- * using KGamePropertyBase::registerData (which is called by the
- * constructor). For the KGamePropertyHandler you can use
- * KGame::dataHandler or KPlayer::dataHandler but you can also create your
- * own data handler.
- *
- * There are several concepts you can follow when writing network games. These
- * concepts differ completely from the way how data is transferred so you should
- * decide which one to use. You can also mix these concepts for a single
- * property but we do not recommend this. The concepts:
- * <ul>
- * <li> Always Consistent (clean)
- * <li> Not Always Consistent (dirty)
- * <li> A Mixture (very dirty)
- * </ul>
- * I repeat: we do <em>not</em> recommend the third option ("a mixture"). Unless
- * you have a good reason for this you will probably introduce some hard to find
- * (and to fix) bugs.
- *
- * @section Always consistent (clean):
- * 
- * This "policy" is default. Whenever you create a KGameProperty it is always
- * consistent. This means that consistency is the most important thing for the
- * property. This is achieved by using send to change the value of the
- * property. send needs a running KMessageServer and therefore
- * <em>MUST</em> be plugged into a KGamePropertyHandler using either
- * registerData or the constructor. The parent of the dataHandler must be able
- * to send messages (see above: the message server must be running). If you use
- * send to change the value of a property you won't see the effect
- * immediately: The new value is first transferred to the message server which
- * queues the message. As soon as <em>all</em> messages in the message server
- * which are before the changed property have been transferred the message
- * server delivers the new value of the KGameProperty to all clients. A
- * TQTimer::singleShot is used to queue the messages inside the
- * KMessageServer. 
- *
- * This means that if you do the following:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.initData(0);
- * myProperty = 10;
- * int value = myProperty.value();
- * \endcode
- * then "value" will be "0". initData is used to initialize the property
- * (e.g. when the KMessageServer is not yet running or can not yet be
- * reached). This is because "myProperty = 10" or "myProperty.send(10)" send a
- * message to the KMessageServer which uses TQTimer::singleShot to
- * queue the message. The game first has to go back into the event loop where
- * the message is received. The KGamePropertyHandler receives the new value
- * sets the property. So if you need the new value you need to store it in a
- * different variable (see setLocal which creates one for you until the
- * message is received). The KGamePropertyHandler emits a signal (unless
- * you called setEmitSignal with false) when the new value is received:
- * KGamePropertyHandler::signalPropertyChanged. You can use this to react
- * to a changed property.
- *
- * This may look quite confusing but it has a <em>big</em> advantage: all
- * KGameProperty objects are ensured to have the same value on all clients in
- * the game at every time. This way you will save you a lot of trouble as
- * debugging can be very difficult if the value of a property changes
- * immediately on client A but only after one or two additianal messages
- * (function calls, status changes, ...) on client B.
- *
- * The only disadvantage of this (clean) concept is that you cannot use a
- * changed variable immediately but have to wait for the KMessageServer to
- * change it. You probably want to use
- * KGamePropertyHandler::signalPropertyChanged for this.
- *
- * @section Not Always Consistent (dirty):
- * 
- * There are a lot of people who don't want to use the (sometimes quite complex)
- * "clean" way. You can use setAlwaysConsistent to change the default
- * behaviour of the KGameProperty. If a property is not always consistent
- * it will use changeValue to send the property.  changeValue also uses
- * send to send the new value over network but it also uses
- * setLocal to create a local copy of the property. This copy is created
- * dynamically and is deleted again as soon as the next message from the network
- * is received. To use the example above again:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.setAlwaysConsistent(false);
- * myProperty.initData(0);
- * myProperty = 10;
- * int value = myProperty.value();
- * \endcode
- * Now this example will "work" so value now is 10. Additionally the
- * KMessageServer receives a message from the local client (just as explained
- * above in "Always Consistent"). As soon as the message returns to the local
- * client again the local value is deleted, as the "network value" has the same
- * value as the local one. So you won't lose the ability to use the always
- * consistent "clean" value of the property if you use the "dirty" way. Just use
- * networkValue to access the value which is consistent among all clients. 
- *
- * The advantage of this concept is clear: you can use a KGameProperty as
- * every other variable as the changes value takes immediate effect.
- * Additionally you can be sure that the value is transferred to all clients.
- * You will usually not experience serious bugs just because you use the "dirty"
- * way. Several events have to happen at once to get these "strange errors"
- * which result in inconsistent properties (like "game running" on client A but
- * "game ended/paused" on client B).  But note that there is a very good reason
- * for the existence of these different concepts of KGameProperty. I have
- * myself experienced such a "strange error" and it took me several days to find
- * the reason until I could fix it. So I personally recommend the "clean" way.
- * On the other hand if you want to port a non-network game to a network game
- * you will probably start with "dirty" properties as it is you will not have to
- * change that much code...
- *
- * @section A Mixture (very dirty):
- * 
- * You can also mix the concepts above. Note that we really don't recommend
- * this. With a mixture I mean something like this:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.setAlwaysConsistent(false);
- * myProperty.initData(0);
- * myProperty = 10;
- * myProperty.setAlwaysConsistent(true);
- * myProperty = 20;
- * \endcode
- * (totally senseless example, btw) I.e. I am speaking of mixing both concepts
- * for a single property. Things like
- * \code
- * KGamePropertyInt myProperty1(id1, dataHandler());
- * KGamePropertyInt myProperty2(id2, dataHandler());
- * myProperty1.initData(0);
- * myProperty2.initData(0);
- * myProperty1.setAlwaysConsistent(false);
- * myProperty2.setAlwaysConsistent(true);
- * myProperty1 = 10;
- * myProperty2 = 20;
- * \endcode
- * are ok. But mixing the concepts for a single property will make it nearly
- * impossible to you to debug your game. 
- *
- * So the right thing to do(tm) is to decide in the constructor whether you want
- * a "clean" or "dirty" property. 
- *
- * Even if you have decided for one of the concepts you still can manually
- * follow another concept than the "policy" of your property. So if you use an
- * always consistent KGameProperty you still can manually call
- * changeValue as if it was not always consistent. Note that although this is
- * also kind of a "mixture" as described above this is very useful sometimes. In
- * contrast to the "mixture" above you don't have the problem that you don't
- * exactly know which concept you are currently following because you used the
- * function of the other concept only once. 
- *
- * @section Custom classes:
- *
- * If you want to use a custum class with KGameProperty you have to implement the
- * operators << and >> for TQDataStream:
- * \code
- * class Card
- * {
- * public:
- * int type;
- * int suite;
- * };
- * TQDataStream& operator<<(TQDataStream& stream, Card& card)
- * {
- * TQ_INT16 type = card.type;
- * TQ_INT16 suite = card.suite;
- * s << type;
- * s << suite;
- * return s;
- * }
- * TQDataStream& operator>>(TQDataStream& stream, Card& card)
- * {
- * TQ_INT16 type;
- * TQ_INT16 suite;
- * s >> type;
- * s >> suite;
- * card.type = (int)type;
- * card.suite = (int)suite;
- * return s;
- * }
- *
- * class Player : KPlayer
- * {
- * [...]
- * KGameProperty<Card> mCards;
- * };
- * \endcode
- *
- * Note: unlike most QT classes KGameProperty objects are *not* deleted
- * automatically! So if you create an object using e.g. KGameProperty<int>* data =
- * new KGameProperty(id, dataHandler()) you have to put a delete data into your
- * destructor!
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-template<class type>
-class KGameProperty  : public KGamePropertyBase
-{
-public:
-	/**
-	 * Constructs a KGameProperty object. A KGameProperty object will transmit
-	 * any changes to the KMessageServer and then to all clients in the
-	 * game (including the one that has sent the new value)
-	 * @param id The id of this property. <em>MUST be UNITQUE</em>! Used to send and
-	 * receive changes in the property of the playere automatically via
-	 * network. 
-	 * @param owner The parent of the object. Must be a KGame which manages
-	 * the changes made to this object, i.e. which will send the new data.
-	 * Note that in contrast to most KDE/QT classes KGameProperty objects
-	 * are <em>not</em> deleted automatically!
-	 **/
-// TODO: ID: Very ugly - better use something like parent()->propertyId() or so which assigns a free id automatically.
-	KGameProperty(int id, KGamePropertyHandler* owner) : KGamePropertyBase(id, owner) { init(); }
-
-	/**
-	 * This constructor does nothing. You have to call 
-	 * KGamePropertyBase::registerData
-	 * yourself before using the KGameProperty object.
-	 **/
-	KGameProperty() : KGamePropertyBase() { init(); }
-
-	virtual ~KGameProperty() {}
-
-	/**
-	 * Set the value depending on the current policy (see 
-	 * setConsistent). By default KGameProperty just uses send to set
-	 * the value of a property. This behaviour can be changed by using
-	 * setConsistent.
-	 * @param v The new value of the property
-	 **/
-	void setValue(type v)
-	{
-		switch (policy()) {
-			case PolicyClean:
-				send(v);
-				break;
-			case PolicyDirty:
-				changeValue(v);
-				break;
-			case PolicyLocal:
-				setLocal(v);
-				break;
-			default: // NEVER!
-				kdError(11001) << "Undefined Policy in property " << id() << endl;
-				return;
-		}
-	}
-
-
-	/**
-	 * This function sends a new value over network.
-	 *
-	 * Note that the value DOES NOT change when you call this function. This
-	 * function saves the value into a TQDataStream and calls
-	 * sendProperty where it gets forwarded to the owner and finally the
-	 * value is sent over network. The KMessageServer now sends the
-	 * value to ALL clients - even the one who called this function. As soon
-	 * as the value from the message server is received load is called
-	 * and _then_ the value of the KGameProperty has been set.
-	 *
-	 * This ensures that a KGameProperty has _always_ the same value on
-	 * _every_ client in the network. Note that this means you can NOT do
-	 * something like
-	 * \code
-	 * myProperty.send(1);
-	 * doSomething(myProperty);
-	 * \endcode
-	 * as myProperty has not yet been set when doSomething is being called.
-	 *
-	 * You are informed about a value change by a singal from the parent of
-	 * the property which can be deactivated by setEmittingSignal because of
-	 * performance (you probably don't have to deactivate it - except you
-	 * want to write a real-time game like Command&Conquer with a lot of
-	 * acitvity). See emitSignal
-	 *
-	 * Note that if there is no KMessageServer accessible - before
-	 * the property has been registered to the KGamePropertyHandler (as
-	 * it is the case e.g. before a KPlayer has been plugged into the
-	 * KGame object) the property is *not* sent but set *locally* (see
-	 * setLocal)!
-	 * 
-	 * @param v The new value of the property
-	 * @return whether the property could be sent successfully
-	 * @see setValue setLocal changeValue value
-	 **/
-	bool send(type v)
-	{
-		if (isOptimized() && mData == v) {
-			return true;
-		}
-		if (isLocked()) {
-			return false;
-		}
-		TQByteArray b;
-		TQDataStream stream(b, IO_WriteOnly);
-		stream << v;
-		if (!sendProperty(b)) {
-			setLocal(v);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * This function sets the value of the property directly, i.e. it
-	 * doesn't send it to the network. 
-	 *
-	 * Int contrast to @see you change _only_ the local value when using
-	 * this function. You do _not_ change the value of any other client. You
-	 * probably don't want to use this if you are using a dedicated server
-	 * (which is the only "client" which is allowed to change a value) but
-	 * rather want to use send(). 
-	 *
-	 * But if you use your clients as servers (i.e. all clients receive a
-	 * players turn and then calculate the reaction of the game theirselves)
-	 * then you probably want to use setLocal as you can do things like
-	 * \code
-	 * myProperty.setLocal(1);
-	 * doSomething(myProperty);
-	 * \endcode
-	 * on every client.
-	 *
-	 * If you want to set the value locally AND send it over network you
-	 * want to call changeValue!
-	 *
-	 * You can also use setPolicy to set the default policy to
-	 * PolicyLocal.
-	 *
-	 * @see setValue send changeValue value
-	 **/
-	bool setLocal(type v) 
-	{
-		if (isOptimized() && mData == v) {
-			return false;
-		}
-		if (isLocked()) {
-			return false;
-		}
-		mData = v;
-		setDirty(true);
-		if (isEmittingSignal()) {
-			emitSignal();
-		}
-		return true;
-	}
-
-	/**
-	 * This function does both, change the local value and change the
-	 * network value. The value is sent over network first, then changed
-	 * locally.
-	 *
-	 * This function is a convenience function and just calls send
-	 * followed by setLocal
-	 *
-	 * Note that emitSignal is also called twice: once after
-	 * setLocal and once when the value from send is received
-	 *
-	 * @see send setLocal setValue value 
-	 **/
-	void changeValue(type v)
-	{
-		send(v);
-		setLocal(v);
-	}
-
-	/**
-	 * Saves the object to a stream.
-	 * @param stream The stream to save to
-	 **/
-	virtual void save(TQDataStream &stream)
-	{
-		stream << mData;
-	}
-
-	/**
-	 * @return The local value (see setLocal) if it is existing,
-	 * otherwise the network value which is always consistent on every
-	 * client.
-	 **/
-	const type& value() const
-	{
-		return mData;
-	}
-
-	/**
-	 * Reads from a stream and assigns the read value to this object.
-	 *
-	 * This function is called automatically when a new value is received
-	 * over network (i.e. it has been sent using send on this or any
-	 * other client) or when a game is loaded (and maybe on some other
-	 * events).
-	 *
-	 * Also calls emitSignal if isEmittingSignal is TRUE.
-	 * @param s The stream to read from
-	 **/
-	virtual void load(TQDataStream& s)
-	{
-		s >> mData;
-		setDirty(false);
-		if (isEmittingSignal()) {
-			emitSignal();
-		}
-	}
-
-	/**
-	 * This calls setValue to change the value of the property. Note
-	 * that depending on the policy (see setAlwaysConsistent) the
-	 * returned value might be different from the assigned value!!
-	 *
-	 * So if you use setPolicy(PolicyClean):
-	 * \code
-	 * int a, b = 10;
-	 * myProperty = b;
-	 * a = myProperty.value();
-	 * \endcode
-	 * Here a and b would differ!
-	 * The value is actually set as soon as it is received from the
-	 * KMessageServer which forwards it to ALL clients in the network.
-	 *
-	 * If you use a clean policy (see setPolicy) then
-	 * the returned value is the assigned value
-	 **/
-	const type& operator=(const type& t) 
-	{ 
-		setValue(t); 
-		return value();
-	}
-
-	/**
-	 * This copies the data of property to the KGameProperty object.
-	 *
-	 * Equivalent to setValue(property.value());
-	 **/
-	const type& operator=(const KGameProperty& property)
-	{
-		setValue(property.value());
-		return value();
-	}
-
-	/**
-	 * Yeah, you can do it!
-	 * \code
-	 * 	int a = myGamePropertyInt;
-	 * \endcode
-	 * If you don't see it: you don't have to use integerData.value()
-	 **/
-	operator type() const { return value(); }
-
-	virtual const type_info* typeinfo() { return &typeid(type); }
-
-private:
-	void init() { }
-
-private:
-	type mData;
-};
-
-
-typedef KGameProperty<int>   KGamePropertyInt;
-typedef KGameProperty<unsigned int>   KGamePropertyUInt;
-typedef KGameProperty<TQString>   KGamePropertyTQString;
-typedef KGameProperty<TQ_INT8>   KGamePropertyBool;
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertyarray.h b/libkdegames/kgame/kgamepropertyarray.h
deleted file mode 100644
index 0bb1d1a1..00000000
--- a/libkdegames/kgame/kgamepropertyarray.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYARRAY_H_
-#define __KGAMEPROPERTYARRAY_H_
-
-#include <tqdatastream.h>
-#include <kdebug.h>
-
-#include "kgamemessage.h"
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-
-
-template<class type>
-class KGamePropertyArray : public TQMemArray<type>, public KGamePropertyBase
-{
-public:
-  KGamePropertyArray() :TQMemArray<type>(), KGamePropertyBase()
-  {
-    //kdDebug(11001) << "KGamePropertyArray init" << endl;
-  }
-  
-  KGamePropertyArray( int size )
-  {
-    resize(size);
-  }
-  
-  KGamePropertyArray( const KGamePropertyArray<type> &a ) : TQMemArray<type>(a)
-  {
-  }
-  
-  bool  resize( uint size )
-  {
-    if (size!=TQMemArray<type>::size())
-    {
-      bool a=true;
-      TQByteArray b;
-      TQDataStream s(b, IO_WriteOnly);
-      KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdResize);
-      s << size ;
-      if (policy()==PolicyClean || policy()==PolicyDirty)
-      {
-        if (mOwner)
-        {
-          mOwner->sendProperty(s);
-        }
-      }
-      if (policy()==PolicyLocal || policy()==PolicyDirty)
-      {
-        extractProperty(b);
-//        a=TQMemArray<type>::resize(size);// FIXME: return value!
-      }
-      return a;
-    }
-    else return true;
-  }
-
-  void setAt(uint i,type data)
-  {
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAt);
-    s << i ;
-    s << data;
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      extractProperty(b);
-    }
-    //kdDebug(11001) << "KGamePropertyArray setAt send COMMAND for id="<<id() << " type=" << 1 << " at(" << i<<")="<<data  << endl;
-  }
-
-  type at( uint i ) const
-  {
-    return TQMemArray<type>::at(i);
-  }
-  
-  type operator[]( int i ) const
-  {
-    return TQMemArray<type>::at(i);
-  }
-
-  KGamePropertyArray<type> &operator=(const KGamePropertyArray<type> &a)
-  {
-    return assign(a);
-  }
-
-  bool  truncate( uint pos )
-  {
-    return resize(pos);
-  }
-  
-  bool  fill( const type &data, int size = -1 )
-  {
-    bool r=true;
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdFill);
-    s << data;
-    s << size ;
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      extractProperty(b);
-//      r=TQMemArray<type>::fill(data,size);//FIXME: return value!
-    }
-    return r;
-  }
-
-  KGamePropertyArray<type>& assign( const KGamePropertyArray<type>& a )
-  {
-// note: send() has been replaced by sendProperty so it might be broken now!
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      sendProperty();
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      TQMemArray<type>::assign(a);
-    }
-    return *this;
-  }
-  KGamePropertyArray<type>& assign( const type *a, uint n )
-  {
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      sendProperty();
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      TQMemArray<type>::assign(a,n);
-    }
-    return *this;
-  }
-  KGamePropertyArray<type>& duplicate( const KGamePropertyArray<type>& a )
-  {
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      sendProperty();
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      TQMemArray<type>::duplicate(a);
-    }
-    return *this;
-  }
-  KGamePropertyArray<type>& duplicate( const type *a, uint n )
-  {
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      sendProperty();
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      TQMemArray<type>::duplicate(a,n);
-    }
-    return *this;
-  }
-  KGamePropertyArray<type>& setRawData( const type *a, uint n )
-  {
-    if (policy()==PolicyClean || policy()==PolicyDirty)
-    {
-      sendProperty();
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      TQMemArray<type>::setRawData(a,n);
-    }
-    return *this;
-  }
-  void sort()
-  {
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdSort);
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy()==PolicyLocal || policy()==PolicyDirty)
-    {
-      extractProperty(b);
-    }
-  }
-
-  void load(TQDataStream& s)
-  {
-    //kdDebug(11001) << "KGamePropertyArray load " << id() << endl;
-    type data;
-    for (unsigned int i=0; i<TQMemArray<type>::size(); i++) 
-    {
-      s >> data;
-      TQMemArray<type>::at(i)=data;
-    }
-    if (isEmittingSignal())
-    {
-      emitSignal();
-    }
-  }
-  void save(TQDataStream &s)
-  {
-    //kdDebug(11001) << "KGamePropertyArray save "<<id() << endl;
-    for (unsigned int i=0; i<TQMemArray<type>::size(); i++) 
-    {
-      s << at(i);
-    }
-  }
-
-  void command(TQDataStream &s,int cmd,bool)
-  {
-    KGamePropertyBase::command(s, cmd);
-    //kdDebug(11001) << "Array id="<<id()<<" got command ("<<cmd<<") !!!" <<endl; 
-    switch(cmd)
-    {
-      case CmdAt:
-      {
-        uint i;
-        type data;
-        s >> i >> data;
-        TQMemArray<type>::at(i)=data;
-        //kdDebug(11001) << "CmdAt:id="<<id()<<" i="<<i<<" data="<<data <<endl; 
-        if (isEmittingSignal()) 
-        {
-          emitSignal();
-        }
-        break;
-      }
-      case CmdResize:
-      {
-        uint size;
-        s >> size;
-        //kdDebug(11001) << "CmdResize:id="<<id()<<" oldsize="<<TQMemArray<type>::size()<<" newsize="<<size <<endl; 
-        if (TQMemArray<type>::size() != size)
-        {
-          TQMemArray<type>::resize(size);
-        }
-        break;
-      }
-      case CmdFill:
-      {
-        int size;
-        type data;
-        s >> data >> size;
-        //kdDebug(11001) << "CmdFill:id="<<id()<<"size="<<size <<endl; 
-        TQMemArray<type>::fill(data,size);
-        if (isEmittingSignal()) 
-        {
-          emitSignal();
-        }
-        break;
-      }
-      case CmdSort:
-      {
-        //kdDebug(11001) << "CmdSort:id="<<id()<<endl; 
-        TQMemArray<type>::sort();
-        break;
-      }
-      default: 
-        kdError(11001) << "Error in KPropertyArray::command: Unknown command " << cmd << endl;
-        break;
-    }
-  }
-protected:
-  void extractProperty(const TQByteArray& b)
-  {
-    TQDataStream s(b, IO_ReadOnly);
-    int cmd;
-    int propId;
-    KGameMessage::extractPropertyHeader(s, propId);
-    KGameMessage::extractPropertyCommand(s, propId, cmd);
-    command(s, cmd, true);
-  }
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertyhandler.cpp b/libkdegames/kgame/kgamepropertyhandler.cpp
deleted file mode 100644
index 405d433e..00000000
--- a/libkdegames/kgame/kgamepropertyhandler.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgamepropertyhandler.h"
-#include "kgameproperty.h"
-#include "kgamemessage.h"
-
-#include <tqmap.h>
-#include <tqptrqueue.h>
-
-#include <klocale.h>
-#include <typeinfo>
-
-#define KPLAYERHANDLER_LOAD_COOKIE 6239
-
-//---------------------- KGamePropertyHandler -----------------------------------
-class KGamePropertyHandlerPrivate
-{
-public:
-	KGamePropertyHandlerPrivate()
-	{
-	}
-
-	TQMap<int, TQString> mNameMap;
-	TQIntDict<KGamePropertyBase> mIdDict;
-	int mUniqueId;
-	int mId;
-	KGamePropertyBase::PropertyPolicy mDefaultPolicy;
-	bool mDefaultUserspace;
-  int mIndirectEmit;
-  TQPtrQueue<KGamePropertyBase> mSignalQueue;
-};
-
-KGamePropertyHandler::KGamePropertyHandler(int id, const TQObject* receiver, const char * sendf, const char *emitf, TQObject* parent) : TQObject(parent)
-{
- init();
- registerHandler(id,receiver,sendf,emitf);
-}
-
-KGamePropertyHandler::KGamePropertyHandler(TQObject* parent) : TQObject(parent)
-{
- init();
-}
-
-KGamePropertyHandler::~KGamePropertyHandler()
-{
- clear();
- delete d;
-}
-
-void KGamePropertyHandler::init()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGamePropertyHandlerPrivate; // for future use - is BC important to us?
- d->mId = 0;
- d->mUniqueId=KGamePropertyBase::IdAutomatic;
- d->mDefaultPolicy=KGamePropertyBase::PolicyLocal;
- d->mDefaultUserspace=true;
- d->mIndirectEmit=0;
-}
-
-
-int KGamePropertyHandler::id() const
-{
- return d->mId;
-}
-
-void KGamePropertyHandler::setId(int id)
-{
- d->mId = id;
-}
-
-void KGamePropertyHandler::registerHandler(int id,const TQObject * receiver, const char * sendf, const char *emitf)
-{
- setId(id); 
- if (receiver && sendf) {
-	kdDebug(11001) << "Connecting TQT_SLOT " << sendf << endl;
-	connect(this, TQT_SIGNAL(signalSendMessage(int, TQDataStream &, bool*)), receiver, sendf);
- }
- if (receiver && emitf) {
-	kdDebug(11001) << "Connecting TQT_SLOT " << emitf << endl;
-	connect(this, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase *)), receiver, emitf);
- }
-}
-
-bool KGamePropertyHandler::processMessage(TQDataStream &stream, int id, bool isSender)
-{
-// kdDebug(11001) << k_funcinfo << ": id=" << id << " mId=" << d->mId << endl;
- if (id != d->mId) {
- 	return false; // Is the message meant for us?
- }
- KGamePropertyBase* p;
- int propertyId;
- KGameMessage::extractPropertyHeader(stream, propertyId);
-// kdDebug(11001) << k_funcinfo << ": Got property " << propertyId << endl;
- if (propertyId==KGamePropertyBase::IdCommand) {
-	int cmd;
-	KGameMessage::extractPropertyCommand(stream, propertyId, cmd);
-//kdDebug(11001) << k_funcinfo << ": Got COMMAND for id= "<<propertyId <<endl;
-	p = d->mIdDict.find(propertyId);
-	if (p) {
-		if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
-			p->command(stream, cmd, isSender);
-		}
-	} else {
-		kdError(11001) << k_funcinfo << ": (cmd): property " << propertyId << " not found" << endl;
-	}
-	return true;
- }
- p = d->mIdDict.find(propertyId);
- if (p) {
-	//kdDebug(11001) << k_funcinfo << ": Loading " << propertyId << endl;
-	if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
-		p->load(stream);
-	}
- } else {
-	kdError(11001) << k_funcinfo << ": property " << propertyId << " not found" << endl;
- }
- return true;
-}
-
-bool KGamePropertyHandler::removeProperty(KGamePropertyBase* data)
-{
- if (!data) {
-	return false;
- }
- d->mNameMap.erase(data->id());
- return d->mIdDict.remove(data->id());
-}
-
-bool KGamePropertyHandler::addProperty(KGamePropertyBase* data, TQString name)
-{
- //kdDebug(11001) << k_funcinfo << ": " << data->id() << endl;
- if (d->mIdDict.find(data->id())) {
-	// this id already exists
-	kdError(11001) << "  -> cannot add property " << data->id() << endl;
-	return false;
- } else {
-	d->mIdDict.insert(data->id(), data);
-  // if here is a check for "is_debug" or so we can add the strings only in debug mode
-  // and save memory!!
-	if (!name.isNull()) {
-		d->mNameMap[data->id()] = name;
-		//kdDebug(11001) << k_funcinfo << ": nid="<< (data->id()) << " inserted in Map name=" << d->mNameMap[data->id()] <<endl;
-		//kdDebug(11001) << "Typeid=" << typeid(data).name() << endl;
-  	//kdDebug(11001) << "Typeid call=" << data->typeinfo()->name() << endl;
-	}
- }
- return true;
-}
-
-TQString KGamePropertyHandler::propertyName(int id) const
-{
- TQString s;
- if (d->mIdDict.find(id)) {
-	if (d->mNameMap.contains(id)) {
-		s = i18n("%1 (%2)").tqarg(d->mNameMap[id]).tqarg(id);
-	} else {
-		s = i18n("Unnamed - ID: %1").tqarg(id);
-	}
- } else {
-	// Should _never_ happen
-	s = i18n("%1 unregistered").tqarg(id);
- }
- return s;
-}
-
-bool KGamePropertyHandler::load(TQDataStream &stream)
-{
- // Prevent direct emmiting until all is loaded
- lockDirectEmit();
- uint count,i;
- stream >> count;
- kdDebug(11001) << k_funcinfo << ": " << count << " KGameProperty objects " << endl;
- for (i = 0; i < count; i++) {
-	processMessage(stream, id(),false);
- }
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie == KPLAYERHANDLER_LOAD_COOKIE) {
-	kdDebug(11001) << "   KGamePropertyHandler loaded propertly"<<endl;
- } else {
-	kdError(11001) << "KGamePropertyHandler loading error. probably format error"<<endl;
- }
- // Allow direct emmiting (if no other lock still holds)
- unlockDirectEmit();
- return true;
-}
-
-bool KGamePropertyHandler::save(TQDataStream &stream)
-{
- kdDebug(11001) << k_funcinfo << ": " << d->mIdDict.count() << " KGameProperty objects " << endl;
- stream << (uint)d->mIdDict.count();
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	KGamePropertyBase *base=it.current();
-	if (base) {
-		KGameMessage::createPropertyHeader(stream, base->id());
-		base->save(stream);
-	}
-	++it;
- }
- stream << (TQ_INT16)KPLAYERHANDLER_LOAD_COOKIE;
- return true;
-}
-
-KGamePropertyBase::PropertyPolicy KGamePropertyHandler::policy()
-{
-// kdDebug(11001) << k_funcinfo << ": " << d->mDefaultPolicy << endl;
- return d->mDefaultPolicy;
-}
-void KGamePropertyHandler::setPolicy(KGamePropertyBase::PropertyPolicy p,bool userspace)
-{
- // kdDebug(11001) << k_funcinfo << ": " << p << endl;
- d->mDefaultPolicy=p;
- d->mDefaultUserspace=userspace;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	if (!userspace || it.current()->id()>=KGamePropertyBase::IdUser) {
-		it.current()->setPolicy((KGamePropertyBase::PropertyPolicy)p);
-	}
-	++it;
- }
-}
-
-void KGamePropertyHandler::unlockProperties()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	it.current()->unlock();
-	++it;
- }
-}
-
-void KGamePropertyHandler::lockProperties()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	it.current()->lock();
-	++it;
- }
-}
-
-int KGamePropertyHandler::uniquePropertyId()
-{
- return d->mUniqueId++;
-}
-
-void KGamePropertyHandler::flush()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	if (it.current()->isDirty()) {
-		it.current()->sendProperty();
-	}
-	++it;
- }
-}
-
-/* Fire all property signal changed which are collected in
- * the queque
- **/
-void KGamePropertyHandler::lockDirectEmit()
-{
-  d->mIndirectEmit++;
-}
-
-void KGamePropertyHandler::unlockDirectEmit()
-{
-  // If the flag is <=0 we emit the queued signals
-  d->mIndirectEmit--;
-  if (d->mIndirectEmit<=0)
-  {
-    KGamePropertyBase *prop;
-    while((prop=d->mSignalQueue.dequeue()) != 0)
-    {
-      // kdDebug(11001) << "emmiting signal for " << prop->id() << endl;
-      emit signalPropertyChanged(prop);
-    }
-  }
-}
-
-void KGamePropertyHandler::emitSignal(KGamePropertyBase *prop)
-{
- // If the indirect flag is set (load and network transmit)
- // we cannot emit the signals directly as it can happend that
- // a sigal causes an access to a property which is e.g. not
- // yet loaded or received
-
- if (d->mIndirectEmit>0)
- {
-  // Queque the signal
-  d->mSignalQueue.enqueue(prop);
- }
- else
- {
-  // directly emit
-  emit signalPropertyChanged(prop);
- }
-}
-
-bool KGamePropertyHandler::sendProperty(TQDataStream &s)
-{
- bool sent = false;
- emit signalSendMessage(id(), s, &sent);
- return sent;
-}
-
-KGamePropertyBase *KGamePropertyHandler::find(int id)
-{
- return d->mIdDict.find(id);
-}
-
-void KGamePropertyHandler::clear()
-{
- kdDebug(11001) << k_funcinfo << id() << endl;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.toFirst()) {
-	KGamePropertyBase* p = it.toFirst();
-	p->unregisterData();
-	if (d->mIdDict.find(p->id())) {
-		// shouldn't happen - but if mOwner in KGamePropertyBase is NULL
-		// this might be possible
-		removeProperty(p); 
-	}
- }
-}
-
-TQIntDict<KGamePropertyBase>& KGamePropertyHandler::dict() const
-{ 
- return d->mIdDict; 
-}
-
-TQString KGamePropertyHandler::propertyValue(KGamePropertyBase* prop)
-{
- if (!prop) {
-         return i18n("NULL pointer");
- }
-	   
- int id = prop->id();
- TQString name = propertyName(id);
- TQString value;
-
- const type_info* t = prop->typeinfo();
- if (*t == typeid(int)) {
-	value = TQString::number(((KGamePropertyInt*)prop)->value());
- } else if (*t == typeid(unsigned int)) {
-	value = TQString::number(((KGamePropertyUInt *)prop)->value());
- } else if (*t == typeid(long int)) {
-	value = TQString::number(((KGameProperty<long int> *)prop)->value()); 
- } else if (*t == typeid(unsigned long int)) {
-	value = TQString::number(((KGameProperty<unsigned long int> *)prop)->value());
- } else if (*t == typeid(TQString)) { 
-	value = ((KGamePropertyTQString*)prop)->value();
- } else if (*t == typeid(TQ_INT8)) { 
-	value = ((KGamePropertyBool*)prop)->value() ?  i18n("True") : i18n("False");
- } else {
-	emit signalRequestValue(prop, value);
- }
-		   
- if (value.isNull()) {
-	value = i18n("Unknown");
- }
- return value;
-}
-
-void KGamePropertyHandler::Debug()
-{
- kdDebug(11001) << "-----------------------------------------------------------" << endl;
- kdDebug(11001) << "KGamePropertyHandler:: Debug this=" << this << endl;
-
- kdDebug(11001) << "  Registered properties: (Policy,Lock,Emit,Optimized, Dirty)" << endl;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
-	KGamePropertyBase *p=it.current();
-	kdDebug(11001) << "  "<< p->id() << ": p=" << p->policy() 
-			<< " l="<<p->isLocked()
-			<< " e="<<p->isEmittingSignal() 
-			<< " o=" << p->isOptimized() 
-			<< " d="<<p->isDirty() 
-			<< endl;
-	++it;
- }
- kdDebug(11001) << "-----------------------------------------------------------" << endl;
-}
-
-#include "kgamepropertyhandler.moc"
diff --git a/libkdegames/kgame/kgamepropertyhandler.h b/libkdegames/kgame/kgamepropertyhandler.h
deleted file mode 100644
index c2a3429f..00000000
--- a/libkdegames/kgame/kgamepropertyhandler.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYHANDLER_H_
-#define __KGAMEPROPERTYHANDLER_H_
-
-#include <tqobject.h>
-#include <tqintdict.h>
-
-#include "kgameproperty.h"
-#include <kdemacros.h>
-
-class TQDataStream;
-class KGame;
-class KPlayer;
-//class KGamePropertyBase;
-
-class KGamePropertyHandlerPrivate; // wow - what a name ;-)
-
-/**
- * @short A collection class for KGameProperty objects
- *
- * The KGamePropertyHandler class is some kind of a collection class for
- * KGameProperty. You usually don't have to create one yourself, as both
- * KPlayer and KGame provide a handler. In most cases you do not even have
- * to care about the KGamePropertHandler. KGame and KPlayer implement
- * all features of KGamePropertyHandler so you will rather use it there.
- *
- * You have to use the KGamePropertyHandler as parent for all KGameProperty
- * objects but you can also use KPlayer or KGame as parent - then
- * KPlayer::dataHandler or KGame::dataHandler will be used. 
- *
- * Every KGamePropertyHandler must have - just like every KGameProperty -
- * a unique ID. This ID is provided either in the constructor or in
- * registerHandler. The ID is used to assign an incoming message (e.g. a changed
- * property) to the correct handler. Inside the handler the property ID is used
- * to change the correct property. 
- *
- * The constructor or registerHandler takes 3 addittional arguments: a
- * receiver and two slots. The first slot is connected to
- * signalSendMessage, the second to signalPropertyChanged. You must provide
- * these in order to use the KGamePropertyHandler. 
- *
- * The most important function of KGamePropertyHandler is processMessage
- * which assigns an incoming value to the correct property. 
- *
- * A KGamePropertyHandler is also used - indirectly using emitSignal - to
- * emit a signal when the value of a property changes. This is done this way
- * because a KGameProperty does not inherit TQObject because of memory
- * advantages. Many games can have dozens or even hundreds of KGameProperty
- * objects so every additional variable in KGameProperty would be
- * multiplied. 
- *
- **/
-class KDE_EXPORT KGamePropertyHandler : public TQObject
-{
-	Q_OBJECT
-  TQ_OBJECT
-
-public:
-	/**
-	 * Construct an unregistered KGamePropertyHandler
-	 *
-	 * You have to call registerHandler before you can use this
-	 * handler!
-	 **/
-	KGamePropertyHandler(TQObject* parent = 0);
-
-	/**
-	 * Construct a registered handler. 
-	 *
-	 * @see registerHandler
-	 **/
-	KGamePropertyHandler(int id, const TQObject* receiver, const char* sendf, const char* emitf, TQObject* parent = 0);
-	~KGamePropertyHandler();
-
-	/**
-	 * Register the handler with a parent. This is to use
-	 * if the constructor without arguments has been chosen.
-	 * Otherwise you need not call this.
-	 *
-	 * @param id The id of the message to listen for
-	 * @param receiver The object that will receive the signals of
-	 * KGamePropertyHandler
-	 * @param send A slot that is being connected to signalSendMessage
-	 * @param emit A slot that is being connected to signalPropertyChanged
-	 **/
-	void registerHandler(int id, const TQObject *receiver, const char * send, const char *emit); 
-
-	/**
-	 * Main message process function. This has to be called by
-	 * the parent's message event handler. If the id of the message
-	 * agrees with the id of the handler, the message is extracted 
-	 * and processed. Otherwise false is returned.
-	 * Example:
-	 * \code
-	 *   if (mProperties.processMessage(stream,msgid,sender==gameId())) return ;
-	 * \endcode
-	 * 
-	 * @param stream The data stream containing the message
-	 * @param id the message id of the message
-	 * @param isSender Whether the receiver is also the sender
-	 * @return true on message processed otherwise false
-	 **/
-	bool processMessage(TQDataStream &stream, int id, bool isSender );
-	
-	/**
-	 * @return the id of the handler
-	 **/
-	int id() const;
-	
-	/**
-	 * Adds a KGameProperty property to the handler
-	 * @param data the property
-	 * @param name A description of the property, which will be returned by
-	 * propertyName. This is used for debugging, e.g. in KGameDebugDialog
-	 * @return true on success
-	 **/
-	bool addProperty(KGamePropertyBase *data, TQString name=0);
-
-	/**
-	 * Removes a property from the handler
-	 * @param data the property
-	 * @return true on success
-	 **/
-	bool removeProperty(KGamePropertyBase *data);
-
-	/**
-	 * returns a unique property ID starting called usually with a base of
-	 * KGamePropertyBase::IdAutomatic. This is used internally by
-	 * the property base to assign automtic id's. Not much need to
-	 * call this yourself.
-	 **/
-	int uniquePropertyId();
-
-
-	/**
-	 * Loads properties from the datastream
-	 *
-	 * @param stream the datastream to load from
-	 * @return true on success otherwise false
-	 **/
-	virtual bool load(TQDataStream &stream);
-
-	/**
-	 * Saves properties into the datastream
-	 *
-	 * @param stream the datastream to save to
-	 * @return true on success otherwise false
-	 **/
-	virtual bool save(TQDataStream &stream);
-	
-	/**
-	 * called by a property to send itself into the
-	 * datastream. This call is simply forwarded to
-	 * the parent object
-	 **/ 
-	bool sendProperty(TQDataStream &s);
-
-	void sendLocked(bool l);
-
-	/**
-	 * called by a property to emit a signal 
-	 * This call is simply forwarded to
-	 * the parent object
-	 **/ 
-	void emitSignal(KGamePropertyBase *data);
-
-	/**
-	 * @param id The ID of the property
-	 * @return A name of the property which can be used for debugging. Don't
-	 * depend on this function! It it possible not to provide a name or to
-	 * provide the same name for multiple properties!
-	 **/
-	TQString propertyName(int id) const;
-
-	/**
-	 * @param id The ID of the property. See KGamePropertyBase::id
-	 * @return The KGameProperty this ID is assigned to
-	 **/
-	KGamePropertyBase *find(int id);
-
-	/**
-	 * Clear the KGamePropertyHandler. Note that the properties are
-	 * <em>not</em> deleted so if you created your KGameProperty
-	 * objects dynamically like
-	 * \code
-	 * KGamePropertyInt* myProperty = new KGamePropertyInt(id, dataHandler());
-	 * \endcode
-	 * you also have to delete it:
-	 * \code
-	 * dataHandler()->clear();
-	 * delete myProperty;
-	 * \endcode
-	 **/
-	void clear();
-
-	/**
-	 * Use id as new ID for this KGamePropertyHandler. This is used
-	 * internally only.
-	 **/
-	void setId(int id);//AB: TODO: make this protected in KGamePropertyHandler!!
-
-	/**
-	 * Calls KGamePropertyBase::setReadOnly(false) for all properties of this
-	 * player. See also lockProperties
-	 **/
-	void unlockProperties();
-
-	/**
-	 * Set the policy for all kgame variables which are currently registerd in
-	 * the KGame proeprty handler. See KGamePropertyBase::setPolicy
-	 *
-	 * @param p is the new policy for all properties of this handler
-	 * @param userspace if userspace is true (default) only user properties are changed.
-	 * Otherwise the system properties are also changed.
-	 **/
-	void setPolicy(KGamePropertyBase::PropertyPolicy p, bool userspace=true);
-
-	/**
-	 * Called by the KGame or KPlayer object or the handler itself to delay
-	 * emmiting of signals. Lockign keeps a counter and unlock is only achieved
-	 * when every lock is canceld by an unlock.
-	 * While this is set signals are  quequed and only emmited after this
-	 * is reset. Its deeper meaning is to prevent inconsistencies in a game
-	 * load or network transfer where a emit could access a property not
-	 * yet loaded or transmitted. Calling this by yourself you better know
-	 * what your are doing.
-	 **/
-	void lockDirectEmit();
-
-	/**
-	 * Removes the lock from the emitting of property signals. Corresponds to
-	 * the lockIndirectEmits
-	 **/
-	void unlockDirectEmit();
-  
-	/**
-	 * Returns the default policy for this property handler. All properties
-	 * registered newly, will have this property.
-	 **/
-	KGamePropertyBase::PropertyPolicy policy();
-
-	/**
-	 * Calls KGamePropertyBase::setReadOnly(true) for all properties of this
-	 * handler
-	 *
-	 * Use with care! This will even lock the core properties, like name,
-	 * group and myTurn!!
-	 *
-	 * @see unlockProperties
-	 **/
-	void lockProperties();
-
-	/**
-	 * Sends all properties which are marked dirty over the network. This will
-	 * make a forced synchornisation of the properties and mark them all not dirty.
-	 **/
-	void flush();
-
-	/**
-	 * Reference to the internal dictionary
-	 **/
-	TQIntDict<KGamePropertyBase> &dict() const;
-
-	/**
-	 * In several situations you just want to have a TQString of a
-	 * KGameProperty object. This is the case in the 
-	 * KGameDebugDialog where the value of all properties is displayed. This
-	 * function will provide you with such a TQString for all the types
-	 * used inside of all KGame classes. If you have a non-standard
-	 * property (probably a self defined class or something like this) you
-	 * also need to connect to signalRequestValue to make this function
-	 * useful.
-	 * @param property Return the value of this KGameProperty 
-	 * @return The value of a KGameProperty
-	 **/
-	TQString propertyValue(KGamePropertyBase* property);
-
-
-	/**
-	 * Writes some debug output to the console.
-	 **/ 
-	void Debug();
-
-
-signals:
-	/**
-	 * This is emitted by a property. KGamePropertyBase::emitSignal
-	 * calls emitSignal which emits this signal. 
-	 *
-	 * This signal is emitted whenever the property is changed. Note that
-	 * you can switch off this behaviour using 
-	 * KGamePropertyBase::setEmittingSignal in favor of performance. Note
-	 * that you won't experience any performance loss using signals unless
-	 * you use dozens or hundreds of properties which change very often.
-	 **/
-	void signalPropertyChanged(KGamePropertyBase *);
-
-	/**
-	 * This signal is emitted when a property needs to be sent. Only the
-	 * parent has to react to this.
-	 * @param msgid The id of the handler
-	 * @param sent set this to true if the property was sent successfully -
-	 * otherwise don't touch
-	 **/
-	void signalSendMessage(int msgid, TQDataStream &, bool* sent); // AB shall we change bool* into bool& again?
-
-	/**
-	 * If you call propertyValue with a non-standard KGameProperty
-	 * it is possible that the value cannot automatically be converted into a
-	 * TQString. Then this signal is emitted and asks you to provide the
-	 * correct value. You probably want to use something like this to achieve
-	 * this:
-	 * \code
-	 * #include <typeinfo>
-	 * void slotRequestValue(KGamePropertyBase* p, TQString& value)
-	 * {
-	 * 	if (*(p->typeinfo()) == typeid(MyType) {
-	 * 		value = TQString(((KGameProperty<MyType>*)p)->value());
-	 * 	}
-	 * }
-	 * \endcode
-	 *
-	 * @param property The KGamePropertyBase the value is requested for
-	 * @param value The value of this property. You have to set this.
-	 **/
-	void signalRequestValue(KGamePropertyBase* property, TQString& value);
-
-private:
-	void init();
-
-private:
-	KGamePropertyHandlerPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertylist.h b/libkdegames/kgame/kgamepropertylist.h
deleted file mode 100644
index df8eb604..00000000
--- a/libkdegames/kgame/kgamepropertylist.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYLIST_H_
-#define __KGAMEPROPERTYLIST_H_
-
-#include <tqvaluelist.h>
-
-#include <kdebug.h>
-
-#include "kgamemessage.h"
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-
-// AB: also see README.LIB!
-
-template<class type>
-class KGamePropertyList : public TQValueList<type>, public KGamePropertyBase
-{
-public:
-     /**
-     * Typedefs
-     */
-    typedef TQValueListIterator<type> Iterator;
-    typedef TQValueListConstIterator<type> ConstIterator;
-
-  KGamePropertyList() :TQValueList<type>(), KGamePropertyBase()
-  {
-  }
-
-  KGamePropertyList( const KGamePropertyList<type> &a ) : TQValueList<type>(a)
-  {
-  }
-
-  uint findIterator(Iterator me)
-  {
-    Iterator it;
-    uint cnt=0;
-    for( it = this->begin(); it != this->end(); ++it )
-    {
-      if (me==it) 
-      {
-        return cnt;
-      }
-      cnt++;
-    }
-    return this->count();
-  }
-
-  Iterator insert( Iterator it, const type& d )
-  {
-    it=TQValueList<type>::insert(it,d);
-
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdInsert);
-    int i=findIterator(it);
-    s << i;
-    s << d;
-    if (policy() == PolicyClean || policy() == PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy() == PolicyDirty || policy() == PolicyLocal)
-    {
-      extractProperty(b);
-    }
-    return it;
-  }
-
-  void  prepend( const type& d) { insert(this->begin(),d); }
-  
-  void  append( const type& d ) 
-  {
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAppend);
-    s << d;
-    if (policy() == PolicyClean || policy() == PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy() == PolicyDirty || policy() == PolicyLocal)
-    {
-      extractProperty(b);
-    }
-  }
-
-  Iterator erase( Iterator it )
-  {
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdRemove);
-    int i=findIterator(it);
-    s << i;
-    if (policy() == PolicyClean || policy() == PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy() == PolicyDirty || policy() == PolicyLocal)
-    {
-      extractProperty(b);
-    }
-    //TODO: return value - is it correct for PolicyLocal|PolicyDirty?
-//    return TQValueList<type>::remove(it);
-    return it;
-  }
-
-  Iterator remove( Iterator it )
-  {
-    return erase(it);
-  }
-
-  void remove( const type& d )
-  {
-    Iterator it=find(d);
-    remove(it);
-  }
-
-  void clear()
-  {
-    TQByteArray b;
-    TQDataStream s(b, IO_WriteOnly);
-    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdClear);
-    if (policy() == PolicyClean || policy() == PolicyDirty)
-    {
-      if (mOwner)
-      {
-        mOwner->sendProperty(s);
-      }
-    }
-    if (policy() == PolicyDirty || policy() == PolicyLocal)
-    {
-      extractProperty(b);
-    }
-  }
-
-  void load(TQDataStream& s)
-  {
-    kdDebug(11001) << "KGamePropertyList load " << id() << endl;
-    TQValueList<type>::clear();
-    uint size;
-    type data;
-    s >> size;
-
-    for (unsigned int i=0;i<size;i++)
-    {
-      s >> data;
-      TQValueList<type>::append(data);
-    }
-    if (isEmittingSignal()) emitSignal();
-  }
-
-  void save(TQDataStream &s)
-  {
-    kdDebug(11001) << "KGamePropertyList save "<<id() << endl;
-    type data;
-    uint size=this->count();
-    s << size;
-    Iterator it;
-    for( it = this->begin(); it != this->end(); ++it )
-    {
-      data=*it;
-      s << data;
-    }
-  }
-
-  void command(TQDataStream &s,int cmd,bool)
-  {
-    KGamePropertyBase::command(s, cmd);
-    kdDebug(11001) << "---> LIST id="<<id()<<" got command ("<<cmd<<") !!!" <<endl; 
-    Iterator it;
-    switch(cmd)
-    {
-      case CmdInsert:
-      {
-        uint i;
-        type data;
-        s >> i >> data;
-        it=this->at(i);
-        TQValueList<type>::insert(it,data);
-//        kdDebug(11001) << "CmdInsert:id="<<id()<<" i="<<i<<" data="<<data <<endl; 
-        if (isEmittingSignal()) emitSignal();
-        break;
-      }
-      case CmdAppend:
-      {
-        type data;
-	s >> data;
-        TQValueList<type>::append(data);
-//        kdDebug(11001) << "CmdAppend:id=" << id() << " data=" << data << endl; 
-        if (isEmittingSignal()) emitSignal();
-	break;
-      }
-      case CmdRemove:
-      {
-        uint i;
-        s >> i;
-        it=this->at(i);
-        TQValueList<type>::remove(it);
-        kdDebug(11001) << "CmdRemove:id="<<id()<<" i="<<i <<endl; 
-        if (isEmittingSignal()) emitSignal();
-        break;
-      }
-      case CmdClear:
-      {
-        TQValueList<type>::clear();
-        kdDebug(11001) << "CmdClear:id="<<id()<<endl; 
-        if (isEmittingSignal()) emitSignal();
-        break;
-      }
-      default: 
-        kdDebug(11001) << "Error in KPropertyList::command: Unknown command " << cmd << endl;
-    }
-  }
-
-protected:
-  void extractProperty(const TQByteArray& b)
-  // this is called for Policy[Dirty|Local] after putting the stuff into the
-  // stream
-  {
-    TQDataStream s(b, IO_ReadOnly);
-    int cmd;
-    int propId;
-    KGameMessage::extractPropertyHeader(s, propId);
-    KGameMessage::extractPropertyCommand(s, propId, cmd);
-    command(s, cmd, true);
-  }
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamesequence.cpp b/libkdegames/kgame/kgamesequence.cpp
deleted file mode 100644
index 9391ee04..00000000
--- a/libkdegames/kgame/kgamesequence.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include "kgamesequence.h"
-#include "kgamesequence.moc"
-
-#include "kplayer.h"
-#include "kgame.h"
-
-KGameSequence::KGameSequence() : TQObject()
-{
- mGame = 0;
- mCurrentPlayer = 0;
-}
-
-KGameSequence::~KGameSequence()
-{
-}
-
-void KGameSequence::setGame(KGame* game)
-{
- mGame = game;
-}
-
-void KGameSequence::setCurrentPlayer(KPlayer* player)
-{
- mCurrentPlayer = player;
-}
-
-KPlayer *KGameSequence::nextPlayer(KPlayer *last,bool exclusive)
-{
- kdDebug(11001) << "=================== NEXT PLAYER =========================="<<endl;
- if (!game())
- {
-   kdError() << k_funcinfo << "NULL game object" << endl;
-   return 0;
- }
- unsigned int minId,nextId,lastId;
- KPlayer *nextplayer, *minplayer;
- if (last)
- {
-   lastId = last->id();
- }
- else
- {
-   lastId = 0;
- }
-
- kdDebug(11001) << "nextPlayer: lastId="<<lastId<<endl;
-
- // remove when this has been checked
- minId = 0x7fff;  // we just need a very large number...properly MAX_UINT or so would be ok...
- nextId = minId;
- nextplayer = 0;
- minplayer = 0;
-
- KPlayer *player;
- for (player = game()->playerList()->first(); player != 0; player=game()->playerList()->next() )
- {
-   // Find the first player for a cycle
-   if (player->id() < minId)
-   {
-     minId=player->id();
-     minplayer=player;
-   }
-   if (player==last)
-   {
-     continue;
-   }
-   // Find the next player which is bigger than the current one
-   if (player->id() > lastId && player->id() < nextId)
-   {
-     nextId=player->id();
-     nextplayer=player;
-   }
- }
-
- // Cycle to the beginning
- if (!nextplayer)
- {
-   nextplayer=minplayer;
- }
-
- kdDebug(11001) << k_funcinfo << " ##### lastId=" << lastId << " exclusive="
-        << exclusive << "  minId=" << minId << " nextid=" << nextId
-        << " count=" << game()->playerList()->count()  << endl;
- if (nextplayer)
- {
-   nextplayer->setTurn(true,exclusive);
- }
- else
- {
-   return 0;
- }
- return nextplayer;
-}
-
-// Per default we do not do anything
-int KGameSequence::checkGameOver(KPlayer*)
-{
- return 0;
-}
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgamesequence.h b/libkdegames/kgame/kgamesequence.h
deleted file mode 100644
index 8047c642..00000000
--- a/libkdegames/kgame/kgamesequence.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMESEQUENCE_H_
-#define __KGAMESEQUENCE_H_
-
-#include <tqobject.h>
-
-class KPlayer;
-class KGame;
-
-/**
- * This class takes care of round or move management as well of the gameover
- * condition. It is especially used for round based games. For these games @ref
- * nextPlayer and @ref checkGameOver are the most important methods.
- *
- * You can subclass KGameSequence and use @ref KGame::setGameSequence to use
- * your own rules. Note that @ref KGame will take ownership and therefore will
- * delete the object on destruction.
- * @short Round/move management class
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameSequence : public TQObject
-{
-	Q_OBJECT
-  TQ_OBJECT
-public:
-	KGameSequence();
-	virtual ~KGameSequence();
-
-	/**
-	 * Select the next player in a turn based game. In an asynchronous game this
-	 * function has no meaning. Overwrite this function for your own game sequence.
-	 * Per default it selects the next player in the playerList
-	 */
-	virtual KPlayer* nextPlayer(KPlayer *last, bool exclusive = true);
-
-	virtual void setCurrentPlayer(KPlayer* p);
-
-	/**
-	 * @return The @ref KGame object this sequence is for, or NULL if none.
-	 **/
-	KGame* game() const { return mGame; }
-
-	KPlayer* currentPlayer() const { return mCurrentPlayer; }
-
-	/**
-	 * Set the @ref KGame object for this sequence. This is called
-	 * automatically by @ref KGame::setGameSequence and you should not call
-	 * it.
-	 **/
-	void setGame(KGame* game);
-
-	/**
-	 * Check whether the game is over. The default implementation always
-	 * returns 0.
-	 *
-	 * @param player the player who made the last move
-	 * @return anything else but 0 is considered as game over
-	**/
-	virtual int checkGameOver(KPlayer *player);
-
-private:
-	KGame* mGame;
-	KPlayer* mCurrentPlayer;
-};
-
-#endif
-
diff --git a/libkdegames/kgame/kgameversion.h b/libkdegames/kgame/kgameversion.h
deleted file mode 100644
index c3147525..00000000
--- a/libkdegames/kgame/kgameversion.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
-    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEVERSION_H__
-#define __KGAMEVERSION_H__
-
-/**
- * In this file you find a couple of defines that indicate whether a specific
- * feature or function is present in this version of the KGame library.
- *
- * You don't need this for KDE CVS, but for games that live outside of KDE CVS
- * it may be very helpful and a lot easier than writing configure scripts for
- * this task.
- *
- * All defines are prefixed with KGAME_ to avoid conflicts.
- **/
-
-// KGame::savegame() didn't exist in KDE 3.0
-#define KGAME_HAVE_KGAME_SAVEGAME 1
-
-// KGameNetwork::port(), KMessageIO::peerPort() and friends were added in KDE 3.2
-#define KGAME_HAVE_KGAME_PORT 1
-
-// KGameNetwork::hostName(), KMessageIO::peerName() and friends were added in KDE 3.2
-#define KGAME_HAVE_KGAME_HOSTNAME 1
-
-// KGameSequence class was added in KDE 3.2
-#define KGAME_HAVE_KGAMESEQUENCE 1
-
-// KGame::addPlayer() needs to assign an ID to new players, otherwise network is
-// broken. this is done in KDE 3.2.
-#define KGAME_HAVE_FIXED_ADDPLAYER_ID 1
-
-#endif
-
diff --git a/libkdegames/kgame/kmessageclient.cpp b/libkdegames/kgame/kmessageclient.cpp
deleted file mode 100644
index 0233884a..00000000
--- a/libkdegames/kgame/kmessageclient.cpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include <kdebug.h>
-#include <stdio.h>
-
-#include <tqbuffer.h>
-#include <tqtimer.h>
-
-#include "kmessageio.h"
-#include "kmessageserver.h"
-
-#include "kmessageclient.h"
-
-class KMessageClientPrivate
-{
-public:
-  KMessageClientPrivate ()
-    : adminID (0), connection (0)
-  {}
-
-  ~KMessageClientPrivate ()
-  {
-    delete connection;
-  }
-
-  TQ_UINT32 adminID;
-  TQValueList <TQ_UINT32> clientList;
-  KMessageIO *connection;
-
-  bool isLocked;
-  TQValueList <TQByteArray> delayedMessages;
-};
-
-KMessageClient::KMessageClient (TQObject *parent, const char *name)
-  : TQObject (parent, name)
-{
-  d = new KMessageClientPrivate ();
-  d->isLocked = false;
-}
-
-KMessageClient::~KMessageClient ()
-{
-  d->delayedMessages.clear();
-  delete d;
-}
-
-// -- setServer stuff
-
-void KMessageClient::setServer (const TQString &host, TQ_UINT16 port)
-{
-  setServer (new KMessageSocket (host, port));
-}
-
-void KMessageClient::setServer (KMessageServer *server)
-{
-  KMessageDirect *serverIO = new KMessageDirect ();
-  setServer (new KMessageDirect (serverIO));
-  server->addClient (serverIO);
-}
-
-void KMessageClient::setServer (KMessageIO *connection)
-{
-  if (d->connection)
-  {
-    delete d->connection;
-    kdDebug (11001) << k_funcinfo << ": We are changing the server!" << endl;
-  }
-
-  d->connection = connection;
-  if (connection )
-  {
-    connect (connection, TQT_SIGNAL (received(const TQByteArray &)),
-             this, TQT_SLOT (processIncomingMessage(const TQByteArray &)));
-    connect (connection, TQT_SIGNAL (connectionBroken()),
-             this, TQT_SLOT (removeBrokenConnection ()));
-  }
-}
-
-// -- id stuff
-
-TQ_UINT32 KMessageClient::id () const
-{
-  return (d->connection) ? d->connection->id () : 0;
-}
-
-bool KMessageClient::isAdmin () const
-{
-  return id() != 0 && id() == adminId();
-}
-
-TQ_UINT32 KMessageClient::adminId () const
-{
-  return d->adminID;
-}
-
-const TQValueList <TQ_UINT32> &KMessageClient::clientList() const
-{
-  return d->clientList;
-}
-
-bool KMessageClient::isConnected () const
-{
-  return d->connection && d->connection->isConnected();
-}
-
-bool KMessageClient::isNetwork () const
-{
-  return isConnected() ? d->connection->isNetwork() : false;
-}
-
-TQ_UINT16 KMessageClient::peerPort () const
-{
- return d->connection ? d->connection->peerPort() : 0;
-}
-
-TQString KMessageClient::peerName () const
-{
- return d->connection ? d->connection->peerName() : TQString::tqfromLatin1("localhost");
-}
-
-// --------------------- Sending messages
-
-void KMessageClient::sendServerMessage (const TQByteArray &msg)
-{
-  if (!d->connection)
-  {
-    kdWarning (11001) << k_funcinfo << ": We have no connection yet!" << endl;
-    return;
-  }
-  d->connection->send (msg);
-}
-
-void KMessageClient::sendBroadcast (const TQByteArray &msg)
-{
-  TQByteArray sendBuffer;
-  TQBuffer buffer (sendBuffer);
-  buffer.open (IO_WriteOnly);
-  TQDataStream stream (&buffer);
-
-  stream << static_cast<TQ_UINT32> ( KMessageServer::RETQ_BROADCAST );
-  TQT_TQIODEVICE(&buffer)->writeBlock (msg);
-  sendServerMessage (sendBuffer);
-}
-
-void KMessageClient::sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients)
-{
-  TQByteArray sendBuffer;
-  TQBuffer buffer (sendBuffer);
-  buffer.open (IO_WriteOnly);
-  TQDataStream stream (&buffer);
-
-  stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_FORWARD ) << clients;
-  TQT_TQIODEVICE(&buffer)->writeBlock (msg);
-  sendServerMessage (sendBuffer);
-}
-
-void KMessageClient::sendForward (const TQByteArray &msg, TQ_UINT32 client)
-{
-  sendForward (msg, TQValueList <TQ_UINT32> () << client);
-}
-
-
-// --------------------- Receiving and processing messages
-
-void KMessageClient::processIncomingMessage (const TQByteArray &msg)
-{
-  if (d->isLocked)
-  {
-    d->delayedMessages.append(msg);
-    return;
-  }
-  if (d->delayedMessages.count() > 0)
-  {
-    d->delayedMessages.append (msg);
-    TQByteArray first = d->delayedMessages.front();
-    d->delayedMessages.pop_front();
-    processMessage (first);
-  }
-  else
-  {
-    processMessage(msg);
-  }
-}
-
-void KMessageClient::processMessage (const TQByteArray &msg)
-{
-  if (d->isLocked)
-  { // must NOT happen, since we check in processIncomingMessage as well as in processFirstMessage
-    d->delayedMessages.append(msg);
-    return;
-  }
-  TQBuffer in_buffer (msg);
-  in_buffer.open (IO_ReadOnly);
-  TQDataStream in_stream (&in_buffer);
-
-
-  bool unknown = false;
-
-  TQ_UINT32 messageID;
-  in_stream >> messageID;
-  switch (messageID)
-  {
-    case KMessageServer::MSG_BROADCAST:
-      {
-        TQ_UINT32 clientID;
-        in_stream >> clientID;
-        emit broadcastReceived (in_buffer.readAll(), clientID);
-      }
-      break;
-
-    case KMessageServer::MSG_FORWARD:
-      {
-        TQ_UINT32 clientID;
-        TQValueList <TQ_UINT32> tqreceivers;
-        in_stream >> clientID >> tqreceivers;
-        emit forwardReceived (in_buffer.readAll(), clientID, tqreceivers);
-      }
-      break;
-
-    case KMessageServer::ANS_CLIENT_ID:
-      {
-        bool old_admin = isAdmin();
-        TQ_UINT32 clientID;
-        in_stream >> clientID;
-        d->connection->setId (clientID);
-        if (old_admin != isAdmin())
-          emit adminStatusChanged (isAdmin());
-      }
-      break;
-
-    case KMessageServer::ANS_ADMIN_ID:
-      {
-        bool old_admin = isAdmin();
-        in_stream >> d->adminID;
-        if (old_admin != isAdmin())
-          emit adminStatusChanged (isAdmin());
-      }
-      break;
-
-    case KMessageServer::ANS_CLIENT_LIST:
-      {
-        in_stream >> d->clientList;
-      }
-      break;
-
-    case KMessageServer::EVNT_CLIENT_CONNECTED:
-      {
-        TQ_UINT32 id;
-        in_stream >> id;
-
-        if (d->clientList.contains (id))
-          kdWarning (11001) << k_funcinfo << ": Adding a client that already existed!" << endl;
-        else
-          d->clientList.append (id);
-
-        emit eventClientConnected (id);
-      }
-      break;
-
-    case KMessageServer::EVNT_CLIENT_DISCONNECTED:
-      {
-        TQ_UINT32 id;
-        TQ_INT8 broken;
-        in_stream >> id >> broken;
-
-        if (!d->clientList.contains (id))
-          kdWarning (11001) << k_funcinfo << ": Removing a client that doesn't exist!" << endl;
-        else
-          d->clientList.remove (id);
-
-        emit eventClientDisconnected (id, bool (broken));
-      }
-      break;
-
-    default:
-      unknown = true;
-  }
-
-  if (!unknown && !in_buffer.atEnd())
-    kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
-
-  emit serverMessageReceived (msg, unknown);
-
-  if (unknown)
-    kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
-}
-
-void KMessageClient::processFirstMessage()
-{
-  if (d->isLocked)
-  {
-    return;
-  }
-  if (d->delayedMessages.count() == 0)
-  {
-    kdDebug(11001) << k_funcinfo << ": no messages delayed" << endl;
-    return;
-  }
-  TQByteArray first = d->delayedMessages.front();
-  d->delayedMessages.pop_front();
-  processMessage (first);
-}
-
-void KMessageClient::removeBrokenConnection ()
-{
-  kdDebug (11001) << k_funcinfo << ": timer single shot for removeBrokenConnection"<<this << endl;
-  // MH We cannot directly delete the socket. otherwise TQSocket crashes
-  TQTimer::singleShot( 0, this, TQT_SLOT(removeBrokenConnection2()) );
-  return;
-}
-
-
-void KMessageClient::removeBrokenConnection2 ()
-{
-  kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object"<<this << endl;
-
-  emit aboutToDisconnect(id());
-  delete d->connection;
-  d->connection = 0;
-  d->adminID = 0;
-  emit connectionBroken();
-  kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object DONE" << endl;
-}
-
-void KMessageClient::disconnect ()
-{
-  kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object" << endl;
-
-  emit aboutToDisconnect(id());
-  delete d->connection;
-  d->connection = 0;
-  d->adminID = 0;
-  emit connectionBroken();
-  kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object DONE" << endl;
-}
-
-void KMessageClient::lock ()
-{
-  d->isLocked = true;
-}
-
-void KMessageClient::unlock ()
-{
-  d->isLocked = false;
-  for (unsigned int i = 0; i < d->delayedMessages.count(); i++)
-  {
-    TQTimer::singleShot(0, this, TQT_SLOT(processFirstMessage()));
-  }
-}
-
-unsigned int KMessageClient::delayedMessageCount() const
-{
-  return d->delayedMessages.count();
-}
-
-#include "kmessageclient.moc"
diff --git a/libkdegames/kgame/kmessageclient.h b/libkdegames/kgame/kmessageclient.h
deleted file mode 100644
index 8a35234d..00000000
--- a/libkdegames/kgame/kmessageclient.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KMESSAGECLIENT_H__
-#define __KMESSAGECLIENT_H__
-
-#include <tqobject.h>
-#include <tqstring.h>
-#include <tqvaluelist.h>
-
-class KMessageIO;
-class KMessageServer;
-class KMessageClientPrivate;
-
-/**
-  @short A client to connect to a KMessageServer
-
-  This class implements a client that can connect to a KMessageServer object.
-  It can be used to exchange messages between clients.
-
-  Usually you will connect the signals broadcastReceived and forwardReceived to
-  some specific slots. In these slot methods you can analyse the messages that are
-  sent to you from other clients.
-
-  To send messages to other clients, use the methods sendBroadcast() (to send to all
-  clients) or sendForward() (to send to a list of selected clients).
-
-  If you want to communicate with the KMessageServer object directly (on a more low
-  level base), use the method sendServerMessage to send a command to the server and
-  connect to the signal serverMessageReceived to see all the incoming messages.
-  In that case the messages must be of the format specified in KMessageServer.
-  @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
-*/
-class KMessageClient : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-
-  /**
-    Constructor.
-    Creates an unconnected KMessageClient object. Use setServer() later to connect to a
-    KMessageServer object.
-  */
-  KMessageClient (TQObject *parent = 0, const char *name = 0);
-
-  /**
-    Destructor.
-    Disconnects from the server, if any connection was established.
-  */
-  ~KMessageClient ();
-
-  /**
-    @return The client ID of this client. Every client that is connected to a KMessageServer
-    has a unique ID number.
-
-    NOTE: As long as the object is not yet connected to the server, and as long as the server
-    hasn't sent the client ID, this method returns 0.
-  */
-  TQ_UINT32 id () const;
-
-  /**
-    @return Whether or not this client is the server admin.
-    One of the clients connected to the server is the admin and can administrate the server
-    (set maximum number of clients, remove clients, ...).
-
-    If you use admin commands without being the admin, these commands are simply ignored by
-    the server.
-
-    NOTE: As long as you are not connected to a server, this method returns false.
-  */
-  bool isAdmin () const;
-
-  /**
-    @return The ID of the admin client on the message server.
-  */
-  TQ_UINT32 adminId() const;
-
-  /**
-    @return The list of the IDs of all the message clients connected to the message server.
-  */
-  const TQValueList <TQ_UINT32> &clientList() const;
-
-  /**
-    Connects the client to (another) server.
-
-    Tries to connect via a TCP/IP socket to a KMessageServer object
-    on the given host, listening on the specified port.
-
-    If we were already connected, the old connection is closed.
-    @param host The name of the host to connect to. Must be either a hostname which can 
-    be resolved to an IP or just an IP
-    @param port The port to connect to
-  */
-  void setServer (const TQString &host, TQ_UINT16 port);
-
-  /**
-    Connects the client to (another) server.
-
-    Connects to the given server, using KMessageDirect.
-    (The server object has to be in the same process.)
-
-    If we were already connected, the old connection is closed.
-    @param server The KMessageServer to connect to
-  */
-  void setServer (KMessageServer *server);
-
-  /**
-   * Corresponds to setServer(0); but also emits the connectionBroken signal
-   **/
-  void disconnect();
-
-  /**
-    Connects the client to (another) server.
-
-    To use this method, you have to create a KMessageIO object with new (indeed you must
-    create an instance of a subclass of KMessageIO, e.g. KMessageSocket or KMessageDirect).
-    This object must already be connected to the new server.
-
-    Calling this method disconnects any earlier connection, and uses the new KMessageIO
-    object instead. This object gets owned by the KMessageClient object, so don't delete
-    or manipulate it afterwards.
-
-    With this method it is possible to change the server on the fly. But be careful that
-    there are no important messages from the old server not yet delivered.
-
-    NOTE: It is very likely that we will have another client ID on the new server. The
-    value returned by clientID may be a little outdated until the new server tells us
-    our new ID.
-
-    NOTE: The two other setServer methods are for convenience. If you use them, you don't
-    have to create a KMessageIO object yourself.
-  */
-  virtual void setServer (KMessageIO *connection);
-
-  /**
-    @return True, if a connection to a KMessageServer has been started, and if the
-    connection is ready for transferring data. (It will return false e.g. as long as
-    a socket connection hasn't been established, and it will also return false after
-    a socket connection is broken.)
-  */
-  bool isConnected () const;
-
-  /**
-    @return TRUE if isConnected() is true AND this is not a local (like
-    KMessageDirect) connection.
-  */
-  bool isNetwork () const;
-
-  /**
-    @return 0 if isConnected() is FALSE, otherwise the port number this client is
-    connected to. See also KMessageIO::peerPort and TQSocket::peerPort.
-    @since 3.2
-  */
-  TQ_UINT16 peerPort () const;
-
-  /**
-    @since 3.2
-    @return "localhost" if isConnected() is FALSE, otherwise the hostname this client is
-    connected to. See also KMessageIO::peerName() and TQSocket::peerName().
-  */
-  TQString peerName() const;
-
-  /**
-    Sends a message to the KMessageServer. If we are not yet connected to one, nothing
-    happens.
-
-    Use this method to send a low level command to the server. It has to be in the
-    format specified in KMessageServer.
-
-    If you want to send messages to other clients, you should use sendBroadcast()
-    and sendForward().
-    @param msg The message to be sent to the server. Must be in the format specified in KMessageServer.
-  */
-  void sendServerMessage (const TQByteArray &msg);
-
-  /**
-    Sends a message to all the clients connected to the server, including ourself.
-    The message consists of an arbitrary block of data with arbitrary length.
-
-    All the clients will receive an exact copy of this block of data, which will be
-    processed in their processBroadcast() method.
-    @param msg The message to be sent to the clients
-  */
-  //AB: processBroadcast doesn't exist!! is processIncomingMessage meant?
-  void sendBroadcast (const TQByteArray &msg);
-
-  /**
-    Sends a message to all the clients in a list.
-    The message consists of an arbitrary block of data with arbitrary length.
-
-    All clients will receive an exact copy of this block of data, which will be
-    processed in their processForward() method.
-
-    If the list contains client IDs that are not defined, they are ignored. If
-    it contains an ID several times, that client will receive the message several
-    times.
-
-    To send a message to the admin of the KMessageServer, you can use 0 as clientID,
-    instead of using the real client ID.
-    @param msg The message to be sent to the clients
-    @param clients A list of clients the message should be sent to
-  */
-  //AB: processForward doesn't exist!! is processIncomingMessage meant?
-  void sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients);
-
-  /**
-    Sends a message to a single client. This is a convenieance method. It calls
-    sendForward (const TQByteArray &msg, const TQValueList &ltTQ_UINT32> &clients)
-    with a list containing only one client ID.
-
-    To send a message to the admin of the  KMessageServer, you can use 0 as clientID,
-    instead of using the real client ID.
-    @param msg The message to be sent to the client
-    @param client The id of the client the message shall be sent to
-  */
-  void sendForward (const TQByteArray &msg, TQ_UINT32 client);
-
-  /**
-    Once this function is called no message will be received anymore.
-    processIncomingMessage() gets delayed until unlock() is called.
-
-    Note that all messages are still received, but their delivery (like
-    broadcastReceived()) get delayed only.
-   */
-  void lock();
-
-  /**
-    Deliver every message that was delayed by lock() and actually deliver 
-    all messages that get received from now on.
-   */
-  void unlock();
-
-  /**
-    @return The number of messages that got delayed since lock() was called
-   */
-  unsigned int delayedMessageCount() const;
-
-signals:
-  /**
-    This signal is emitted when the client receives a broadcast message from the
-    KMessageServer, sent by another client. Connect to this signal to analyse the
-    received message and do the right reaction.
-
-    senderID contains the ID of the client that sent the broadcast message. You can
-    use this e.g. to send a reply message to only that client. Or you can use it
-    to ignore broadcast messages that were sent by yourself:
-
-    \code
-      void myObject::myBroadcastSlot (const TQByteArray &msg, TQ_UINT32 senderID)
-      {
-        if (senderID == ((KMessageClient *)sender())->id())
-          return;
-        ...
-      }
-    \endcode
-    @param msg The message that has been sent to us
-    @param senderID The ID of the client which sent the message
-  */
-  void broadcastReceived (const TQByteArray &msg, TQ_UINT32 senderID);
-
-  /**
-    This signal is emitted when the client receives a forward message from the
-    KMessageServer, sent by another client. Connect to this signal to analyse the
-    received message and do the right reaction.
-
-    senderID contains the ID of the client that sent the broadcast message. You can
-    use this e.g. to send a reply message to only that client.
-
-    tqreceivers contains the list of the clients that got the message. (If this list
-    only contains one number, this will be your client ID, and it was exclusivly
-    sent to you.)
-
-    If you don't want to distinguish between broadcast and forward messages and
-    treat them the same, you can connect forwardReceived signal to the
-    broadcastReceived signal. (Yes, that's possible! You can connect a TQt signal to
-    a TQt signal, and the second one can have less parameters.)
-
-    \code
-      KMessageClient *client = new KMessageClient ();
-      connect (client, TQT_SIGNAL (forwardReceived (const TQByteArray &, TQ_UINT32, const TQValueList <TQ_UINT32>&)),
-               client, TQT_SIGNAL (broadcastReceived (const TQByteArray &, TQ_UINT32)));
-    \endcode
-
-    Then connect the broadcast signal to your slot that analyzes the message.
-    @param msg The message that has been sent to us
-    @param senderID The ID of the client which sent the message
-    @param tqreceivers All clients which receive this message
-  */
-  void forwardReceived (const TQByteArray &msg, TQ_UINT32 senderID, const TQValueList <TQ_UINT32> &tqreceivers);
-
-  /**
-    This signal is emitted when the connection to the KMessageServer is broken.
-    Reasons for this can be: a network error, a server breakdown, or you were just kicked
-    from the server.
-
-    When this signal is sent, the connection is already lost and the client is unconnected.
-    You can connect to another server by calling setServer() afterwards. But keep in mind that
-    some important messages might have vanished.
-  */
-  void connectionBroken ();
-
-  /**
-    This signal is emitted right before the client disconnects. It can be used
-    to this store the id of the client which is about to be lost.
-  */
-  void aboutToDisconnect(TQ_UINT32 id);
-
-  /**
-    This signal is emitted when this client becomes the admin client or when it loses
-    the admin client status. Connect to this signal if you have to do any initialization
-    or cleanup.
-    @param isAdmin Whether we are now admin or not
-  */
-  void adminStatusChanged (bool isAdmin);
-
-  /**
-    This signal is emitted when another client has connected
-    to the server. Connect to this method if that clients needs initialization.
-    This should usually only be done in one client, e.g. the admin client.
-    @param clientID The ID of the client that has newly connectd.
-  */
-  void eventClientConnected (TQ_UINT32 clientID);
-
-  /**
-    This signal is emitted when the server has lost the
-    connection to one of the clients (This could be because of a bad internet connection
-    or because the client disconnected on purpose).
-    @param clientID The ID of the client that has disconnected
-    @param broken true if it was disconnected because of a network error
-  */
-  void eventClientDisconnected (TQ_UINT32 clientID, bool broken);
-
-  /**
-    This signal is emitted on every message that came from the server. You can connect to this
-    signal to see the messages directly. They are in the format specified in KMessageServer.
-
-    @param msg The message that has been sent to us
-    @param unknown True when KMessageClient didn't recognize the message, i.e. it contained an unknown
-    message ID. If you want to add additional message types to the client, connect to this signal,
-    and if unknown is true, analyse the message by yourself. If you recognized the message,
-    set unknown to false (Otherwise a debug message will be printed).
-  */
-  //AB: maybe add a setNoEmit() so that the other signals can be deactivated?
-  //Could be a performance benefit (note: KMessageClient is a time critical
-  //class!!!)
-  void serverMessageReceived (const TQByteArray &msg, bool &unknown);
-
-protected:
-  /**
-    This slot is called from processIncomingMessage or 
-    processFirstMessage, depending on whether the client is locked or a delayed
-    message is still here (see lock)
-
-    It processes the message and analyses it. If it is a broadcast or a forward message from
-    another client, it emits the signal processBroadcast or processForward accordingly.
-
-    If you want to treat additional server messages, you can overwrite this method. Don't
-    forget to call processIncomingMessage of your superclass!
-
-    At the moment, the following server messages are interpreted:
-
-    MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
-    @param msg The incoming message
-  */
-
-  virtual void processMessage (const TQByteArray& msg);
-
-protected slots:
-  /**
-    This slot is called from the signal KMessageIO::received whenever a message from the
-    KMessageServer arrives.
-
-    It processes the message and analyses it. If it is a broadcast or a forward message from
-    another client, it emits the signal processBroadcast or processForward accordingly.
-
-    If you want to treat additional server messages, you can overwrite this method. Don't
-    forget to call processIncomingMessage() of your superclass!
-
-    At the moment, the following server messages are interpreted:
-
-    MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
-    @param msg The incoming message
-  */
-  virtual void processIncomingMessage (const TQByteArray &msg);
-
-  /**
-    Called from unlock() (using TQTimer::singleShot) until all delayed 
-    messages are delivered.
-  */
-  void processFirstMessage();
-
-  /**
-    This slot is called from the signal KMessageIO::connectionBroken.
-
-    It deletes the internal KMessageIO object, and resets the client to default
-    values. To connect again to another server, use setServer.
-  */
-  virtual void removeBrokenConnection ();
-  void removeBrokenConnection2 ();
-
-private:
-  KMessageClientPrivate *d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kmessageio.cpp b/libkdegames/kgame/kmessageio.cpp
deleted file mode 100644
index b35382b0..00000000
--- a/libkdegames/kgame/kmessageio.cpp
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-/*
-     KMessageIO class and subclasses KMessageSocket and KMessageDirect
-*/
-
-#include "kmessageio.h"
-#include <tqsocket.h>
-#include <kdebug.h>
-#include <kprocess.h>
-#include <tqfile.h>
-
-// ----------------------- KMessageIO -------------------------
-
-KMessageIO::KMessageIO (TQObject *parent, const char *name)
-  : TQObject (parent, name), m_id (0)
-{}
-
-KMessageIO::~KMessageIO ()
-{}
-
-void KMessageIO::setId (TQ_UINT32 id)
-{
-  m_id = id;
-}
-
-TQ_UINT32 KMessageIO::id ()
-{
-  return m_id;
-}
-
-// ----------------------KMessageSocket -----------------------
-
-KMessageSocket::KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent, 
-const char *name)
-  : KMessageIO (parent, name)
-{
-  mSocket = new TQSocket ();
-  mSocket->connectToHost (host, port);
-  initSocket ();
-}
-
-KMessageSocket::KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject 
-*parent, const char *name)
-  : KMessageIO (parent, name)
-{
-  mSocket = new TQSocket ();
-  mSocket->connectToHost (host.toString(), port);
-  initSocket ();
-}
-
-KMessageSocket::KMessageSocket (TQSocket *socket, TQObject *parent, const char 
-*name)
-  : KMessageIO (parent, name)
-{
-  mSocket = socket;
-  initSocket ();
-}
-
-KMessageSocket::KMessageSocket (int socketFD, TQObject *parent, const char 
-*name)
-  : KMessageIO (parent, name)
-{
-  mSocket = new TQSocket ();
-  mSocket->setSocket (socketFD);
-  initSocket ();
-}
-
-KMessageSocket::~KMessageSocket ()
-{
-  delete mSocket;
-}
-
-bool KMessageSocket::isConnected () const
-{
-  return mSocket->state() == TQSocket::Connection;
-}
-
-void KMessageSocket::send (const TQByteArray &msg)
-{
-  TQDataStream str (mSocket);
-  str << TQ_UINT8 ('M');  // magic number for begin of message
-  str.writeBytes (msg.data(), msg.size());  // writes the length (as TQ_UINT32) and the data
-}
-
-void KMessageSocket::processNewData ()
-{
-  if (isRecursive)
-    return;
-  isRecursive = true;
-
-  TQDataStream str (mSocket);
-  while (mSocket->bytesAvailable() > 0)
-  {
-    if (mAwaitingHeader)
-    {
-      // Header = magic number + packet length = 5 bytes
-      if (mSocket->bytesAvailable() < 5)
-      {
-        isRecursive = false;
-        return;
-      }
-
-      // Read the magic number first. If something unexpected is found,
-      // start over again, ignoring the data that was read up to then.
-
-      TQ_UINT8 v;
-      str >> v;
-      if (v != 'M')
-      {
-        kdWarning(11001) << k_funcinfo << ": Received unexpected data, magic number wrong!" << endl;
-        continue;
-      }
-
-      str >> mNextBlockLength;
-      mAwaitingHeader = false;
-    }
-    else
-    {
-      // Data not completely read => wait for more
-      if (mSocket->bytesAvailable() < (TQ_ULONG) mNextBlockLength)
-      {
-        isRecursive = false;
-        return;
-      }
-
-      TQByteArray msg (mNextBlockLength);
-      str.readRawBytes (msg.data(), mNextBlockLength);
-
-      // send the received message
-      emit received (msg);
-
-      // Waiting for the header of the next message
-      mAwaitingHeader = true;
-    }
-  }
-
-  isRecursive = false;
-}
-
-void KMessageSocket::initSocket ()
-{
-  connect (mSocket, TQT_SIGNAL (error(int)), TQT_SIGNAL (connectionBroken()));
-  connect (mSocket, TQT_SIGNAL (connectionClosed()), TQT_SIGNAL (connectionBroken()));
-  connect (mSocket, TQT_SIGNAL (readyRead()), TQT_SLOT (processNewData()));
-  mAwaitingHeader = true;
-  mNextBlockLength = 0;
-  isRecursive = false;
-}
-
-TQ_UINT16 KMessageSocket::peerPort () const
-{
-  return mSocket->peerPort();
-}
-
-TQString KMessageSocket::peerName () const
-{
-  return mSocket->peerName();
-}
-
-// ----------------------KMessageDirect -----------------------
-
-KMessageDirect::KMessageDirect (KMessageDirect *partner, TQObject *parent, 
-const char *name)
-  : KMessageIO (parent, name), mPartner (0)
-{
-  // 0 as first parameter leaves the object unconnected
-  if (!partner)
-    return;
-
-  // Check if the other object is already connected
-  if (partner && partner->mPartner)
-  {
-    kdWarning(11001) << k_funcinfo << ": Object is already connected!" << endl;
-    return;
-  }
-
-  // Connect from us to that object
-  mPartner = partner;
-
-  // Connect the other object to us
-  partner->mPartner = this;
-}
-
-KMessageDirect::~KMessageDirect ()
-{
-  if (mPartner)
-  {
-    mPartner->mPartner = 0;
-    emit mPartner->connectionBroken();
-  }
-}
-
-bool KMessageDirect::isConnected () const
-{
-  return mPartner != 0;
-}
-
-void KMessageDirect::send (const TQByteArray &msg)
-{
-  if (mPartner)
-    emit mPartner->received (msg);
-  else
-    kdError(11001) << k_funcinfo << ": Not yet connected!" << endl;
-}
-
-
-// ----------------------- KMessageProcess ---------------------------
-
-KMessageProcess::~KMessageProcess()
-{
-  kdDebug(11001) << "@@@KMessageProcess::Delete process" << endl;
-  if (mProcess)
-  {
-    mProcess->kill();
-    delete mProcess;
-    mProcess=0;
-    // Remove not send buffers
-    mQueue.setAutoDelete(true);
-    mQueue.clear();
-    // Maybe todo: delete mSendBuffer
-  }
-}
-KMessageProcess::KMessageProcess(TQObject *parent, TQString file) : KMessageIO(parent,0)
-{
-  // Start process
-  kdDebug(11001) << "@@@KMessageProcess::Start process" << endl;
-  mProcessName=file;
-  mProcess=new KProcess;
-  int id=0;
-  *mProcess << mProcessName << TQString("%1").tqarg(id);
-  kdDebug(11001) << "@@@KMessageProcess::Init:Id= " << id << endl;
-  kdDebug(11001) << "@@@KMessgeProcess::Init:Processname: " << mProcessName << endl;
-  connect(mProcess, TQT_SIGNAL(receivedStdout(KProcess *, char *, int )),
-                        this, TQT_SLOT(slotReceivedStdout(KProcess *, char * , int )));
-  connect(mProcess, TQT_SIGNAL(receivedStderr(KProcess *, char *, int )),
-                        this, TQT_SLOT(slotReceivedStderr(KProcess *, char * , int )));
-  connect(mProcess, TQT_SIGNAL(processExited(KProcess *)),
-                        this, TQT_SLOT(slotProcessExited(KProcess *)));
-  connect(mProcess, TQT_SIGNAL(wroteStdin(KProcess *)),
-                        this, TQT_SLOT(slotWroteStdin(KProcess *)));
-  mProcess->start(KProcess::NotifyOnExit,KProcess::All);
-  mSendBuffer=0;
-  mReceiveCount=0;
-  mReceiveBuffer.resize(1024);
-}
-bool KMessageProcess::isConnected() const
-{
-  kdDebug(11001) << "@@@KMessageProcess::Is conencted" << endl;
-  if (!mProcess) return false;
-  return mProcess->isRunning();
-}
-void KMessageProcess::send(const TQByteArray &msg)
-{
-  kdDebug(11001) << "@@@KMessageProcess:: SEND("<<msg.size()<<") to process" << endl;
-  unsigned int size=msg.size()+2*sizeof(long);
-
-  char *tmpbuffer=new char[size];
-  long *p1=(long *)tmpbuffer;
-  long *p2=p1+1;
-  kdDebug(11001)  << "p1="<<p1 << "p2="<< p2 << endl;
-  memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
-  *p1=0x4242aeae;
-  *p2=size;
-  
-  TQByteArray *buffer=new TQByteArray();
-  buffer->assign(tmpbuffer,size);
-  // buffer->duplicate(msg);
-  mQueue.enqueue(buffer);
-  writeToProcess(); 
-}
-void KMessageProcess::writeToProcess()
-{
-  // Previous send ok and item in queue
-  if (mSendBuffer || mQueue.isEmpty()) return ;
-  mSendBuffer=mQueue.dequeue();
-  if (!mSendBuffer) return ;
-
-  // write it out to the process
-  //  kdDebug(11001) << " @@@@@@ writeToProcess::SEND to process " << mSendBuffer->size() << " BYTE " << endl;
-  //  char *p=mSendBuffer->data();
-  //  for (int i=0;i<16;i++) printf("%02x ",(unsigned char)(*(p+i)));printf("\n");
-  mProcess->writeStdin(mSendBuffer->data(),mSendBuffer->size());
-
-}
-void KMessageProcess::slotWroteStdin(KProcess * )
-{
-  kdDebug(11001) << k_funcinfo << endl;
-  if (mSendBuffer)
-  {
-    delete mSendBuffer;
-    mSendBuffer=0;
-  }
-  writeToProcess();
-}
-
-void KMessageProcess::slotReceivedStderr(KProcess * proc, char *buffer, int buflen)
-{
-  int pid=0;
-  int len;
-  char *p;
-  char *pos;
-//  kdDebug(11001)<<"############# Got stderr " << buflen << " bytes" << endl;
-
-  if (!buffer || buflen==0) return ; 
-  if (proc) pid=proc->pid();
-
-
-  pos=buffer;
-  do
-  {
-    p=(char *)memchr(pos,'\n',buflen);
-    if (!p) len=buflen;
-    else len=p-pos;
-
-    TQByteArray a;
-    a.setRawData(pos,len);
-    TQString s(a);
-    kdDebug(11001) << "PID" <<pid<< ":" << s << endl;
-    a.resetRawData(pos,len);
-    if (p) pos=p+1;
-    buflen-=len+1;
-  }while(buflen>0);
-}
-
-
-void KMessageProcess::slotReceivedStdout(KProcess * , char *buffer, int buflen)
-{
-  kdDebug(11001) << "$$$$$$ " << k_funcinfo << ": Received " << buflen << " bytes over inter process communication" << endl;
-
-  // TODO Make a plausibility check on buflen to avoid memory overflow
-  while (mReceiveCount+buflen>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
-  memcpy(mReceiveBuffer.data()+mReceiveCount,buffer,buflen);
-  mReceiveCount+=buflen;
-
-  // Possbile message
-  while (mReceiveCount>2*sizeof(long))
-  {
-    long *p1=(long *)mReceiveBuffer.data();
-    long *p2=p1+1;
-    unsigned int len;
-    if (*p1!=0x4242aeae)
-    {
-      kdDebug(11001) << k_funcinfo << ": Cookie error...transmission failure...serious problem..." << endl;
-//      for (int i=0;i<mReceiveCount;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
-    }
-    len=(int)(*p2);
-    if (len<2*sizeof(long))
-    {
-      kdDebug(11001) << k_funcinfo << ": Message size error" << endl;
-      break;
-    }
-    if (len<=mReceiveCount)
-    {
-      kdDebug(11001) << k_funcinfo << ": Got message with len " << len << endl;
-
-      TQByteArray msg;
-    //  msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-      msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-      emit received(msg);
-     // msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-      // Shift buffer
-      if (len<mReceiveCount)
-      {
-        memmove(mReceiveBuffer.data(),mReceiveBuffer.data()+len,mReceiveCount-len);
-      }
-      mReceiveCount-=len;
-    }
-    else break;
-  }
-}
-
-void KMessageProcess::slotProcessExited(KProcess * /*p*/)
-{
-  kdDebug(11001) << "Process exited (slot)" << endl;
-  emit connectionBroken();
-  delete mProcess;
-  mProcess=0;
-}
-
-
-// ----------------------- KMessageFilePipe ---------------------------
-KMessageFilePipe::KMessageFilePipe(TQObject *parent,TQFile *readfile,TQFile *writefile) : KMessageIO(parent,0)
-{
-  mReadFile=readfile;
-  mWriteFile=writefile;
-  mReceiveCount=0;
-  mReceiveBuffer.resize(1024);
-}
-
-KMessageFilePipe::~KMessageFilePipe()
-{
-}
-
-bool KMessageFilePipe::isConnected () const
-{
-  return (mReadFile!=0)&&(mWriteFile!=0);
-}
-
-void KMessageFilePipe::send(const TQByteArray &msg)
-{
-  unsigned int size=msg.size()+2*sizeof(long);
-
-  char *tmpbuffer=new char[size];
-  long *p1=(long *)tmpbuffer;
-  long *p2=p1+1;
-  memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
-  *p1=0x4242aeae;
-  *p2=size;
-  
-  TQByteArray buffer;
-  buffer.assign(tmpbuffer,size);
-  mWriteFile->writeBlock(buffer);
-  mWriteFile->flush();
-  /*
-  fprintf(stderr,"+++ KMessageFilePipe:: SEND(%d to parent) realsize=%d\n",msg.size(),buffer.size());
-  for (int i=0;i<buffer.size();i++) fprintf(stderr,"%02x ",buffer[i]);fprintf(stderr,"\n");
-  fflush(stderr);
-  */
-}
-
-void KMessageFilePipe::exec()
-{
-
-  // According to BL: Blocking read is ok
-  // while(mReadFile->atEnd()) { usleep(100); }
-
-   int ch=mReadFile->getch();
-
-   while (mReceiveCount>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
-   mReceiveBuffer[mReceiveCount]=(char)ch;
-   mReceiveCount++;
-
-   // Change for message 
-   if (mReceiveCount>=2*sizeof(long))
-   {
-     long *p1=(long *)mReceiveBuffer.data();
-     long *p2=p1+1;
-     unsigned int len;
-     if (*p1!=0x4242aeae)
-     {
-       fprintf(stderr,"KMessageFilePipe::exec:: Cookie error...transmission failure...serious problem...\n");
-//       for (int i=0;i<16;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
-     }
-     len=(int)(*p2);
-     if (len==mReceiveCount)
-     {
-       //fprintf(stderr,"KMessageFilePipe::exec:: Got Message with len %d\n",len);
-
-       TQByteArray msg;
-       //msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-       msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-       emit received(msg);
-       //msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
-       mReceiveCount=0;
-     }
-   }
-   
-
-   return ;
-
-  
-}
-
-#include "kmessageio.moc"
diff --git a/libkdegames/kgame/kmessageio.h b/libkdegames/kgame/kmessageio.h
deleted file mode 100644
index 326476ff..00000000
--- a/libkdegames/kgame/kmessageio.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-/*
-     KMessageIO class and subclasses KMessageSocket and KMessageDirect
-*/
-
-#ifndef _KMESSAGEIO_H_
-#define _KMESSAGEIO_H_
-
-#include <tqcstring.h>
-#include <tqhostaddress.h>
-#include <tqobject.h>
-#include <tqstring.h>
-#include <tqptrqueue.h>
-#include <tqfile.h>
-#include <kdebug.h>
-
-class TQSocket;
-class KProcess;
-//class TQFile;
-
-
-/**
-  This abstract base class represents one end of a message connections
-  between two clients. Each client has one object of a subclass of
-  KMessageIO. Calling /e send() on one object will emit the signal
-  /e received() on the other object, and vice versa.
-
-  For each type of connection (TCP/IP socket, COM port, direct connection
-  within the same class) a subclass of KMessageIO must be defined that
-  implements the pure virtual methods /e send() and /e isConnected(),
-  and sends the signals. (See /e KMessageSocket for an example implementation.)
-
-  Two subclasses are already included: /e KMessageSocket (connection using
-  TCP/IP sockets) and /e KMessageDirect (connection using method calls, both
-  sides must be within the same process).
-*/
-
-class KMessageIO : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-  /**
-   * The usual TQObject constructor, does nothing else.
-   **/
-  KMessageIO (TQObject *parent = 0, const char *name = 0);
-
-  /**
-   * The usual destructor, does nothing special.
-   **/
-  ~KMessageIO ();
-
-  /**
-  * The runtime idendifcation
-  */
-  virtual int rtti() const {return 0;}
-
-  /**
-   * @return Whether this KMessageIO is a network IO or not.
-   **/
-  //virtual bool isNetwork () const = 0;
-  virtual bool isNetwork () const
-  {
-   kdError(11001) << "Calling PURE virtual isNetwork...BAD" << endl;
-   return false;
-  }
-
-  /**
-    This method returns the status of the object, whether it is already
-    (or still) connected to another KMessageIO object or not.
-
-    This is a pure virtual method, so it has to be implemented in a subclass
-    of KMessageIO.
-  */
-  //virtual bool isConnected () const = 0;
-  virtual bool isConnected () const
-  {
-   kdError(11001) << "Calling PURE virtual isConencted...BAD" << endl;
-   return false;
-  }
-
-  /**
-    Sets the ID number of this object. This number can for example be used to
-    distinguish several objects in a server.
-
-    NOTE: Sometimes it is useful to let two connected KMessageIO objects
-    have the same ID number. You have to do so yourself, KMessageIO doesn't
-    change this value on its own!
-  */
-  void setId (TQ_UINT32 id);
-
-  /**
-    Queries the ID of this object.
-  */
-  TQ_UINT32 id ();
-
-  /**
-    @since 3.2
-    @return 0 in the default implementation. Reimplemented in @ref KMessageSocket.
-  */
-  virtual TQ_UINT16 peerPort () const { return 0; }
-
-  /**
-    @since 3.2
-    @return "localhost" in the default implementation. Reimplemented in @ref KMessageSocket
-  */
-  virtual TQString peerName () const { return TQString::tqfromLatin1("localhost"); }
-
-
-signals:
-  /**
-    This signal is emitted when /e send() on the connected KMessageIO
-    object is called. The parameter contains the same data array in /e msg
-    as was used in /e send().
-  */
-  void received (const TQByteArray &msg);
-
-  /**
-    This signal is emitted when the connection is closed. This can be caused
-    by a hardware error (e.g. broken internet connection) or because the other
-    object was killed.
-
-    Note: Sometimes a broken connection can be undetected for a long time,
-    or may never be detected at all. So don't rely on this signal!
-  */
-  void connectionBroken ();
-
-public slots:
-
-  /**
-    This slot sends the data block in /e msg to the connected object, that will
-    emit /e received().
-
-    For a concrete class, you have to subclass /e KMessageIO and overwrite this
-    method. In the subclass, implement this method as an ordinary method, not
-    as a slot! (Otherwise another slot would be defined. It would work, but uses
-    more memory and time.) See /e KMessageSocket for an example implementation.
-  */
-  virtual void send (const TQByteArray &msg) = 0;
-
-protected:
-  TQ_UINT32 m_id;
-};
-
-
-/**
-  This class implements the message communication using a TCP/IP socket. The
-  object can connect to a server socket, or can use an already connected socket.
-*/
-
-class KMessageSocket : public KMessageIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-  /**
-    Connects to a server socket on /e host with /e port. host can be an
-    numerical (e.g. "192.168.0.212") or symbolic (e.g. "wave.peter.org")
-    IP address. You can immediately use the /e sendSystem() and
-    /e sendBroadcast() methods. The messages are stored and sent to the
-    receiver after the connection is established.
-
-    If the connection could not be established (e.g. unknown host or no server
-    socket at this port), the signal /e connectionBroken is emitted.
-  */
-  KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent = 0,
-                  const char *name = 0);
-
-  /**
-    Connects to a server socket on /e host with /e port. You can immediately
-    use the /e sendSystem() and /e sendBroadcast() methods. The messages are
-    stored and sent to the receiver after the connection is established.
-
-    If the connection could not be established (e.g. unknown host or no server
-    socket at this port), the signal /e connectionBroken is emitted.
-  */
-  KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject *parent = 0,
-                  const char *name = 0);
-
-  /**
-    Uses /e socket to do the communication.
-
-    The socket should already be connected, or at least be in /e connecting
-    state.
-
-    Note: The /e socket object is then owned by the /e KMessageSocket object.
-    So don't use it otherwise any more and don't delete it. It is deleted
-    together with this KMessageSocket object. (Use 0 as parent for the TQSocket
-    object t ensure it is not deleted.)
-  */
-  KMessageSocket (TQSocket *socket, TQObject *parent = 0, const char *name = 0);
-
-  /**
-    Uses the socket specified by the socket descriptor socketFD to do the
-    communication. The socket must already be connected.
-
-    This constructor can be used with a TQServerSocket within the (pure
-    virtual) method /e newConnection.
-
-    Note: The socket is then owned by the /e KMessageSocket object. So don't
-    manipulate the socket afterwards, especially don't close it. The socket is
-    automatically closed when KMessageSocket is deleted.
-  */
-  KMessageSocket (int socketFD, TQObject *parent = 0, const char *name = 0);
-
-  /**
-    Destructor, closes the socket.
-  */
-  ~KMessageSocket ();
-
-  /**
-  * The runtime idendifcation
-  */
-  virtual int rtti() const {return 1;}
-
-  /**
-    @since 3.2
-    @return The port that this object is connected to. See TQSocket::peerPort
-  */
-  virtual TQ_UINT16 peerPort () const;
-
-  /**
-    @since 3.2
-    @return The hostname this object is connected to. See TQSocket::peerName.
-  */
-  virtual TQString peerName () const;
-
-  /**
-    @return TRUE as this is a network IO.
-  */
-  bool isNetwork() const { return true; }
-
-  /**
-    Returns true if the socket is in state /e connected.
-  */
-  bool isConnected () const;
-
-  /**
-    Overwritten slot method from KMessageIO.
-
-    Note: It is not declared as a slot method, since the slot is already
-    defined in KMessageIO as a virtual method.
-  */
-  void send (const TQByteArray &msg);
-
-protected slots:
-  virtual void processNewData ();
-
-protected:
-  void initSocket ();
-  TQSocket *mSocket;
-  bool mAwaitingHeader;
-  TQ_UINT32 mNextBlockLength;
-
-  bool isRecursive;  // workaround for "bug" in TQSocket, TQt 2.2.3 or older
-};
-
-
-/**
-  This class implements the message communication using function calls
-  directly. It can only be used when both sides of the message pipe are
-  within the same process. The communication is very fast.
-
-  To establish a communication, you have to create two instances of
-  KMessageDirect, the first one with no parameters in the constructor,
-  the second one with the first as parameter:
-
-  /code
-    KMessageDirect *peer1, *peer2;
-    peer1 = new KMessageDirect ();       // unconnected
-    peer2 = new KMessageDirect (peer1);  // connect with peer1
-  /endcode
-
-  The connection is only closed when one of the instances is deleted.
-*/
-
-class KMessageDirect : public KMessageIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-  /**
-    Creates an object and connects it to the object given in the first
-    parameter. Use 0 as first parameter to create an unconnected object,
-    that is later connected.
-
-    If that object is already connected, the object remains unconnected.
-  */
-  KMessageDirect (KMessageDirect *partner = 0, TQObject *parent = 0, const char
-*name = 0);
-
-  /**
-    Destructor, closes the connection.
-  */
-  ~KMessageDirect ();
-
-  /**
-  * The runtime idendifcation
-  */
-  virtual int rtti() const {return 2;}
-
-
-  /**
-    @return FALSE as this is no network IO.
-  */
-  bool isNetwork() const { return false; }
-
-  /**
-    Returns true, if the object is connected to another instance.
-
-    If you use the first constructor, the object is unconnected unless another
-    object is created with this one as parameter.
-
-    The connection can only be closed by deleting one of the objects.
-  */
-  bool isConnected () const;
-
-  /**
-    Overwritten slot method from KMessageIO.
-
-    Note: It is not declared as a slot method, since the slot is already
-    defined in KMessageIO as a virtual method.
-  */
-  void send (const TQByteArray &msg);
-
-protected:
-  KMessageDirect *mPartner;
-};
-
-class KMessageProcess : public KMessageIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-  public:
-    KMessageProcess(TQObject *parent, TQString file);
-    ~KMessageProcess();
-    bool isConnected() const;
-    void send (const TQByteArray &msg);
-    void writeToProcess();
-
-    /**
-      @return FALSE as this is no network IO.
-    */
-    bool isNetwork() const { return false; }
-
-  /**
-  * The runtime idendifcation
-  */
-  virtual int rtti() const {return 3;}
-
-
-
-  public slots:
-  void  slotReceivedStdout(KProcess *proc, char *buffer, int buflen);
-  void  slotReceivedStderr(KProcess *proc, char *buffer, int buflen);
-  void  slotProcessExited(KProcess *p);
-  void  slotWroteStdin(KProcess *p);
-
-  private:
-    TQString mProcessName;
-    KProcess *mProcess;
-    TQPtrQueue <TQByteArray> mQueue;
-    TQByteArray *mSendBuffer;
-    TQByteArray mReceiveBuffer;
-    unsigned int mReceiveCount;
-};
-
-class KMessageFilePipe : public KMessageIO
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-  public:
-    KMessageFilePipe(TQObject *parent,TQFile *readFile,TQFile *writeFile);
-    ~KMessageFilePipe();
-    bool isConnected() const;
-    void send (const TQByteArray &msg);
-    void exec();
-
-    /**
-      @return FALSE as this is no network IO.
-    */
-    bool isNetwork() const { return false; }
-
-  /**
-  * The runtime idendifcation
-  */
-  virtual int rtti() const {return 4;}
-
-
-
-  private:
-    TQFile *mReadFile;
-    TQFile *mWriteFile;
-    TQByteArray mReceiveBuffer;
-    unsigned int mReceiveCount;
-};
-
-#endif
diff --git a/libkdegames/kgame/kmessageserver.cpp b/libkdegames/kgame/kmessageserver.cpp
deleted file mode 100644
index 80df9207..00000000
--- a/libkdegames/kgame/kmessageserver.cpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include <tqiodevice.h>
-#include <tqbuffer.h>
-#include <tqptrlist.h>
-#include <tqptrqueue.h>
-#include <tqtimer.h>
-#include <tqvaluelist.h>
-
-#include <kdebug.h>
-
-#include "kmessageio.h"
-#include "kmessageserver.h"
-
-// --------------- internal class KMessageServerSocket
-
-KMessageServerSocket::KMessageServerSocket (TQ_UINT16 port, TQObject *parent)
-  : TQServerSocket (port, 0, parent)
-{
-}
-
-KMessageServerSocket::~KMessageServerSocket ()
-{
-}
-
-void KMessageServerSocket::newConnection (int socket)
-{
-  emit newClientConnected (new KMessageSocket (socket));
-}
-
-// ---------------- class for storing an incoming message
-
-class MessageBuffer
-{
-  public:
-    MessageBuffer (TQ_UINT32 clientID, const TQByteArray &messageData)
-      : id (clientID), data (messageData) { }
-    ~MessageBuffer () {}
-    TQ_UINT32 id;
-    TQByteArray data;
-};
-
-// ---------------- KMessageServer's private class
-
-class KMessageServerPrivate
-{
-public:
-  KMessageServerPrivate()
-    : mMaxClients (-1), mGameId (1), mUniqueClientNumber (1), mAdminID (0), mServerSocket (0)
-  {
-    mClientList.setAutoDelete (true);
-    mMessageQueue.setAutoDelete (true);
-  }
-
-  int mMaxClients;
-  int mGameId;
-  TQ_UINT16 mCookie;
-  TQ_UINT32 mUniqueClientNumber;
-  TQ_UINT32 mAdminID;
-
-  KMessageServerSocket* mServerSocket;
-
-  TQPtrList <KMessageIO> mClientList;
-  TQPtrQueue <MessageBuffer> mMessageQueue;
-  TQTimer mTimer;
-  bool mIsRecursive;
-};
-
-
-// ------------------ KMessageServer
-
-KMessageServer::KMessageServer (TQ_UINT16 cookie,TQObject* parent)
-  : TQObject(parent, 0)
-{
-  d = new KMessageServerPrivate;
-  d->mIsRecursive=false;
-  d->mCookie=cookie;
-  connect (&(d->mTimer), TQT_SIGNAL (timeout()),
-           this, TQT_SLOT (processOneMessage()));
-  kdDebug(11001) << "CREATE(KMessageServer="
-		<< this
-		<< ") cookie="
-		<< d->mCookie
-		<< " sizeof(this)="
-		<< sizeof(KMessageServer)
-		<< endl;
-}
-
-KMessageServer::~KMessageServer()
-{
-  kdDebug(11001) << k_funcinfo << "this=" << this << endl;
-  Debug();
-  stopNetwork();
-  deleteClients();
-  delete d;
-  kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-//------------------------------------- TCP/IP server stuff
-
-bool KMessageServer::initNetwork (TQ_UINT16 port)
-{
-  kdDebug(11001) << k_funcinfo << endl;
-
-  if (d->mServerSocket)
-  {
-    kdDebug (11001) << k_funcinfo << ": We were already offering connections!" << endl;
-    delete d->mServerSocket;
-  }
-
-  d->mServerSocket = new KMessageServerSocket (port);
-  d->mIsRecursive = false;
-
-  if (!d->mServerSocket || !d->mServerSocket->ok())
-  {
-    kdError(11001) << k_funcinfo << ": Serversocket::ok() == false" << endl;
-    delete d->mServerSocket;
-    d->mServerSocket=0;
-    return false;
-  }
-
-  kdDebug (11001) << k_funcinfo << ": Now listening to port "
-                  << d->mServerSocket->port() << endl;
-  connect (d->mServerSocket, TQT_SIGNAL (newClientConnected (KMessageIO*)),
-           this, TQT_SLOT (addClient (KMessageIO*)));
-  return true;
-}
-
-TQ_UINT16 KMessageServer::serverPort () const
-{
-  if (d->mServerSocket)
-    return d->mServerSocket->port();
-  else
-    return 0;
-}
-
-void KMessageServer::stopNetwork()
-{
-  if (d->mServerSocket) 
-  {
-    delete d->mServerSocket;
-    d->mServerSocket = 0;
-  }
-}
-
-bool KMessageServer::isOfferingConnections() const
-{
-  return d->mServerSocket != 0;
-}
-
-//----------------------------------------------- adding / removing clients
-
-void KMessageServer::addClient (KMessageIO* client)
-{
-  TQByteArray msg;
-
-  // maximum number of clients reached?
-  if (d->mMaxClients >= 0 && d->mMaxClients <= clientCount())
-  {
-    kdError (11001) << k_funcinfo << ": Maximum number of clients reached!" << endl;
-    return;
-  }
-
-  // give it a unique ID
-  client->setId (uniqueClientNumber());
-  kdDebug (11001) << k_funcinfo << ": " << client->id() << endl;
-
-  // connect its signals
-  connect (client, TQT_SIGNAL (connectionBroken()),
-           this, TQT_SLOT (removeBrokenClient()));
-  connect (client, TQT_SIGNAL (received (const TQByteArray &)),
-           this, TQT_SLOT (getReceivedMessage (const TQByteArray &)));
-
-  // Tell everyone about the new guest
-  // Note: The new client doesn't get this message!
-  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_CONNECTED) << client->id();
-  broadcastMessage (msg);
-
-  // add to our list
-  d->mClientList.append (client);
-
-  // tell it its ID
-  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_CLIENT_ID) << client->id();
-  client->send (msg);
-
-  // Give it the complete list of client IDs
-  TQDataStream (msg, IO_WriteOnly)  << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
-  client->send (msg);
-
-
-  if (clientCount() == 1)
-  {
-    // if it is the first client, it becomes the admin
-    setAdmin (client->id());
-  }
-  else
-  {
-    // otherwise tell it who is the admin
-    TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID();
-    client->send (msg);
-  }
-
-  emit clientConnected (client);
-}
-
-void KMessageServer::removeClient (KMessageIO* client, bool broken)
-{
-  TQ_UINT32 clientID = client->id();
-  if (!d->mClientList.removeRef (client))
-  {
-    kdError(11001) << k_funcinfo << ": Deleting client that wasn't added before!" << endl;
-    return;
-  }
-
-  // tell everyone about the removed client
-  TQByteArray msg;
-  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_DISCONNECTED) << client->id() << (TQ_INT8)broken;
-  broadcastMessage (msg);
-
-  // If it was the admin, select a new admin.
-  if (clientID == adminID())
-  {
-    if (!d->mClientList.isEmpty())
-      setAdmin (d->mClientList.first()->id());
-    else
-      setAdmin (0);
-  }
-}
-
-void KMessageServer::deleteClients()
-{
-  d->mClientList.clear();
-  d->mAdminID = 0;
-}
-
-void KMessageServer::removeBrokenClient ()
-{
-  if (!sender()->inherits ("KMessageIO"))
-  {
-    kdError (11001) << k_funcinfo << ": sender of the signal was not a KMessageIO object!" << endl;
-    return;
-  }
-
-  KMessageIO *client = (KMessageIO *) sender();
-
-  emit connectionLost (client);
-  removeClient (client, true);
-}
-
-
-void KMessageServer::setMaxClients(int c)
-{
-  d->mMaxClients = c;
-}
-
-int KMessageServer::maxClients() const
-{
-  return d->mMaxClients;
-}
-
-int KMessageServer::clientCount() const
-{
-  return d->mClientList.count();
-}
-
-TQValueList <TQ_UINT32> KMessageServer::clientIDs () const
-{
-  TQValueList <TQ_UINT32> list;
-  for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
-    list.append ((*iter)->id());
-  return list;
-}
-
-KMessageIO* KMessageServer::findClient (TQ_UINT32 no) const
-{
-  if (no == 0)
-    no = d->mAdminID;
-
-  TQPtrListIterator <KMessageIO> iter (d->mClientList);
-  while (*iter)
-  {
-    if ((*iter)->id() == no)
-      return (*iter);
-    ++iter;
-  }
-  return 0;
-}
-
-TQ_UINT32 KMessageServer::adminID () const
-{
-  return d->mAdminID;
-}
-
-void KMessageServer::setAdmin (TQ_UINT32 adminID)
-{
-  // Trying to set the the client that is already admin => nothing to do
-  if (adminID == d->mAdminID)
-    return;
-
-  if (adminID > 0 && findClient (adminID) == 0)
-  {
-    kdWarning (11001) << "Trying to set a new admin that doesn't exist!" << endl;
-    return;
-  }
-
-  d->mAdminID = adminID;
-
-  TQByteArray msg;
-  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID;
-
-  // Tell everyone about the new master
-  broadcastMessage (msg);
-}
-
-
-//------------------------------------------- ID stuff
-
-TQ_UINT32 KMessageServer::uniqueClientNumber() const
-{
-  return d->mUniqueClientNumber++;
-}
-
-// --------------------- Messages ---------------------------
-
-void KMessageServer::broadcastMessage (const TQByteArray &msg)
-{
-  for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
-    (*iter)->send (msg);
-}
-
-void KMessageServer::sendMessage (TQ_UINT32 id, const TQByteArray &msg)
-{
-  KMessageIO *client = findClient (id);
-  if (client)
-    client->send (msg);
-}
-
-void KMessageServer::sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg)
-{
-  for (TQValueListConstIterator <TQ_UINT32> iter = ids.begin(); iter != ids.end(); ++iter)
-    sendMessage (*iter, msg);
-}
-
-void KMessageServer::getReceivedMessage (const TQByteArray &msg)
-{
-  if (!sender() || !sender()->inherits("KMessageIO"))
-  {
-    kdError (11001) << k_funcinfo << ": slot was not called from KMessageIO!" << endl;
-    return;
-  }
-  //kdDebug(11001) << k_funcinfo << ": size=" << msg.size() << endl;
-  KMessageIO *client = (KMessageIO *) sender();
-  TQ_UINT32 clientID = client->id();
-
-  //TQByteArray *ta=new TQByteArray;
-  //ta->duplicate(msg);
-  //d->mMessageQueue.enqueue (new MessageBuffer (clientID, *ta));
-
-  
-  d->mMessageQueue.enqueue (new MessageBuffer (clientID, msg));
-  if (!d->mTimer.isActive())
-    d->mTimer.start(0); // AB: should be , TRUE i guess
-}
-
-void KMessageServer::processOneMessage ()
-{
-  // This shouldn't happen, since the timer should be stopped before. But only to be sure!
-  if (d->mMessageQueue.isEmpty())
-  {
-    d->mTimer.stop();
-    return;
-  }
-  if (d->mIsRecursive)
-  {
-    return;
-  }
-  d->mIsRecursive = true;
-
-  MessageBuffer *msg_buf = d->mMessageQueue.head();
-
-  TQ_UINT32 clientID = msg_buf->id;
-  TQBuffer in_buffer (msg_buf->data);
-  in_buffer.open (IO_ReadOnly);
-  TQDataStream in_stream (&in_buffer);
-
-  TQByteArray out_msg;
-  TQBuffer out_buffer (out_msg);
-  out_buffer.open (IO_WriteOnly);
-  TQDataStream out_stream (&out_buffer);
-
-  bool unknown = false;
-
-  TQByteArray ttt=in_buffer.buffer();
-  TQ_UINT32 messageID;
-  in_stream >> messageID;
-  //kdDebug(11001) << k_funcinfo << ": got message with messageID=" << messageID << endl;
-  switch (messageID)
-  {
-    case RETQ_BROADCAST:
-      out_stream << TQ_UINT32 (MSG_BROADCAST) << clientID;
-      // FIXME, compiler bug?
-      // this should be okay, since TQBuffer is subclass of TQIODevice! :
-      // out_buffer.writeBlock (in_buffer.readAll());
-      TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
-      broadcastMessage (out_msg);
-      break;
-
-    case RETQ_FORWARD:
-      {
-        TQValueList <TQ_UINT32> clients;
-        in_stream >> clients;
-        out_stream << TQ_UINT32 (MSG_FORWARD) << clientID << clients;
-        // see above!
-        TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
-        sendMessage (clients, out_msg);
-      }
-      break;
-
-    case RETQ_CLIENT_ID:
-      out_stream << TQ_UINT32 (ANS_CLIENT_ID) << clientID;
-      sendMessage (clientID, out_msg);
-      break;
-
-    case RETQ_ADMIN_ID:
-      out_stream << TQ_UINT32 (ANS_ADMIN_ID) << d->mAdminID;
-      sendMessage (clientID, out_msg);
-      break;
-
-    case RETQ_ADMIN_CHANGE:
-      if (clientID == d->mAdminID)
-      {
-        TQ_UINT32 newAdmin;
-        in_stream >> newAdmin;
-        setAdmin (newAdmin);
-      }
-      break;
-
-    case RETQ_REMOVE_CLIENT:
-      if (clientID == d->mAdminID)
-      {
-        TQValueList <TQ_UINT32> client_list;
-        in_stream >> client_list;
-        for (TQValueListIterator <TQ_UINT32> iter = client_list.begin(); iter != client_list.end(); ++iter)
-        {
-          KMessageIO *client = findClient (*iter);
-          if (client)
-            removeClient (client, false);
-          else
-            kdWarning (11001) << k_funcinfo << ": removing non-existing clientID" << endl;
-        }
-      }
-      break;
-
-    case RETQ_MAX_NUM_CLIENTS:
-      if (clientID == d->mAdminID)
-      {
-        TQ_INT32 maximum_clients;
-        in_stream >> maximum_clients;
-        setMaxClients (maximum_clients);
-      }
-      break;
-
-    case RETQ_CLIENT_LIST:
-      {
-        out_stream << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
-        sendMessage (clientID, out_msg);
-      }
-      break;
-
-    default:
-      unknown = true;
-  }
-
-  // check if all the data has been used
-  if (!unknown && !in_buffer.atEnd())
-    kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
-
-  emit messageReceived (msg_buf->data, clientID, unknown);
-
-  if (unknown)
-    kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
-
-  // remove the message, since we are ready with it
-  d->mMessageQueue.remove();
-  if (d->mMessageQueue.isEmpty())
-    d->mTimer.stop();
-  d->mIsRecursive = false;
-}
-
-void KMessageServer::Debug()
-{
-   kdDebug(11001) << "------------------ KMESSAGESERVER -----------------------" << endl;
-   kdDebug(11001) << "MaxClients :   " << maxClients() << endl;
-   kdDebug(11001) << "NoOfClients :  " << clientCount() << endl;
-   kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-#include "kmessageserver.moc"
diff --git a/libkdegames/kgame/kmessageserver.h b/libkdegames/kgame/kmessageserver.h
deleted file mode 100644
index 9042fca2..00000000
--- a/libkdegames/kgame/kmessageserver.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KMESSAGESERVER_H__
-#define __KMESSAGESERVER_H__
-
-#include <tqobject.h>
-#include <tqserversocket.h>
-#include <tqstring.h>
-#include <tqvaluelist.h>
-
-class KMessageIO;
-class KMessageServerPrivate;
-
-/**
-  @short A server for message sending and broadcasting, using TCP/IP connections.
-
-  An object of this class listens for incoming connections via TCP/IP sockets and
-  creates KMessageSocket objects for every established connection. It receives
-  messages from the "clients", analyses them and processes an appropriate
-  reaction.
-
-  You can also use other KMessageIO objects with KMessageServer, not only
-  TCP/IP socket based ones. Use addClient to connect via an object of any
-  KMessageIO subclass. (For clients within the same process, you can e.g. use
-  KMessageDirect.) This object already has to be connected.
-
-  The messages are always packages of an arbitrary length. The format of the messages
-  is given below. All the data is stored and received with TQDataStream, to be
-  platform independant.
-
-  Setting up a KMessageServer can be done like this:
-
-  \code
-    KMessageServer *server = new KMessageServer ();
-    server->initNetwork (TCP/IP-Portnumber);
-  \endcode
-
-  Usually that is everything you will do. There are a lot of public methods to
-  administrate the object (maximum number of clients, finding clients, removing
-  clients, setting the admin client, ...), but this functionality can also
-  be done by messages from the clients. So you can administrate the object completely
-  on remote.
-
-  If you want to extend the Server for your own needs (e.g. additional message types),
-  you can either create a subclass and overwrite the method processOneMessage.
-  (But don't forget to call the method of the superclass!) Or you can connect to
-  the signal messageReceived, and analyse the messages there.
-
-  Every client has a unique ID, so that messages can be sent to another dedicated
-  client or a list of clients.
-
-  One of the clients (the admin) has a special administration right. Some of the
-  administration messages can only be used with him. The admin can give the admin
-  status to another client. You can send a message to the admin by using clientID 0.
-  This is always interpreted as the admin client, independant of its real clientID.
-
-  Here is a list of the messages the KMessageServer understands:
-  &lt;&lt; means, the value is inserted into the TQByteArray using TQDataStream. The
-  messageIDs (RETQ_BROADCAST, ...) are of type TQ_UINT32.
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_BROADCAST ) << raw_data
-
-    When the server receives this message, it sends the following message to
-    ALL connected clients (a broadcast), where the raw_data is left unchanged:
-       TQByteArray << static_cast &lt;TQ_UINT32>( MSG_BROADCAST ) << clientID << raw_data
-       TQ_UINT32 clientID; // the ID of the client that sent the broadcast request
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_FORWARD ) << client_list << raw_data
-    TQValueList &lt;TQ_UINT32> client_list; // list of tqreceivers
-
-    When the server receives this message, it sends the following message to
-    the clients in client_list:
-        TQByteArray << static_cast&lt;TQ_UINT32>( MSG_FORWARD ) << senderID << client_list << raw_data
-        TQ_UINT32 senderID;  // the sender of the forward request
-        TQValueList &lt;TQ_UINT32> client_list; // a copy of the receiver list
-
-    Note: Every client receives the message as many times as he is in the client_list.
-    Note: Since the client_list is sent to all the clients, every client can see who else
-          got the message. If you want to prevent this, send a single RETQ_FORWARD
-          message for every receiver.
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_ID )
-
-    When the server receives this message, it sends the following message to
-    the asking client:
-        TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_ID ) << clientID
-        TQ_UINT32 clientID;  // The ID of the client who asked for it
-
-    Note: This answer is also automatically sent to a new connected client, so that he
-          can store his ID. The ID of a client doesn't change during his lifetime, and is
-          unique for this KMessageServer.
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_ID )
-
-    When the server receives this message, it sends the following message to
-    the asking client:
-        TQByteArray << ANS_ADMIN_ID << adminID
-        TQ_UINT32 adminID;  // The ID of the admin
-
-    Note: This answer is also automatically sent to a new connected client, so that he
-          can see if he is the admin or not. It will also be sent to all connected clients
-          when a new admin is set (see RETQ_ADMIN_CHANGE).
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_CHANGE ) << new_admin
-    TQ_UINT32 new_admin;  // the ID of the new admin, or 0 for no admin
-
-    When the server receives this message, it sets the admin to the new ID. If no client
-    with that ID exists, nothing happens. With new_admin == 0 no client is a admin.
-    ONLY THE ADMIN ITSELF CAN USE THIS MESSAGE!
-
-    Note: The server sends a ANS_ADMIN_ID message to every connected client.
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_REMOVE_CLIENT ) << client_list
-    TQValueList &lt;TQ_UINT32> client_list; // The list of clients to be removed
-
-    When the server receives this message, it removes the clients with the ids stored in
-    client_list, disconnecting the connection to them.
-    ONLY THE ADMIN CAN USE THIS MESSAGE!
-
-    Note: If one of the clients is the admin himself, he will also be deleted.
-          Another client (if any left) will become the new admin.
-
-  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_MAX_NUM_CLIENTS ) << maximum_clients
-    TQ_INT32 maximum_clients; // The maximum of clients connected, or infinite if -1
-
-    When the server receives this message, it limits the number of clients to the number given,
-    or sets it unlimited for maximum_clients == -1.
-    ONLY THE ADMIN CAN USE THIS MESSAGE!
-
-    Note: If there are already more clients, they are not affected. It only prevents new Clients
-          to be added. To assure this limit, remove clients afterwards (RETQ_REMOVE_CLIENT)
-
-  - TQByteArray  << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_LIST )
-
-    When the server receives this message, it answers by sending a list of IDs of all the clients
-    that are connected at the moment. So it sends the following message to the asking client:
-        TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_LIST ) << clientList
-        TQValueList &lt;TQ_UINT32> clientList;  // The IDs of the connected clients
-
-    Note: This message is also sent to every new connected client, so that he knows the other
-          clients.
-
-  There are two more messages that are sent from the server to the every client automatically
-  when a new client connects or a connection to a client is lost:
-
-        TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_CONNECTED ) << clientID;
-        TQ_UINT32 clientID;   // the ID of the new connected client
-
-        TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_DISCONNECTED ) << clientID;
-        TQ_UINT32 clientID;   // the ID of the client that lost the connection
-        TQ_UINT8 broken;      // 1 if the network connection was closed, 0 if it was disconnected
-                             // on purpose
-
-
-  @author Andreas Beckermann <b_mann@gmx.de>, Burkhard Lehner <Burkhard.Lehner@gmx.de>
-  @version $Id$
-*/
-class KMessageServer : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-    /**
-      MessageIDs for messages from a client to the message server.
-    */
-    enum { 
-            RETQ_BROADCAST = 1, 
-            RETQ_FORWARD,
-            RETQ_CLIENT_ID,
-            RETQ_ADMIN_ID,
-            RETQ_ADMIN_CHANGE,
-            RETQ_REMOVE_CLIENT,
-            RETQ_MAX_NUM_CLIENTS,
-            RETQ_CLIENT_LIST,
-            RETQ_MAX_REQ = 0xffff };
-
-    /**
-     * MessageIDs for messages from the message server to a client.
-     **/
-    enum {
-            MSG_BROADCAST = 101, 
-            MSG_FORWARD, 
-            ANS_CLIENT_ID, 
-            ANS_ADMIN_ID, 
-            ANS_CLIENT_LIST,
-            EVNT_CLIENT_CONNECTED, 
-            EVNT_CLIENT_DISCONNECTED,
-            EVNT_MAX_EVNT = 0xffff
-    };
-
-    /**
-     * Create a KGameNetwork object
-     **/
-    KMessageServer(TQ_UINT16 cookie = 42, TQObject* parent = 0);
-
-    ~KMessageServer();
-
-    /**
-     * Gives debug output of the game status
-     **/
-    virtual void Debug();
-
-//---------------------------------- TCP/IP server stuff
-
-    /**
-     * Starts the Communication server to listen for incoming TCP/IP connections.
-     *
-     * @param port The port on which the service is offered, or 0 to let the
-     * system pick a free port
-     * @return true if it worked
-    */
-    bool initNetwork (TQ_UINT16 port = 0);
-
-    /**
-     * Returns the TCP/IP port number we are listening to for incoming connections.
-     * (This has to be known by other clients so that they can connect to us. It's
-     * especially necessary if you used 0 as port number in initNetwork().
-     * @return the port number
-     **/
-    TQ_UINT16 serverPort () const;
-
-    /**
-     * Stops listening for connections. The already running connections are
-     * not affected.
-     * To listen for connections again call initNetwork again.
-     **/
-    void stopNetwork();
-
-    /**
-     * Are we still offer offering server connections?
-     * @return true, if we are still listening to connections requests
-     **/
-    bool isOfferingConnections() const;
-
-//---------------------------------- adding / removing clients
-
-public slots:
-    /**
-     * Adds a new @ref KMessageIO object to the communication server. This "client"
-     * gets a unique ID.
-     *
-     * This slot method is automatically called for any incoming TCP/IP
-     * connection. You can use it to add other types of connections, e.g.
-     * local connections (KMessageDirect) to the server manually.
-     *
-     * NOTE: The @ref KMessageIO object gets owned by the KMessageServer,
-     * so don't delete or manipulate it afterwards. It is automatically deleted
-     * when the connection is broken or the communication server is deleted.
-     * So, add a @ref KMessageIO object to just ONE KMessageServer.
-     **/
-    void addClient (KMessageIO *);
-
-    /**
-     * Removes the KMessageIO object from the client list and deletes it.
-     * This destroys the connection, if it already was up.
-     * Does NOT emit connectionLost.
-     * Sends an info message to the other clients, that contains the ID of
-     * the removed client and the value of the parameter broken.
-     *
-     * @param io the object to delete and to remove from the client list
-     * @param broken true if the client has lost connection
-     * Mostly used internally. You will probably not need this.
-     **/
-    void removeClient (KMessageIO *io, bool broken);
-
-    /**
-      Deletes all connections to the clients.
-    */
-    void deleteClients();
-
-private slots:
-    /**
-     * Removes the sender object of the signal that called this slot. It is
-     * automatically connected to @ref KMessageIO::connectionBroken.
-     * Emits @ref connectionLost (KMessageIO*), and deletes the @ref KMessageIO object.
-     * Don't call it directly!
-     **/
-    void removeBrokenClient ();
-
-public:
-    /**
-     * sets the maximum number of clients which can connect.
-     * If this number is reached, no more clients can be added.
-     * Setting this number to -1 means unlimited number of clients.
-     *
-     * NOTE: Existing connections are not affected.
-     * So, clientCount > maxClients is possible, if there were already
-     * more clients than allowed before reducing this value.
-     *
-     * @param maxnumber the number of clients
-     **/
-    void setMaxClients(int maxnumber);
-
-    /**
-     * returns the maximum number of clients
-     *
-     * @return the number of clients
-     **/
-    int maxClients() const;
-
-    /**
-     * returns the current number of connected clients.
-     *
-     * @return the number of clients
-     **/
-    int clientCount() const;
-
-    /**
-     * returns a list of the unique IDs of all clients.
-     **/
-    TQValueList <TQ_UINT32> clientIDs() const;
-
-    /**
-     * Find the @ref KMessageIO object to the given client number.
-     * @param no the client number to look for, or 0 to look for the admin
-     * @return address of the client, or 0 if no client with that number exists
-     **/
-    KMessageIO *findClient (TQ_UINT32 no) const;
-
-    /**
-     * Returns the clientID of the admin, if there is a admin, 0 otherwise.
-     *
-     * NOTE: Most often you don't need to know that id, since you can
-     * use clientID 0 to specify the admin.
-     **/
-    TQ_UINT32 adminID() const;
-
-    /**
-     * Sets the admin to a new client with the given ID.
-     * The old admin (if existed) and the new admin will get the ANS_ADMIN message.
-     * If you use 0 as new adminID, no client will be admin.
-     **/
-    void setAdmin (TQ_UINT32 adminID);
-
-
-//------------------------------ ID stuff
-
-    /*
-     * The unique ID of this game
-     *
-     * @return int id
-     **/
-//    int gameId() const;
-
-    /*
-     * Application cookie. this idendifies the game application. It
-     * help to distinguish between e.g. KPoker and KWin4
-     *
-     * @return the application cookie
-     **/
-//    int cookie() const;
-
-//------------------------------ Message stuff
-
-public:
-    /**
-     * Sends a message to all connected clients.
-     * The message is NOT translated in any way. This method calls
-     * @ref KMessageIO::send for every client added.
-     **/
-    virtual void broadcastMessage (const TQByteArray &msg);
-
-    /**
-     * Sends a message to a single client with the given ID.
-     * The message is NOT translated in any way.
-     * If no client with the given id exists, nothing is done.
-     * This is just a convenience method. You could also call
-     * @ref findClient (id)->send(msg) manually, but this method checks for
-     * errors.
-     **/
-    virtual void sendMessage (TQ_UINT32 id, const TQByteArray &msg);
-
-    /**
-     * Sends a message to a list of clients. Their ID is given in ids. If
-     * a client id is given more than once in the list, the message is also
-     * sent several times to that client.
-     * This is just a convenience method. You could also iterate over the
-     * list of IDs.
-     **/
-    virtual void sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg);
-
-protected slots:
-    /**
-     * This slot receives all the messages from the @ref KMessageIO::received signals.
-     * It stores the messages in a queue. The messages are later taken out of the queue
-     * by @ref getReceivedMessage.
-     *
-     * NOTE: It is important that this slot may only be called from the signal
-     * @ref KMessageIO::received, since the sender() object is used to find out
-     * the client that sent the message!
-     **/
-    virtual void getReceivedMessage (const TQByteArray &msg);
-
-    /**
-     * This slot is called whenever there are elements in the message queue. This queue
-     * is filled by @ref getReceivedMessage.
-     * This slot takes one message out of the queue and analyses processes it,
-     * if it recognizes it. (See message types in the description of the class.)
-     * After that, the signal @ref messageReceived is emitted. Connect to that signal if
-     * you want to process other types of messages.
-     **/
-    virtual void processOneMessage ();
-
-//---------------------------- Signals
-
-signals:
-    /**
-     * A new client connected to the game
-     * @param client the client object that connected
-     **/
-    void clientConnected (KMessageIO *client);
-
-    /**
-     * A network connection got broken. Note that the client will automatically get deleted
-     * after this signal is emitted. The signal is not emitted when the client was removed
-     * regularly.
-     *
-     * @param client the client which left the game
-     **/
-    void connectionLost (KMessageIO *client);
-
-    /**
-     * This signal is always emitted when a message from a client is received.
-     *
-     * You can use this signal to extend the communication server without subclassing.
-     * Just connect to this signal and analyse the message, if unknown is true.
-     * If you recognize a message and process it, set unknown to false, otherwise
-     * a warning message is printed.
-     *
-     * @param data the message data
-     * @param clientID the ID of the KMessageIO object that received the message
-     * @param unknown true, if the message type is not known by the KMessageServer
-     **/
-    void messageReceived (const TQByteArray &data, TQ_UINT32 clientID, bool &unknown);
-
-protected:
-    /**
-     * @return A unique number which can be used as the id of a @ref KMessageIO. It is
-     * incremented after every call so if you need the id twice you have to save
-     * it anywhere. It's currently used to initialize newly connected clints only.
-     **/
-    TQ_UINT32 uniqueClientNumber() const;
-
-private:
-    KMessageServerPrivate* d;
-};
-
-
-/**
-  Internal class of KMessageServer. Creates a server socket and waits for
-  connections.
-
-  NOTE: This has to be here in the header file, because it is a subclass from
-  TQObject and has to go through the tqmoc.
-
-  @short An internal class for KServerSocket
-  @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
-*/
-class KMessageServerSocket : public TQServerSocket
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-  KMessageServerSocket (TQ_UINT16 port, TQObject *parent = 0);
-  ~KMessageServerSocket ();
-
-  void newConnection (int socket);
-
-signals:
-  void newClientConnected (KMessageIO *client);
-};
-
-
-
-#endif
diff --git a/libkdegames/kgame/kmessageserver.png b/libkdegames/kgame/kmessageserver.png
deleted file mode 100644
index 07fba6c5..00000000
Binary files a/libkdegames/kgame/kmessageserver.png and /dev/null differ
diff --git a/libkdegames/kgame/kplayer.cpp b/libkdegames/kgame/kplayer.cpp
deleted file mode 100644
index 965f5e83..00000000
--- a/libkdegames/kgame/kplayer.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-
-#include "kgame.h"
-#include "kgameio.h"
-#include "kplayer.h"
-#include "kgamemessage.h"
-#include "kgamepropertyhandler.h"
-
-#include <kdebug.h>
-#include <klocale.h>
-
-#include <tqbuffer.h>
-
-#include <stdio.h>
-#include <assert.h>
-
-#define KPLAYER_LOAD_COOKIE 7285
-
-class KPlayerPrivate
-{
-public:
-   KPlayerPrivate()
-   {
-      mNetworkPlayer = 0;
-   }
-
-   TQ_UINT32 mId;
-   bool mVirtual; // virtual player
-   int mPriority; // tag for replacement
-
-   KPlayer* mNetworkPlayer; // replacement player
-
-   KGamePropertyHandler mProperties;
-
-// Playerdata
-   KGamePropertyTQString mName;
-   KGamePropertyTQString mGroup;
-};
-
-KPlayer::KPlayer() : TQObject(0,0)
-{
- init();
-}
-
-KPlayer::KPlayer(KGame* game) : TQObject(0, 0)
-{
- init();
- game->addPlayer(this);
-}
-
-void KPlayer::init()
-{
-// note that NO KGame object exists here! so we cannot use KGameProperty::send!
-   kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)="<<sizeof(KPlayer) << endl;
-   kdDebug(11001) << "sizeof(m_Group)="<<sizeof(d->mGroup)<<endl;
-   d = new KPlayerPrivate;
-
-   d->mProperties.registerHandler(KGameMessage::IdPlayerProperty,
-                                  this,TQT_SLOT(sendProperty(int, TQDataStream&, bool*)),
-                                       TQT_SLOT(emitSignal(KGamePropertyBase *)));
-   d->mVirtual=false;
-   mActive=true;
-   mGame=0;
-   d->mId=0; // "0" is always an invalid ID!
-   d->mPriority=0;
-   // I guess we cannot translate the group otherwise no
-   // international conenctions are possible
-
-   mUserId.registerData(KGamePropertyBase::IdUserId, this, i18n("UserId"));
-   mUserId.setLocal(0);
-   d->mGroup.registerData(KGamePropertyBase::IdGroup, this, i18n("Group"));
-   d->mGroup.setLocal(i18n("default"));
-   d->mName.registerData(KGamePropertyBase::IdName, this, i18n("Name"));
-   d->mName.setLocal(i18n("default"));
-
-   mAsyncInput.registerData(KGamePropertyBase::IdAsyncInput, this, i18n("AsyncInput"));
-   mAsyncInput.setLocal(false);
-   mMyTurn.registerData(KGamePropertyBase::IdTurn, this, i18n("myTurn"));
-   mMyTurn.setLocal(false);
-   mMyTurn.setEmittingSignal(true);
-   mMyTurn.setOptimized(false);
-}
-
-KPlayer::~KPlayer()
-{
-  kdDebug(11001) << k_funcinfo << ": this=" << this <<", id=" << this->id() << endl;
-
-  // Delete IODevices
-  KGameIO *input;
-  while((input=mInputList.first()))
-  {
-    delete input;
-  }
-  if (game())
-  {
-    game()->playerDeleted(this);
-  }
-
-// note: mProperties does not use autoDelete or so - user must delete objects
-// himself
-  d->mProperties.clear();
-  delete d;
-//  kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-bool KPlayer::forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver,TQ_UINT32 sender)
-{
-  if (!isActive())
-  {
-    return false;
-  }
-  if (!game())
-  {
-    return false;
-  }
-  kdDebug(11001) << k_funcinfo << ": to game sender="<<sender<<"" << "recv="<<receiver <<"msgid="<<msgid << endl;
-  return game()->sendSystemMessage(msg,msgid,receiver,sender);
-}
-
-bool KPlayer::forwardInput(TQDataStream &msg,bool transmit,TQ_UINT32 sender)
-{
-  if (!isActive())
-  {
-    return false;
-  }
-  if (!game())
-  {
-    return false;
-  }
-
-  kdDebug(11001) << k_funcinfo << ": to game playerInput(sender="<<sender<<")" << endl;
-  if (!asyncInput() && !myTurn())
-  {
-    kdDebug(11001) << k_funcinfo << ": rejected cause it is not our turn" << endl;
-    return false;
-  }
-
-  // AB: I hope I remember the usage correctly:
-  // this function is called twice (on sender side) - once with transmit = true
-  // where it sends the input to the comserver and once with transmit = false
-  // where it really looks at the input
-  if (transmit)
-  {
-    kdDebug(11001) << "indirect playerInput" << endl;
-    return game()->sendPlayerInput(msg,this,sender);
-  }
-  else
-  {
-    kdDebug(11001) << "direct playerInput" << endl;
-    return game()->systemPlayerInput(msg,this,sender);
-  }
-}
-
-void KPlayer::setId(TQ_UINT32 newid)
-{
-  // Needs to be after the sendProcess
-  d->mId=newid;
-}
-
-
-void KPlayer::setGroup(const TQString& group)
-{ d->mGroup = group; }
-
-const TQString& KPlayer::group() const
-{ return d->mGroup.value(); }
-
-void KPlayer::setName(const TQString& name)
-{ d->mName = name; }
-
-const TQString& KPlayer::name() const
-{ return d->mName.value(); }
-
-TQ_UINT32 KPlayer::id() const
-{ return d->mId; }
-
-KGamePropertyHandler * KPlayer::dataHandler()
-{ return &d->mProperties; }
-
-void KPlayer::setVirtual(bool v)
-{ d->mVirtual = v; }
-
-bool KPlayer::isVirtual() const
-{ return d->mVirtual;}
-
-void KPlayer::setNetworkPlayer(KPlayer* p)
-{ d->mNetworkPlayer = p; }
-
-KPlayer* KPlayer::networkPlayer() const
-{ return d->mNetworkPlayer; }
-
-int KPlayer::networkPriority() const
-{ return d->mPriority; }
-
-void KPlayer::setNetworkPriority(int p)
-{ d->mPriority = p; }
-
-bool KPlayer::addGameIO(KGameIO *input)
-{
-  if (!input)
-  {
-    return false;
-  }
-  mInputList.append(input); 
-  input->initIO(this); // set player and init device
-  return true;
-}
-
-// input=0, remove all
-bool KPlayer::removeGameIO(KGameIO *targetinput,bool deleteit)
-{
-  kdDebug(11001) << k_funcinfo << ": " << targetinput << " delete=" << deleteit<< endl;
-  bool result=true;
-  if (!targetinput) // delete all
-  {
-    KGameIO *input;
-    while((input=mInputList.first()))
-    {
-      if (input) removeGameIO(input,deleteit);
-    }
-  }
-  else
-  {
-//    kdDebug(11001) << "remove IO " << targetinput << endl;
-    if (deleteit)
-    {
-      delete targetinput;
-    }
-    else
-    {
-      targetinput->setPlayer(0);
-      result=mInputList.remove(targetinput);
-    }
-  }
-  return result;
-}
-
-KGameIO * KPlayer::findRttiIO(int rtti) const
-{
-  TQPtrListIterator<KGameIO> it(mInputList);
-  while (it.current())
-  {
-    if (it.current()->rtti() == rtti)
-    {
-      return it.current();
-    }
-    ++it;
-  }
-  return 0;
-}
-
-int KPlayer::calcIOValue()
-{
-  int value=0;
-  TQPtrListIterator<KGameIO> it(mInputList);
-  while (it.current())
-  {
-    value|=it.current()->rtti();
-    ++it;
-  }
-  return value;
-}
-
-bool KPlayer::setTurn(bool b, bool exclusive)
-{
-  kdDebug(11001) << k_funcinfo << ": " << id() << " (" << this << ") to " << b << endl;
-  if (!isActive())
-  {
-    return false;
-  }
-
-  // if we get to do an exclusive turn all other players are disallowed
-  if (exclusive && b && game())
-  {
-     KPlayer *player;
-     KGame::KGamePlayerList *list=game()->playerList();
-     for ( player=list->first(); player != 0; player=list->next() )
-     {
-       if (player==this)
-       {
-         continue;
-       }
-       player->setTurn(false,false);
-     }
-  }
-
-  // Return if nothing changed
-  mMyTurn = b;
-
-  return true;
-}
-
-bool KPlayer::load(TQDataStream &stream)
-{
-  TQ_INT32 id,priority;
-  stream >> id >> priority;
-  setId(id);
-  setNetworkPriority(priority);
-
-  // Load Player Data
-  //FIXME: maybe set all properties setEmitSignal(false) before?
-  d->mProperties.load(stream);
-
-  TQ_INT16 cookie;
-  stream >> cookie;
-  if (cookie==KPLAYER_LOAD_COOKIE)
-  {
-      kdDebug(11001) << "   Player loaded propertly"<<endl;
-  }
-  else
-  {
-      kdError(11001) << "   Player loading error. probably format error"<<endl;
-  }
-
-  // emit signalLoad(stream);
-  return true;
-}
-
-bool KPlayer::save(TQDataStream &stream)
-{
-  stream << (TQ_INT32)id() << (TQ_INT32)networkPriority();
-
-  d->mProperties.save(stream);
-
-  stream << (TQ_INT16)KPLAYER_LOAD_COOKIE;
-
-  //emit signalSave(stream);
-  return true;
-}
-
-
-void KPlayer::networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender)
-{
-  //kdDebug(11001) << k_funcinfo ": msgid=" << msgid << " sender=" << sender << " we are=" << id() << endl;
-  // PlayerProperties processed
-  bool issender;
-  if (game())
-  {
-    issender=sender==game()->gameId();
-  }
-  else
-  {
-    issender=true;
-  }
-  if (d->mProperties.processMessage(stream,msgid,issender))
-  {
-	return ;
-  }
-  switch(msgid)
-  {
-    case KGameMessage::IdPlayerInput:
-      {
-        kdDebug(11001) << k_funcinfo << ": Got player move "
-	        << "KPlayer (virtual) forwards it to the game object" << endl;
-        forwardInput(stream,false);
-      }
-    break;
-    default:
-        emit signalNetworkData(msgid - KGameMessage::IdUser,
-	        ((TQBuffer*)stream.device())->readAll(),sender,this);
-        kdDebug(11001) << k_funcinfo << ": "
-	        << "User data msgid " << msgid << endl;
-    break;
-  }
-
-}
-
-KGamePropertyBase* KPlayer::findProperty(int id) const
-{
-  return d->mProperties.find(id);
-}
-
-bool KPlayer::addProperty(KGamePropertyBase* data)
-{
-  return d->mProperties.addProperty(data);
-}
-
-void KPlayer::sendProperty(int msgid, TQDataStream& stream, bool* sent)
-{
-  if (game())
-  {
-    bool s = game()->sendPlayerProperty(msgid, stream, id());
-    if (s)
-    {
-      *sent = true;
-    }
-  }
-}
-
-void KPlayer::emitSignal(KGamePropertyBase *me)
-{
-  // Notify KGameIO (Process) for a new turn
-  if (me->id()==KGamePropertyBase::IdTurn)
-  {
-    //kdDebug(11001) << k_funcinfo << ": for KGamePropertyBase::IdTurn " << endl;
-    TQPtrListIterator<KGameIO> it(mInputList);
-    while (it.current())
-    {
-      it.current()->notifyTurn(mMyTurn.value());
-      ++it;
-    }
-  }
-  emit signalPropertyChanged(me,this);
-}
-
-// --------------------- DEBUG --------------------
-void KPlayer::Debug()
-{
-   kdDebug(11001) << "------------------- KPLAYER -----------------------" << endl;
-   kdDebug(11001) << "this:    " << this << endl;
-   kdDebug(11001) << "rtti:    " << rtti() << endl;
-   kdDebug(11001) << "id  :    " << id() << endl;
-   kdDebug(11001) << "Name :   " << name() << endl;
-   kdDebug(11001) << "Group:   " << group() << endl;
-   kdDebug(11001) << "Async:   " << asyncInput() << endl;
-   kdDebug(11001) << "myTurn:  " << myTurn() << endl;
-   kdDebug(11001) << "Virtual: " << isVirtual() << endl;
-   kdDebug(11001) << "Active:  " << isActive() << endl;
-   kdDebug(11001) << "Priority:" << networkPriority() << endl;
-   kdDebug(11001) << "Game   : " << game() << endl;
-   kdDebug(11001) << "#IOs:    " << mInputList.count() << endl;
-   kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-#include "kplayer.moc"
diff --git a/libkdegames/kgame/kplayer.h b/libkdegames/kgame/kplayer.h
deleted file mode 100644
index 910781f3..00000000
--- a/libkdegames/kgame/kplayer.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KPLAYER_H_
-#define __KPLAYER_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <tqptrlist.h>
-
-#include "kgameproperty.h"
-#include <kdemacros.h>
-
-class KGame;
-class KGameIO;
-class KGamePropertyBase;
-class KGamePropertyHandler;
-
-class KPlayerPrivate;
-
-/**
- * @short Base class for a game player
- *
- * The KPlayer class is the central player object. It holds
- * information about the player and is responsible for any
- * input the player does. For this arbitrary many KGameIO
- * modules can be plugged into it. Main features are:
- * - Handling of IO devices
- * - load/save (mostly handled by KGamePropertyHandler)
- * - Turn handling (turn based, asynchronous)
- *
- * A KPlayer depends on a KGame object. Call KGame::addPlayer() to plug
- * a KPlayer into a KGame object. Note that you cannot do much with a
- * KPlayer object before it has been plugged into a KGame. This is because
- * most properties of KPlayer are KGameProperty which need to send messages
- * through a KGame object to be changed. 
- *
- * A KGameIO represents the input methods of a player and you should make all
- * player inputs through it. So call something like playerInput->move(4);
- * instead which should call KGameIO::sendInput() to actually move. This way
- * you gain a *very* big advantage: you can exchange a KGameIO whenever you
- * want! You can e.g. remove the KGameIO of a local (human) player and just
- * replace it by a computerIO on the fly! So from that point on all playerInputs
- * are done by the computerIO instead of the human player. You also can replace
- * all network players by computer players when the network connection is broken
- * or a player wants to quit. 
- * So remember: use KGameIO whenever possible! A KPlayer should just
- * contain all data of the player (KGameIO must not!) and several common
- * functions which are shared by all of your KGameIOs.
- *
- */
-class KDE_EXPORT KPlayer : public TQObject
-{
-  Q_OBJECT
-  TQ_OBJECT
-
-public:
-      typedef TQPtrList<KGameIO> KGameIOList;
-
-      // KPlayer(KGame *,KGameIO * input=0);
-      /**
-       * Create a new player object. It will be automatically
-       * deleted if the game it belongs to is deleted.
-       */
-      KPlayer();
-
-      /**
-       * Create a new player object. It will be automatically
-       * deleted if the game it belongs to is deleted. This constructor
-       * automatically adds the player to the game using KGame::addPlayer()
-       */
-      KPlayer(KGame* game);
-
-      virtual ~KPlayer();
-
-      /**
-      * The idendification of the player. Overwrite this in
-      * classes inherting KPlayer to run time identify them.
-      *
-      * @return 0 for default KPlayer.
-      */
-      virtual int rtti() const {return 0;}
-
-      /**
-      * Gives debug output of the game status
-      */
-      void Debug();
-
-      // properties
-      /**
-       * Returns a list of input devices 
-       *
-       * @return list of devices
-       */
-      KGameIOList *ioList() {return &mInputList;}
-
-      /**
-       * sets the game the player belongs to. This
-       * is usually automatically done when adding a
-       * player
-       *
-       * @param game the game
-       */
-      void setGame(KGame *game) {mGame=game;}
-
-      /**
-       * Query to which game the player belongs to
-       *
-       * @return the game
-       */
-      KGame *game() const {return mGame;}
-
-      /**
-       * Set whether this player can make turns/input
-       * all the time (true) or only when it is its
-       * turn (false) as it is used in turn based games
-       *
-       * @param a async=true turn based=false
-       */
-      void setAsyncInput(bool a) {mAsyncInput = a;}
-
-      /**
-       * Query whether this player does asynchronous 
-       * input
-       *
-       * @return true/false
-       */
-      bool asyncInput() const {return mAsyncInput.value();}
-
-      /**
-       * Is this player a virtual player, ie is it 
-       * created by mirroring a real player from another
-       * network game. This mirroring is done autmatically
-       * as soon as a network connection is build and it affects
-       * all players regardless what type
-       *
-       * @return true/false
-       */
-      bool isVirtual() const;
-
-      /**
-       * @internal
-       * Sets whether this player is virtual. This is internally
-       * called
-       *
-       * @param v virtual true/false
-       */
-      void setVirtual(bool v);
-
-      /**
-       * Is this player an active player. An player is usually
-       * inactivated if it is replaced by a network connection.
-       * But this could also be called manually
-       *
-       * @return true/false
-       */
-      bool isActive() const {return mActive;}
-
-      /**
-       * Set an player as active (true) or inactive (false)
-       *
-       * @param v true=active, false=inactive
-       */
-      void setActive(bool v) {mActive=v;}
-
-      /**
-       * Returns the id of the player
-       *
-       * @return the player id
-       */
-      TQ_UINT32 id() const; 
-
-      /* Set the players id. This is done automatically by
-       * the game object when adding a new player!
-       *
-       * @param i the player id
-       */
-      void setId(TQ_UINT32 i);
-
-      /**
-       * Returns the user defined id of the player
-       * This value can be used arbitrary by you to
-       * have some user idendification for your player,
-       * e.g. 0 for a white chess player, 1 for a black 
-       * one. This value is more reliable than the player 
-       * id whcih can even change when you make a network 
-       * connection.
-       *
-       * @return the user defined player id
-       */
-      int userId() const {return mUserId.value();} 
-
-      /* Set the user defined players id.
-       *
-       * @param i the user defined player id
-       */
-      void setUserId(int i) {mUserId = i;}
-
-      /**
-       * Returns whether this player can be replaced by a network
-       * connection player. The name of this function can be 
-       * improved ;-) If you do not overwrite the function to 
-       * select what players shall play in a network the KGame
-       * does an automatic selection based on the networkPriority
-       * This is not a terrible important function at the moment.
-       *
-       * @return true/false
-       */
-      int networkPriority() const;
-
-      /**
-       * Set whether this player can be replaced by a network
-       * player. There are to possible games. The first type
-       * of game has arbitrary many players. As soon as a network
-       * players connects the game runs with more players (not tagged
-       * situation). The other type is e.g. games like chess which
-       * require a constant player number. In a network game situation
-       * you would tag one or both players of all participants. As
-       * soon as the connect the tagged player will then be replaced
-       * by the network partner and it is then controlled over the network.
-       * On connection loss the old situation is automatically restored.
-       *
-       * The name of this function can be improved;-)
-       *
-       * @param b should this player be tagged
-       */
-      void setNetworkPriority(int b);
-
-      /**
-       * Returns the player which got inactivated to allow
-       * this player to be set up via network. Mostly internal
-       * function
-       */
-      KPlayer *networkPlayer() const;
-
-      /**
-       * Sets this network player replacement. Internal stuff 
-       */
-      void setNetworkPlayer(KPlayer *p);
-
-      // A name and group the player belongs to
-      /**
-       * A group the player belongs to. This
-       * Can be set arbitrary by you.
-       */
-      void setGroup(const TQString& group);
-
-      /**
-       * Query the group the player belongs to.
-       */
-      virtual const TQString& group() const;
-
-      /**
-       * Sets the name of the player.
-       * This can be chosen arbitrary.
-       * @param name The player's name
-       */
-      void setName(const TQString& name);
-
-      /**
-       * @return The name of the player.
-       */
-      virtual const TQString& name() const;
-
-
-      // set devices
-      /**
-       * Adds an IO device for the player. Possible KGameIO devices
-       * can either be taken from the existing ones or be self written.
-       * Existing are e.g. Keyboard, Mouse, Computerplayer
-       *
-       * @param input the inut device
-       * @return true if ok
-       */
-      bool addGameIO(KGameIO *input);
-
-      /**
-       * remove (and delete) a game IO device
-       *
-       * The remove IO(s) is/are deleted by default. If
-       * you do not want this set the parameter deleteit to false
-       *
-       * @param input the device to be removed or 0 for all devices
-       * @param deleteit true (default) to delete the device otherwisse just remove it
-       * @return true on ok
-       */
-      bool removeGameIO(KGameIO *input=0,bool deleteit=true);
-
-      /**
-       * Finds the KGameIO devies with the given rtti code.
-       * E.g. find the mouse or network device
-       *
-       * @param rtti the rtti code to be searched for
-       * @return the KGameIO device
-       */
-      KGameIO *findRttiIO(int rtti) const;
-
-      /**
-       * Checks whether this player has a IO device of the
-       * given rtti type
-       *
-       * @param rtti the rtti typed to be checked for
-       * @return true if it exists
-       */
-      bool hasRtti(int rtti) const  {return findRttiIO(rtti)!=0;}
-
-      // Message exchange
-      /**
-       * Forwards input to the game object..internal use only
-       *
-       * This method is used by KGameIO::sendInput(). Use that function
-       * instead to send player inputs!
-       *
-       * This function forwards a player input (see KGameIO classes) to the
-       * game object, see KGame, either to KGame::sendPlayerInput() (if
-       * transmit=true, ie the message has just been created) or to
-       * KGame::playerInput() (if player=false, ie the message *was* sent through
-       * KGame::sendPlayerInput).
-       */
-      virtual bool forwardInput(TQDataStream &msg,bool transmit=true, TQ_UINT32 sender=0);
-
-      /**
-       * Forwards Message to the game object..internal use only
-       */
-      virtual bool forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver=0,TQ_UINT32 sender=0);
-
-      // Game logic
-      /**
-       * is it my turn to go
-       *
-       * @return true/false
-       */
-      bool myTurn() const {return mMyTurn.value();}
-
-      /**
-       * Sets whether this player is the next to turn.
-       * If exclusive is given all other players are set
-       * to setTurn(false) and only this player can move
-       *
-       * @param b true/false
-       * @param exclusive true (default)/ false
-       * @return should be void
-       */
-      bool setTurn(bool b,bool exclusive=true);
-
-
-      // load/save
-     /**
-      * Load a saved player, from file OR network. By default all 
-      * KGameProperty objects in the dataHandler of this player are loaded
-      * and saved when using load or save. If you need to save/load more
-      * you have to replace this function (and save). You will probably
-      * still want to call the default implementation additionally!
-      * 
-      * @param stream a data stream where you can stream the player from
-      *
-      * @return true?
-      */
-      virtual bool load(TQDataStream &stream);
-
-     /**
-      * Save a player to a file OR to network. See also load
-      *
-      * @param stream a data stream to load the player from
-      *
-      * @return true?
-      */
-      virtual bool save(TQDataStream &stream);
-
-      /**
-       * Receives a message
-       * @param msgid The kind of the message. See messages.txt for further
-       * information
-       * @param stream The message itself
-       * @param sender 
-       **/
-      void networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender);
-
-      /**
-       * Searches for a property of the player given its id. 
-       * @param id The id of the property
-       * @return The property with the specified id
-       **/
-      KGamePropertyBase* findProperty(int id) const;
-
-      /**
-       * Adds a property to a player. You would add all
-       * your player specific game data as KGameProperty and
-       * they are automatically saved and exchanged over network.
-       *
-       * @param data The property to be added. Must have an unique id!
-       * @return false if the given id is not valid (ie another property owns
-       * the id) or true if the property could be added successfully
-       **/
-      bool addProperty(KGamePropertyBase* data);
-
-      /**
-       * Calculates a checksum over the IO devices. Can be used to
-       * restore the IO handlers. The value returned is the 'or'ed
-       * value of the KGameIO rtti's. 
-       * this is itnernally used for saving and restorign a player.
-       */
-      int calcIOValue();
-
-       /**
-        * @return the property handler
-        */
-       KGamePropertyHandler* dataHandler();
-
-signals:
-      /**
-       *  The player object got a message which was targeted
-       *  at it but has no default method to process it. This
-       *  means probably a user message. Connecting to this signal
-       *  allowed to process it.
-       */
-       void signalNetworkData(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer *me);
-
-       /**
-        * This signal is emmited if a player property changes its value and
-        * the property is set to notify this change. This is an
-        * important signal as you should base the actions on a reaction
-        * to this property changes.
-        */
-       void signalPropertyChanged(KGamePropertyBase *property,KPlayer *me);
-
-protected slots:
-      /**
-       * Called by KGameProperty only! Internal function!
-       **/
-      void sendProperty(int msgid, TQDataStream& stream, bool* sent);
-      /**
-       * Called by KGameProperty only! Internal function!
-       **/
-      void emitSignal(KGamePropertyBase *me);
-
-
-private:
-      void init();
-
-private:
-      KGame *mGame;
-      bool mActive;      // active player
-      KGameIOList mInputList;
-
-      // GameProperty // AB: I think we can't move them to KPlayerPrivate - inline
-      // makes sense here
-      KGamePropertyBool mAsyncInput;  // async input allowed
-      KGamePropertyBool mMyTurn;      // Is it my turn to play (only useful if not async)?
-      KGamePropertyInt  mUserId;      // a user defined id
-
-      KPlayerPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/libkdegames.html b/libkdegames/kgame/libkdegames.html
deleted file mode 100644
index a715a239..00000000
--- a/libkdegames/kgame/libkdegames.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<html>
-  <head>
-    <title>Documentation for libtdegames</title>
-    <meta content="">
-    <style></style>
-  </head>
-  <body>
-    <H1>Documentation for the classes in libtdegames</H1>
-<!-------------------------------------------------------------------------------->
-    <H3>Design Principles</H3>
-    The library <em>tdegames</em> contains a collection of classes that can be used
-    to develop games using the KDE environment very easily. There are a few
-    principles that were used when developing the library:<P>
-
-    <UL>
-      <LI><b>usable for a big variety of games</b><br>
-          The class <em>KGame</em> provides many features that are needed in many games.
-          It can be used for board games, card games, maze games, simulation games, strategy games and
-          many more.<br>
-          It does not (yet) include special features for realtime games, but can be used there, too.
-      <LI><b>features one-player and multi-player games</b></br>
-          A game developed with this library can easily support any number of simultaneous players.
-          So use it for one-player games (like Tetris or KSame), for two-player games (like TicTacToe
-          or chess) or for games with an arbitrary number of players.
-      <LI><b>computer players can easily be developed</b><br>
-          The class <em>KPlayer</em> represents an abstract player in a game. This can be a
-          human player that gets the input from the mouse or the keyboard. Or it can be a computer
-          player that makes moves by random or with artificial intelligence. All this can be achieved
-          subclassing KPlayer.
-      <LI><b>support for network games transparently</b><br>
-          The class <em>KGame</em> contains lots of features for network game support. Developing
-          a network game using a TCP/IP connection is very easy this way. But the default
-          case is still the local game. So the user should not need to connect to the internet
-          or to select a game server to play a game.
-      <LI><b>support for turn based and for asynchronous games</b><br>
-          You can use this library for turn based games, when only one player can make a move at a time
-          (like most bord games or card games), but also for asynchronous games, when every player can
-          make a move any time (like many action games).
-    </UL>
-<!-------------------------------------------------------------------------------->
-    <H3>The central game class: <em>KGame</em></H3>
-
-    When you want to develop your own KDE game using the KDE games library, you most likely want
-    to use the <em>KGame</em> class. There are two possible ways to extend it to your own needs:
-    Create a subclass and overwrite the virtual methods, or simply create an instance of KGame
-    and connect to the appropriate signals.<P>
-
-    &lt;&lt;more code about KGame, an easy example&gt;&gt;
-
-<!-------------------------------------------------------------------------------->
-    <H3>Network games and related classes</H3>
-
-    One of the main principles in the design of <em>KGame</em> was to make network games possible
-    with a minimum of effort for the game developer.<P>
-
-    A network game is a game with usually several players, that are on different computers. These
-    computers are usually connected to the internet, and all the moves a player does are exchanged
-    over this network.<P>
-
-    The exchange of moves and other information is done using the class <em>KMessageServer</em>.
-    An object of this class is a server that waits for connections. Someone who wants to take part
-    in the game has to connect to this server - usually using an internet socket connection. He does
-    this by creating a <em>KMessageClient</em> object. This object connects to the message server.<P>
-
-    The transfer of data is realised by subclasses of the abstract class <em>KMessageIO</em>. One object
-    of this class is created on the client side, one on the server side. Different types of networks can
-    be supported by creating new subclasses of KMessageIO. There are already two subclasses of KMessageIO:
-    <em>KMessageSocket</em> uses a internet socket connection to transfer the data from the message client
-    to the message server or vice versa. <em>KMessageDirect</em> can be used if both the message server and
-    the message client are within the same process. The data blocks are copied directly to the other side,
-    so the transfer is faster and needs no network bandwidth.<P>
-
-    A typical network game situation could look like this:<P>
-
-    <IMG SRC="kmessageserver.png"><P>
-
-    Here, three KGame object (called message clients) are connected to the KMessageServer object. One
-    is in the same process, so it uses KMessageDirect. The other two use KMessageSocket, so an internet
-    socket connection is used. KGame doesn't talk directly to the message server, but uses a KMessageClient
-    object instead. One of the KMessageClient objects is the admin of the message server. This client has some
-    priviledges. It may e.g. kill the connection to other message clients, or limit the number of clients
-    that may connect.<P>
-
-    The KGame objects are by default all equal. So the usual approach will be that every KGame object will
-    store the complete status of the game, and any change or move will be broadcasted to the other KGame
-    objects, so that they all change the status in identical ways. Sometimes it may be necessary (or just
-    easier to implement) that one KGame object is a <em>game server</em> (i.e. he is repsonsible for everything,
-    he coordinates the complete game and stores the game status), whereas the other KGame objects are
-    only dumb stubs that are used to contact the <em>game server</em>. You can implement both approaches
-    using the message server structure. If you need to elect the KGame object that shall be
-    the game server, you may e.g. use the one that has the KMessageClient that is the admin of the message
-    server. (Of course this is only a suggestion, you can use other approaches.)<P>
-
-    The main principle when developing the message server/client structure was, that the message server
-    doesn't have <em>any</em> idea of the game and its rules that is played. The message server only forwards
-    messages from one message client to the others without interpreting or manipulating the data. So always
-    keep in mind that the message server is <em>not</em> a game server! It does not store any data about
-    the game status. It is only a server for network connections and message broadcasting, <em>not</em>
-    for game purposes. The reason for this principle is, that <em>any</em> game can be played using a
-    KMessageServer on any computer. The computer being the message server doesn't need to know anything
-    about the game that is played on it. So you don't have to install new versions of the game there. Only
-    the clients need to be game specific.<P>
-
-    Usually you don't need to create <em>KMessageServer</em> or <em>KMessageClient</em> objects in your game,
-    since <em>KGame</em> does this for you. There are three different scenarios fo network games that are
-    all supported in <em>KGame</em>:<P>
-
-    <b>Scenario 1: local game</b><P>
-
-    The local game should always be the default state a game should be in. To avoid having this scenario
-    as a special case, <em>KGame</em> automatically creates a KMessageServer object and a KMessageClient
-    object. So every change and every move is sent to the message server and is returned to the KGame
-    object before it is processed. Since the connection between the message client and the message server
-    uses KMessageDirect the data transfer is very fast and wont hurt in most cases.<P>
-
-    <IMG SRC="scenario0.png"><P>
-
-    This is the default situation right after creating the <em>KGame</em> object.<P>
-
-    <b>Scenario 2: network game, started by one player</b><P>
-
-    If one user is bored of playing alone, he can open his game for connections from the outside world.
-    He listens to a TCP/IP socket port (i.e. a number between 0 and 65535). Other players can create
-    KGame objects of their own and connect to this port. They need to know the IP address of that computer
-    and the port number. This situation will have this structure:
-
-    <IMG SRC="scenario1.png"><P>
-
-    The first player has to do something like:<P>
-
-    <PRE>
-      KGame *myGame = new KGame ();
-      // wait for connections on port 12345
-      myGame->offerConnections (12345);
-    </PRE>
-
-    And the other players have to do something like:<P>
-
-    <PRE>
-      KGame *myGame = new KGame ();
-      // connect to the message server
-      myGame->connectToServer ("theServer.theDomain.com", 12345);
-    </PRE>
-
-    This automatically removes the message server in these KGame objects and connects to the given
-    one instead.<P>
-
-    <b>Scenario 3: network game, using a stand alone message server</b><P>
-
-    Sometimes it is not possible to let the message server run on one of the players computer. If e.g. all
-    the players have their computer in a local network that uses masquerading to contact the internet,
-    other computers cannot connect to them since the computer doesn't have a IP address to the outside
-    world. Then the only way to play a network game is to have a standalone KMessageServer object on
-    another server computer (somthing like "games.kde.org" e.g.). Since the KMessageServer isn't game
-    specific at all, every game can be played using it. There doesn't have to be any special software
-    installed on that server computer, only the program creating a KMessageServer object.<P>
-
-    This scenario has some more advantages: The message server can be a well known meeting point to
-    start a game. This way one could play games against other players you never knew before. Furthermore
-    the game is stopped brutally when the program that contains the message server in scenario 2 is
-    quitted. (Migration of message servers is not yet implemented, but may be in the future.) Using a
-    stand alone message server, the players may enter and leave the game as they want.
-
-    <IMG SRC="scenario2.png"><P>
-
-    To create this scenario, a special KMessageServer program has to be started on the computer
-    that shall be the stand alone message server:<P>
-
-    <PRE>
-      % kmessageserver -port=12345
-    </PRE>
-
-    The other games that want to connect have to do this (supposed the stand alone message server
-    has the IP address "games.kde.org"):<P>
-
-    <PRE>
-      KGame *myGame = new KGame ();
-      // connect to the message server
-      myGame->connectToServer ("games.kde.org", 12345);
-    </PRE>
-
-
-
-
-<!-------------------------------------------------------------------------------->
-  </body>
-</html>
\ No newline at end of file
diff --git a/libkdegames/kgame/messages.txt b/libkdegames/kgame/messages.txt
deleted file mode 100644
index c42d2d91..00000000
--- a/libkdegames/kgame/messages.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-Message formats of libtdegames:
--------------------------------
-
-There are two different communication layers, using their own protocols:
-
- - the message layer (KMessageIO, KMessageServer, KMessageClient)
-
-     This is used to send messages from one client (i.e. KGame object)
-     to an other one, to a group of other clients, or to all the clients
-     connected to the KMessageServer. The messages are arbitrary blocks
-     of data, of an arbitrary length.
-     This layer is an underlying protocol that isn't game specific at all.
-     You shouldn't need to know the message format of the packets. If you
-     want to extend the protocol, have a look into KMessageServer API
-     reference for a complete list of message types.
-
- - the game layer (KGame, KGameIO, KPlayer)
-
-     This layer uses the message layer to send its specific message packets
-     between the objects of the game.
-     This layer contains the game specific messages (e.g. addPlayer, setupGame).
-     The rest of this file describes this layer.
-
-
-Game Layer Messages:
---------------------
-
-     Application Cookie   16 Bit
-     Version               8 Bit
-     MsgId                16 Bit
-     SenderId             16 Bit
-     ReceiverId           16 Bit
-     Userdata
-
-The format of the messages is used internally and there is usually no reason why
-you have to know what it is used for. But as usually != always here are some
-comments on the format. Note that KGame is under development and the content of
-this file could be obsolete. Please result the sourcecode for up-to-date
-information.
-Application Cookie is used to identify the application. This prevents a
-chess game from talking to a poker game.
-Version is the version of KNetworkGame, sender and receiver must be of the same
-version.
-  library note: this could be a limitation, as KGame should be backward
-  compatible. Maybe change to version must be >= KNETWORKGAME or something less
-  restrictive
-MsgId specifies the kind of the message data (see below).
-SenderId is the id of the KGame/KPlayer object which sent the message, it is
-coded like this: the lower 10 bits specify a player and the upper bit
-represent the game id shifted by 10 bits. So we get
-Id=playerId | (gameId<<10);
-ReceiverId is the id of the receiver of the message. It can be either
-a player, a game or a broadcast. For a broadcast the Id is set to 0
-in the other cases the coding is as with the senderId
-Userdata is the data of the user (wow ;-))
-
-
-MsgId           UserData
----------------------------------------------------------
-IdMessage        user defined
-
-IdSetupGame      Q_INT32  isServer
-                 Q_INT32  maxPlayers
-                 Q_INT32  newid (id for the new game)
-                 Q_INT32  cntR (virtual player nunmber)
-                 Q_INT32  cntT (tagged player number)
-                 TODO: Changed
-
-IdContinueSetup: TODO
-
-IdSendPlayer     Q_INT32  omit how many tagged players for replacement
-                 TODO: Changed
-
-IdGameSave       Save(msg)->Load(msg)
-
-IdAddPlayer      rtti
-                 gameid() of the owner
-		 player->Save(msg) -> player->Load(msg)
-
-IdRemovePlayer   Q_INT16  playerid
-
-IdError          Q_INT32  errorcode
-                 QString  errortext
-
-IdGametqStatus     Q_INT32  status
-
-IdPlayerProperty Q_INT16  propertyId
-                 user defined -> the property
-
-IdGameProperty   Q_INT16  propertyId
-                 user defined -> the property
-
-IdPlayerInput    user defined
diff --git a/libkdegames/kgame/scenario0.png b/libkdegames/kgame/scenario0.png
deleted file mode 100644
index 4de99b52..00000000
Binary files a/libkdegames/kgame/scenario0.png and /dev/null differ
diff --git a/libkdegames/kgame/scenario1.png b/libkdegames/kgame/scenario1.png
deleted file mode 100644
index 74af4f6f..00000000
Binary files a/libkdegames/kgame/scenario1.png and /dev/null differ
diff --git a/libkdegames/kgame/scenario2.png b/libkdegames/kgame/scenario2.png
deleted file mode 100644
index 14ea0a3c..00000000
Binary files a/libkdegames/kgame/scenario2.png and /dev/null differ
diff --git a/libkdegames/kgamelcd.cpp b/libkdegames/kgamelcd.cpp
deleted file mode 100644
index cf079a15..00000000
--- a/libkdegames/kgamelcd.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamelcd.h"
-#include "kgamelcd.moc"
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqtimer.h>
-
-#include <kglobal.h>
-
-
-//-----------------------------------------------------------------------------
-KGameLCD::KGameLCD(uint nbDigits, TQWidget *parent, const char *name)
-    : TQLCDNumber(nbDigits, parent, name), _htime(800)
-{
-    const TQPalette &p = palette();
-    _fgColor = p.color(TQPalette::Active, TQColorGroup::Foreground);
-    _hlColor = p.color(TQPalette::Active, TQColorGroup::HighlightedText);
-
-    _timer = new TQTimer(this);
-    connect(_timer, TQT_SIGNAL(timeout()), TQT_SLOT(timeout()));
-
-    setFrameStyle(Panel | Plain);
-	setSegmentStyle(Flat);
-
-    displayInt(0);
-}
-
-KGameLCD::~KGameLCD()
-{}
-
-void KGameLCD::setDefaultBackgroundColor(const TQColor &color)
-{
-    TQPalette p = palette();
-    p.setColor(TQColorGroup::Background, color);
-    setPalette(p);
-}
-
-void KGameLCD::setDefaultColor(const TQColor &color)
-{
-    _fgColor = color;
-    TQPalette p = palette();
-    p.setColor(TQColorGroup::Foreground, color);
-    setPalette(p);
-}
-
-void KGameLCD::setHighlightColor(const TQColor &color)
-{
-    _hlColor = color;
-}
-
-void KGameLCD::setLeadingString(const TQString &s)
-{
-    _lead = s;
-    displayInt(0);
-}
-
-void KGameLCD::setHighlightTime(uint time)
-{
-    _htime = time;
-}
-
-void KGameLCD::resetColor()
-{
-    setColor(TQColor());
-}
-
-void KGameLCD::setColor(const TQColor &color)
-{
-    const TQColor &c = (color.isValid() ? color : _fgColor);
-    TQPalette p = palette();
-    p.setColor(TQColorGroup::Foreground, c);
-    setPalette(p);
-}
-
-void KGameLCD::displayInt(int v)
-{
-    int n = numDigits() - _lead.length();
-    display(_lead + TQString::number(v).rightJustify(n));
-}
-
-void KGameLCD::highlight()
-{
-    highlight(true);
-    _timer->start(_htime, true);
-}
-
-void KGameLCD::highlight(bool light)
-{
-    if (light) setColor(_hlColor);
-    else resetColor();
-}
-
-//-----------------------------------------------------------------------------
-KGameLCDClock::KGameLCDClock(TQWidget *parent, const char *name)
-: KGameLCD(5, parent, name)
-{
-    _timerClock = new TQTimer(this);
-    connect(_timerClock, TQT_SIGNAL(timeout()), TQT_SLOT(timeoutClock()));
-}
-
-KGameLCDClock::~KGameLCDClock()
-{}
-
-void KGameLCDClock::timeoutClock()
-{
-    // waiting an hour does not restart timer
-    if ( _min==59 && _sec==59 ) return;
-    _sec++;
-    if (_sec==60) {
-        _min++;
-        _sec = 0;
-    }
-    showTime();
-}
-
-TQString KGameLCDClock::pretty() const
-{
-    TQString sec = TQString::number(_sec).rightJustify(2, '0', true);
-    TQString min = TQString::number(_min).rightJustify(2, '0', true);
-    return min + ':' + sec;
-}
-
-void KGameLCDClock::showTime()
-{
-    display(pretty());
-}
-
-void KGameLCDClock::reset()
-{
-    _timerClock->stop();
-	_sec = 0;
-    _min = 0;
-	showTime();
-}
-
-void KGameLCDClock::start()
-{
-    _timerClock->start(1000); // 1 second
-}
-
-void KGameLCDClock::stop()
-{
-    _timerClock->stop();
-}
-
-uint KGameLCDClock::seconds() const
-{
-    return _min*60 + _sec;
-}
-
-void KGameLCDClock::setTime(uint sec)
-{
-    Q_ASSERT( sec<3600 );
-    _sec = sec % 60;
-    _min = sec / 60;
-    showTime();
-}
-
-void KGameLCDClock::setTime(const TQString &s)
-{
-    Q_ASSERT( s.length()==5 && s[2]==':' );
-    uint min = kMin(s.section(':', 0, 0).toUInt(), uint(59));
-    uint sec = kMin(s.section(':', 1, 1).toUInt(), uint(59));
-    setTime(sec + min*60);
-}
-
-
-//-----------------------------------------------------------------------------
-class KGameLCDList::KGameLCDListPrivate
-{
-public:
-  TQValueVector<TQLabel *> _leadings;
-};
-
-KGameLCDList::KGameLCDList(const TQString &title, TQWidget *parent,
-                           const char *name)
-    : TQWidget(parent, name)
-{
-    init(title);
-}
-
-KGameLCDList::KGameLCDList(TQWidget *parent, const char *name)
-    : TQWidget(parent, name)
-{
-    init(TQString());
-}
-
-KGameLCDList::~KGameLCDList()
-{
-  delete d;
-}
-
-void KGameLCDList::init(const TQString &title)
-{
-    d = new KGameLCDListPrivate;
-
-    TQGridLayout *top = new TQGridLayout(this, 1, 2, 5);
-    top->setColStretch(1, 1);
-
-    _title = new TQLabel(title, this);
-    _title->tqsetAlignment(AlignCenter);
-    top->addMultiCellWidget(_title, 0, 0, 0, 1, AlignCenter);
-}
-
-void KGameLCDList::append(TQLCDNumber *lcd)
-{
-    append(TQString(), lcd);
-}
-
-void KGameLCDList::append(const TQString &leading, TQLCDNumber *lcd)
-{
-    uint i = size();
-    TQLabel *label = 0;
-    if ( !leading.isEmpty() ) {
-      label = new TQLabel(leading, this);
-      static_cast<TQGridLayout *>(tqlayout())->addWidget(label, i+1, 0);
-    }
-    d->_leadings.push_back(label);
-    _lcds.push_back(lcd);
-    static_cast<TQGridLayout *>(tqlayout())->addWidget(lcd, i+1, 1);
-}
-
-void KGameLCDList::clear()
-{
-    for (uint i=0; i<_lcds.size(); i++) {
-        delete d->_leadings[i];
-        delete _lcds[i];
-    }
-    d->_leadings.clear();
-    _lcds.clear();
-}
diff --git a/libkdegames/kgamelcd.h b/libkdegames/kgamelcd.h
deleted file mode 100644
index 6b84f012..00000000
--- a/libkdegames/kgamelcd.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMELCD_H
-#define __KGAMELCD_H
-
-#include <tqlcdnumber.h>
-#include <tqvaluevector.h>
-#include <kdemacros.h>
-
-class TQLabel;
-class TQTimer;
-
-//-----------------------------------------------------------------------------
-/**
- * This class is a visually enhanced @ref TQLCDNumber:
- * <ul>
- * <li> It can show an additional string before the integer being
- * displayed.</li>
- * <li> Its foreground and background colors can easily be modified. </li>
- * <li> It can be highlighted for a short time. </li>
- * </ul>
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCD : public TQLCDNumber
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    KGameLCD(uint nbDigits, TQWidget *parent = 0, const char *name = 0);
-
-    ~KGameLCD();
-
-    /**
-     * Set the default background color.
-     */
-    void setDefaultBackgroundColor(const TQColor &color);
-
-    /**
-     * Set the default foreground color.
-     */
-    void setDefaultColor(const TQColor &color);
-
-    /**
-     * Set highlight color.
-     */
-    void setHighlightColor(const TQColor &color);
-
-    /**
-     * Set the string that will be displayed before the integer number to be
-     * displayed. By default this string is null.
-     */
-    void setLeadingString(const TQString &s);
-
-    /**
-     * Set the highlight duration in milliseconds. The default value is
-     * 800 milliseconds.
-     */
-    void setHighlightTime(uint time);
-
-    /**
-     * Reset the foreground color to the default one.
-     */
-    void resetColor();
-
-    /**
-     * Set the foreground color.
-     */
-    void setColor(const TQColor &color);
-
-public slots:
-    /**
-     * Highlight the LCD with the TQColorGourp::HighlightedText color
-     * for a small time (setHighlightTime).
-     */
-    void highlight();
-
-    /**
-     * Display the given integer with the (optionnal) leading string.
-     *
-     * Note: we cannot use display(int) since TQLCDNumber::display is
-     * not virtual... And you cannot use TQLCDNumber::intValue() to retrieve
-     * the given value.
-     */
-    void displayInt(int value);
-
-private slots:
-    void timeout() { highlight(false); }
-
-private:
-    TQColor   _fgColor, _hlColor;
-    TQString  _lead;
-    uint     _htime;
-    TQTimer  *_timer;
-
-    class KGameLCDPrivate;
-    KGameLCDPrivate *d;
-
-    void highlight(bool light);
-
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This class is a digital clock widget. It has a maximum duration of
- * 3599 seconds (one hour) and it gets updated every second.
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCDClock : public KGameLCD
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    KGameLCDClock(TQWidget *parent = 0, const char *name = 0);
-
-    ~KGameLCDClock();
-
-    /**
-     * @return the total number of seconds elapsed.
-     */
-    uint seconds() const;
-
-    /**
-     * @return the time as a string to be displayed: "mm:ss".
-     */
-    TQString pretty() const;
-
-    /**
-     * Set the time.
-     */
-    void setTime(uint seconds);
-
-    /**
-     * Set the time (format should be "mm:ss").
-     */
-    void setTime(const TQString &s);
-
-public slots:
-    /**
-     * Stop the clock and reset it to zero.
-     */
-    virtual void reset();
-
-    /**
-     * Stop the clock but do not reset it to zero.
-     */
-	virtual void stop();
-
-    /**
-     * Start the clock from the current time.
-     */
-	virtual void start();
-
-protected slots:
-    virtual void timeoutClock();
-
-private:
-    TQTimer *_timerClock;
-	uint    _sec, _min;
-
-    class KGameLCDClockPrivate;
-    KGameLCDClockPrivate *d;
-
-	void showTime();
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This widget holds a list of @ref TQLCDNumber arranged in a vertical tqlayout.
- * It also shows a label at the top of the list.
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCDList : public TQWidget
-{
-    Q_OBJECT
-  TQ_OBJECT
-public:
-    /**
-     * Constructor.
-     *
-     * @param title is the content of the top label.
-     * @param parent passed to the TQWidget constructor
-     * @param name passed to the TQWidget constructor
-     */
-    KGameLCDList(const TQString &title,
-                 TQWidget *parent = 0, const char *name = 0);
-    KGameLCDList(TQWidget *parent = 0, const char *name = 0);
-
-    ~KGameLCDList();
-
-    /**
-     * Append a TQLCDNumber at the bottom of the list.
-     * The TQLCDNumber should have the KGameLCDList as parent.
-     */
-    void append(TQLCDNumber *lcd);
-    
-    /**
-     * Append a TQLCDNumber at the bottom of the list.
-     * The TQLCDNumber should have the KGameLCDList as parent.
-     */
-    void append(const TQString &leading, TQLCDNumber *lcd);
-
-    /**
-     * Delete all @ref TQLCDNumber and clear the list.
-     */
-    void clear();
-
-    /**
-     * @return the title label.
-     */
-    TQLabel *title() const { return _title; }
-
-    /**
-     * @return the TQLCDNumber at index @param i
-     */
-    TQLCDNumber *lcd(uint i) const { return _lcds[i]; }
-    
-    /**
-     * @return the number of TQLCDNumber in the list.
-     */
-    uint size() const { return _lcds.size(); }
-
-private:
-    TQLabel *_title;
-    TQValueVector<TQLCDNumber *> _lcds;
-
-    class KGameLCDListPrivate;
-    KGameLCDListPrivate *d;
-
-    void init(const TQString &title);
-};
-
-#endif
diff --git a/libkdegames/kgamemisc.cpp b/libkdegames/kgamemisc.cpp
deleted file mode 100644
index 1c318476..00000000
--- a/libkdegames/kgamemisc.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-
-#include <tqstringlist.h>
-
-#include <krandomsequence.h>
-#include <klocale.h>
-
-#include "kgamemisc.h"
-
-class KGameMiscPrivate
-{
-public:
-	KGameMiscPrivate()
-	{
-	}
-
-};
-
-KGameMisc::KGameMisc()
-{
-// not yet used
-// d = new KGamePrivate;
-}
-
-KGameMisc::~KGameMisc()
-{
- // don't forget to delete it as soon as it is used!
-// delete d;
-}
-
-TQString KGameMisc::randomName()// do we need i18n? I think yes
-{
-    TQStringList names = TQStringList::split( TQChar(' '),
-        i18n( "A list of language typical names ( for games ), separated by spaces",
-              "Adam Alex Andreas Andrew Bart Ben Bernd Bill "
-              "Chris Chuck Daniel Don Duncan Ed Emily Eric "
-              "Gary Greg Harry Ian Jean Jeff Jan Kai Keith Ken "
-              "Kirk Marc Mike Neil Paul Rik Robert Sam Sean "
-              "Thomas Tim Walter" ) );
-    KRandomSequence random;
-    return *names.at( random.getLong( names.count() ) );
-}
diff --git a/libkdegames/kgamemisc.h b/libkdegames/kgamemisc.h
deleted file mode 100644
index 694a6a00..00000000
--- a/libkdegames/kgamemisc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-/*
-    $Id$
-*/
-#ifndef __KGAMEMISC_H__
-#define __KGAMEMISC_H__
-
-#include <tqstring.h>
-#include <kdemacros.h>
-class KGameMiscPrivate;
-/**
- * This class contains several (usually static) functions I really did not know
- * a class for. If you know a class for any of these member s please drop one of
- * the above copyright holders a mail (or just kde-games-devel@kde.org)
- **/
-class KDE_EXPORT KGameMisc
-{
-public:
-	KGameMisc();
-	~KGameMisc();
-	
-	static TQString randomName();
-	
-private:
-	KGameMiscPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgameprogress.cpp b/libkdegames/kgameprogress.cpp
deleted file mode 100644
index 98876aa3..00000000
--- a/libkdegames/kgameprogress.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/* This file is part of the KDE libraries
-   Copyright (C) 1996 Martynas Kunigelis
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License version 2 as published by the Free Software Foundation.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
-*/
-/**
- * KGameProgress -- a progress indicator widget for KDE.
- */
-
-#include <tqpainter.h>
-#include <tqpixmap.h>
-#include <tqstring.h>
-#include <tqregexp.h>
-#include <tqstyle.h>
-
-#include "kgameprogress.h"
-
-#include <kapplication.h>
-
-KGameProgress::KGameProgress(TQWidget *parent, const char *name)
-	: TQFrame(parent, name),
-	TQRangeControl(0, 100, 1, 10, 0),
-	orient(Qt::Horizontal)
-{
-	initialize();
-}
-
-KGameProgress::KGameProgress(Qt::Orientation orientation, TQWidget *parent, const char *name)
-	: TQFrame(parent, name),
-	TQRangeControl(0, 100, 1, 10, 0),
-	orient(orientation)
-{
-	initialize();
-}
-
-KGameProgress::KGameProgress(int minValue, int maxValue, int value,
-                     Qt::Orientation orientation, TQWidget *parent, const char *name)
-	: TQFrame(parent, name),
-	TQRangeControl(minValue, maxValue, 1, 10, value),
-	orient(orientation)
-{
-	initialize();
-}
-
-KGameProgress::~KGameProgress()
-{
-	delete bar_pixmap;
-}
-
-void KGameProgress::advance(int offset)
-{
-	setValue(value() + offset);
-}
-
-void KGameProgress::initialize()
-{
-	format_ = "%p%";
-	use_supplied_bar_color = false;
-	bar_pixmap = 0;
-	bar_style = Solid;
-	text_enabled = TRUE;
-	setBackgroundMode( PaletteBackground );
-	connect(kapp, TQT_SIGNAL(appearanceChanged()), this, TQT_SLOT(paletteChange()));
-	paletteChange();
-}
-
-void KGameProgress::paletteChange()
-{
-	TQPalette p = kapp->palette();
-	const TQColorGroup &tqcolorGroup = p.active();
-	if (!use_supplied_bar_color)
-		bar_color = tqcolorGroup.highlight();
-	bar_text_color = tqcolorGroup.highlightedText();
-	text_color = tqcolorGroup.text();
-	setPalette(p);
-
-	adjustStyle();
-}
-
-
-void KGameProgress::setBarPixmap(const TQPixmap &pixmap)
-{
-	if (pixmap.isNull())
-		return;
-	if (bar_pixmap)
-		delete bar_pixmap;
-
-	bar_pixmap = new TQPixmap(pixmap);
-}
-
-void KGameProgress::setBarColor(const TQColor &color)
-{
-	bar_color = color;
-	use_supplied_bar_color = true;
-	if (bar_pixmap) {
-		delete bar_pixmap;
-		bar_pixmap = 0;
-	}
-}
-
-void KGameProgress::setBarStyle(BarStyle style)
-{
-	if (bar_style != style) {
-		bar_style = style;
-		update();
-	}
-}
-
-void KGameProgress::setOrientation(Qt::Orientation orientation)
-{
-	if (orient != orientation) {
-		orient = orientation;
-		update();
-	}
-}
-
-void KGameProgress::setValue(int value)
-{
-	TQRangeControl::setValue(value);
-}
-
-void KGameProgress::setTextEnabled(bool enable)
-{
-	text_enabled = enable;
-}
-
-const TQColor & KGameProgress::barColor() const
-{
-	return bar_color;
-}
-
-const TQPixmap * KGameProgress::barPixmap() const
-{
-	return bar_pixmap;
-}
-
-bool KGameProgress::textEnabled() const
-{
-	return text_enabled;
-}
-
-TQSize KGameProgress::tqsizeHint() const
-{
-	TQSize s( size() );
-
-	if(orientation() == Qt::Vertical) {
-		s.setWidth(24);
-	} else {
-		s.setHeight(24);
-	}
-
-	return s;
-}
-
-TQSize KGameProgress::tqminimumSizeHint() const
-{
-	return tqsizeHint();
-}
-
-TQSizePolicy KGameProgress::sizePolicy() const
-{
-	if ( orientation()==Qt::Vertical )
-		return TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Expanding );
-	else
-		return TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed );
-}
-
-KGameProgress::Orientation KGameProgress::orientation() const
-{
-	return orient;
-}
-
-KGameProgress::BarStyle KGameProgress::barStyle() const
-{
-	return bar_style;
-}
-
-int KGameProgress::recalcValue(int range)
-{
-	int abs_value = value() - minValue();
-	int abs_range = maxValue() - minValue();
-	return abs_range ? range * abs_value / abs_range : 0;
-}
-
-void KGameProgress::valueChange()
-{
-	tqrepaint(contentsRect(), FALSE);
-	emit percentageChanged(recalcValue(100));
-}
-
-void KGameProgress::rangeChange()
-{
-	tqrepaint(contentsRect(), FALSE);
-	emit percentageChanged(recalcValue(100));
-}
-
-void KGameProgress::styleChange(TQStyle&)
-{
-	adjustStyle();
-}
-
-void KGameProgress::adjustStyle()
-{
-	switch (tqstyle().tqstyleHint(TQStyle::SH_GUIStyle)) {
-		case WindowsStyle:
-			setFrameStyle(TQFrame::WinPanel | TQFrame::Sunken);
-			break;
-		case MotifStyle:
-		default:
-			setFrameStyle(TQFrame::Panel | TQFrame::Sunken);
-			setLineWidth( 2 );
-			break;
-	}
-	update();
-}
-
-void KGameProgress::paletteChange( const TQPalette &p )
-{
-	// This never gets called for global color changes 
-	// because we call setPalette() ourselves.
-	TQFrame::paletteChange(p);
-}
-
-void KGameProgress::drawText(TQPainter *p)
-{
-	TQRect r(contentsRect());
-	//TQColor c(bar_color.rgb() ^ backgroundColor().rgb());
-
-	// Rik: Replace the tags '%p', '%v' and '%m' with the current percentage,
-	// the current value and the maximum value respectively.
-	TQString s(format_);
-
-	s.replace(TQRegExp(TQString::tqfromLatin1("%p")), TQString::number(recalcValue(100)));
-	s.replace(TQRegExp(TQString::tqfromLatin1("%v")), TQString::number(value()));
-	s.replace(TQRegExp(TQString::tqfromLatin1("%m")), TQString::number(maxValue()));
-
-	p->setPen(text_color);
-	TQFont font = p->font();
-	font.setBold(true);
-	p->setFont(font);
-	//p->setRasterOp(XorROP);
-	p->drawText(r, AlignCenter, s);
-	p->setClipRegion( fr );
-	p->setPen(bar_text_color);
-	p->drawText(r, AlignCenter, s);
-}
-
-void KGameProgress::drawContents(TQPainter *p)
-{
-	TQRect cr = contentsRect(), er = cr;
-	fr = cr;
-	TQBrush fb(bar_color), eb(backgroundColor());
-
-	if (bar_pixmap)
-		fb.setPixmap(*bar_pixmap);
-
-	if (backgroundPixmap())
-		eb.setPixmap(*backgroundPixmap());
-
-	switch (bar_style) {
-		case Solid:
-			if (orient ==Qt::Horizontal) {
-				fr.setWidth(recalcValue(cr.width()));
-				er.setLeft(fr.right() + 1);
-			} else {
-				fr.setTop(cr.bottom() - recalcValue(cr.height()));
-				er.setBottom(fr.top() - 1);
-			}
-
-			p->setBrushOrigin(cr.topLeft());
-			p->fillRect(fr, fb);
-
-			p->fillRect(er, eb);
-
-			break;
-
-		case Blocked:
-			const int margin = 2;
-			int max, num, dx, dy;
-			if (orient ==Qt::Horizontal) {
-				fr.setHeight(cr.height() - 2 * margin);
-				fr.setWidth((int)(0.67 * fr.height()));
-				fr.moveTopLeft(TQPoint(cr.left() + margin, cr.top() + margin));
-				dx = fr.width() + margin;
-				dy = 0;
-				max = (cr.width() - margin) / (fr.width() + margin) + 1;
-				num = recalcValue(max);
-			} else {
-				fr.setWidth(cr.width() - 2 * margin);
-				fr.setHeight((int)(0.67 * fr.width()));
-				fr.moveBottomLeft(TQPoint(cr.left() + margin, cr.bottom() - margin));
-				dx = 0;
-				dy = - (fr.height() + margin);
-				max = (cr.height() - margin) / (fr.height() + margin) + 1;
-				num = recalcValue(max);
-			}
-			p->setClipRect(cr.x() + margin, cr.y() + margin,
-			               cr.width() - margin, cr.height() - margin);
-			for (int i = 0; i < num; i++) {
-				p->setBrushOrigin(fr.topLeft());
-				p->fillRect(fr, fb);
-				fr.moveBy(dx, dy);
-			}
-			
-			if (num != max) {
-				if (orient ==Qt::Horizontal)
-					er.setLeft(fr.right() + 1);
-				else
-					er.setBottom(fr.bottom() + 1);
-				if (!er.isNull()) {
-					p->setBrushOrigin(cr.topLeft());
-					p->fillRect(er, eb);
-				}
-			}
-
-			break;
-	}
-
-	if (text_enabled && bar_style != Blocked)
-		drawText(p);
-}
-
-void KGameProgress::setFormat(const TQString & format)
-{
-	format_ = format;
-}
-
-TQString KGameProgress::format() const
-{
-	return format_;
-}
-
-#include "kgameprogress.moc"
diff --git a/libkdegames/kgameprogress.h b/libkdegames/kgameprogress.h
deleted file mode 100644
index 834b127c..00000000
--- a/libkdegames/kgameprogress.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/* This file is part of the KDE libraries
-   Copyright (C) 1996 Martynas Kunigelis
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License version 2 as published by the Free Software Foundation.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
-*/
-/*****************************************************************************
-*                                                                            *
-*  KGameProgress -- progress indicator widget for KDE by Martynas Kunigelis  *
-*                                                                            *
-*****************************************************************************/
-
-#ifndef _KPROGRES_H
-#define _KPROGRES_H "$Id$"
-
-#include <tqframe.h>
-#include <tqrangecontrol.h>
-#include <kdemacros.h>
-/**
- * @short A progress indicator widget.
- *
- * KGameProgress is derived from TQFrame and TQRangeControl, so
- * you can use all the methods from those classes. The only difference
- * is that setValue() is now made a slot, so you can connect
- * stuff to it.
- *
- * None of the constructors take line step and page step as arguments,
- * so by default they're set to 1 and 10 respectively.
- *
- * The Blocked style ignores the textEnabled() setting and displays
- * no text, since it looks truly ugly (and for other reasons). Signal
- * percentageChanged() is emitted whenever the value changes so you
- * can set up a different widget to display the current percentage complete
- * and connect the signal to it.
- *
- * @author Martynas Kunigelis
- * @version $Id$
- */
-class KDE_EXPORT KGameProgress : public TQFrame, public TQRangeControl
-{
-  Q_OBJECT
-  TQ_OBJECT
-  Q_ENUMS( BarStyle )
-  TQ_PROPERTY( int value READ value WRITE setValue)
-  TQ_PROPERTY( BarStyle barStyle READ barStyle WRITE setBarStyle )
-  TQ_PROPERTY( TQColor barColor READ barColor WRITE setBarColor )
-  TQ_PROPERTY( TQPixmap barPixmap READ barPixmap WRITE setBarPixmap )
-  TQ_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation )
-  TQ_PROPERTY( bool textEnabled READ textEnabled WRITE setTextEnabled )
-
-public:
-  /**
-   * Possible values for bar style.
-   *
-   * @p Solid means one continuous progress bar, @p Blocked means a
-   * progress bar made up of several blocks.
-   */
-  enum BarStyle { Solid, Blocked };
-
-  /**
-   * Construct a horizontal progress bar.
-   */
-  KGameProgress(TQWidget *parent=0, const char *name=0);
-
-  /**
-   * Construct a progress bar with orientation @p orient.
-   */
-  KGameProgress(Qt::Orientation orient, TQWidget *parent=0, const char *name=0);
-
-  /**
-   * Construct a progress bar with minimum, maximum and initial values.
-   */
-  KGameProgress(int minValue, int maxValue, int value, Qt::Orientation,
-                TQWidget *parent=0, const char *name=0);
-
-  /**
-   * Destruct the progress bar.
-   */
-  ~KGameProgress();
-
-  /**
-   * Set the progress bar style.
-   *
-   * Allowed values are @p Solid and @p Blocked.
-   */
-  void setBarStyle(BarStyle style);
-
-  /**
-   * Set the color of the progress bar.
-   */
-  void setBarColor(const TQColor &);
-
-  /**
-   * Set a pixmap to be shown in the progress bar.
-   */
-  void setBarPixmap(const TQPixmap &);
-
-  /**
-   * Set the orientation of the progress bar.
-   *
-   * Allowed values are @pQt::Horizontal and @pQt::Vertical.
-   */
-  void setOrientation(Qt::Orientation);
-
-  /**
-   * If this is set to @p true, the progress text will be displayed.
-   *
-   */
-  void setTextEnabled(bool);
-
-  /**
-   * Retrieve the bar style.
-   *
-   * @see setBarStyle()
-   */
-  BarStyle barStyle() const;
-
-  /**
-   * Retrieve the bar color.
-   * @see setBarColor()
-   */
-  const TQColor &barColor() const;
-
-  /**
-   * Retrieve the bar pixmap.
-   *
-   * @see setBarPixmap()
-   */
-  const TQPixmap *barPixmap() const;
-
-  /**
-   * Retrive the current status
-   *
-   * @see setValue()
-   */
-  int value() const { return TQRangeControl::value(); }
-  /**
-   * Retrive the orientation of the progress bar.
-   *
-   * @see setOrientation()
-   */
-  Qt::Orientation orientation() const;
-
-  /**
-   * Returns @p true if progress text will be displayed,
-   * @p false otherwise.
-   *
-   * @see setFormat()
-   */
-  bool textEnabled() const;
-
-  /**
-   */
-  virtual TQSize tqsizeHint() const;
-
-  /**
-   */
-  virtual TQSize tqminimumSizeHint() const;
-
-  /**
-   */
-  virtual TQSizePolicy sizePolicy() const;
-
-  /**
-   * Retrieve the current format for printing status text.
-   * @see setFormat()
-   */
-  TQString format() const;
-
-public slots:
-
-  /**
-   * Set the format of the text to use to display status.
-   *
-   * The default format is "%p%" (which looks like "42%".)
-   *
-   * @param format %p is replaced by percentage done, %v is replaced by actual
-   * value, %m is replaced by the maximum value.
-   */
-  void setFormat(const TQString & format);
-
-  /**
-   * Set the current value of the progress bar to @p value.
-   *
-   * This must be a number in the range 0..100.
-   */
-  void setValue(int value);
-
-  /**
-   * Advance the progress bar by @p prog.
-   *
-   * This method is
-   * provided for convenience and is equivalent with
-   * setValue(value()+prog).
-   */
-  void advance(int prog);
-
-signals:
-  /**
-   * Emitted when the state of the progress bar changes.
-   */
-  void percentageChanged(int);
-
-protected:
-  /**
-   */
-  void valueChange();
-  /**
-   */
-  void rangeChange();
-  /**
-   */
-  void styleChange( TQStyle& );
-  /**
-   */
-  void paletteChange( const TQPalette & );
-  /**
-   */
-  void drawContents( TQPainter * );
-
-private slots:
-  void paletteChange();
-
-private:
-  TQPixmap  *bar_pixmap;
-  bool      use_supplied_bar_color;
-  TQColor    bar_color;
-  TQColor    bar_text_color;
-  TQColor    text_color;
-  TQRect     fr;
-  BarStyle  bar_style;
-  Qt::Orientation orient;
-  bool      text_enabled;
-  TQString   format_;
-  void      initialize();
-  int       recalcValue(int);
-  void      drawText(TQPainter *);
-  void      adjustStyle();
-
-  class KGameProgressPrivate;
-  KGameProgressPrivate *d;
-};
-
-
-#endif
diff --git a/libkdegames/kgrid2d.h b/libkdegames/kgrid2d.h
deleted file mode 100644
index 9443b0c7..00000000
--- a/libkdegames/kgrid2d.h
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGRID2D_H_
-#define __KGRID2D_H_
-
-#include <math.h>
-
-#include <tqpair.h>
-#include <tqvaluelist.h>
-#include <tqvaluevector.h>
-
-#include <kglobal.h>
-
-
-//-----------------------------------------------------------------------------
-namespace KGrid2D
-{
-    /**
-     * This type represents coordinates on a bidimensionnal grid.
-     * @since 3.2
-     */
-    typedef TQPair<int, int> Coord;
-
-    /**
-     * This type represents a list of @ref Coord.
-     * @since 3.2
-     */
-    typedef TQValueList<Coord> CoordList;
-}
-
-inline KGrid2D::Coord
-operator +(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
-    return KGrid2D::Coord(c1.first + c2.first, c1.second + c2.second);
-}
-
-inline KGrid2D::Coord
-operator -(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
-    return KGrid2D::Coord(c1.first - c2.first, c1.second - c2.second);
-}
-
-/**
- * @return the maximum of both coordinates.
- * @since 3.2
- */
-inline KGrid2D::Coord
-maximum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
-    return KGrid2D::Coord(kMax(c1.first, c2.first), kMax(c1.second, c2.second));
-}
-/**
- * @return the minimum of both coordinates.
- * @since 3.2
- */
-inline KGrid2D::Coord
-minimum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
-    return KGrid2D::Coord(kMin(c1.first, c2.first), kMin(c1.second, c2.second));
-}
-
-inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::Coord &c) {
-    return s << '(' << c.second << ", " << c.first << ')';
-}
-
-inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::CoordList &list)
-{
-    for(KGrid2D::CoordList::const_iterator i=list.begin(); i!=list.end(); ++i)
-        s << *i;
-	return s;
-}
-
-//-----------------------------------------------------------------------------
-namespace KGrid2D
-{
-/**
- * This template class represents a generic bidimensionnal grid. Each node
- * contains an element of the template type.
- *
- * @since 3.2
- */
-template <class Type>
-class Generic
-{
- public:
-    /**
-     * Constructor.
-     */
-    Generic(uint width = 0, uint height = 0) {
-        resize(width, height);
-    }
-
-    virtual ~Generic() {}
-
-    /**
-     * Resize the grid.
-     */
-    void resize(uint width, uint height) {
-        _width = width;
-        _height = height;
-        _vector.resize(width*height);
-    }
-
-    /**
-     * Fill the nodes with the given value.
-     */
-    void fill(const Type &value) {
-        for (uint i=0; i<_vector.count(); i++) _vector[i] = value;
-    }
-
-    /**
-     * @return the width.
-     */
-    uint width() const  { return _width; }
-    /**
-     * @return the height.
-     */
-    uint height() const { return _height; }
-    /**
-     * @return the number of nodes (ie width*height).
-     */
-    uint size() const   { return _width*_height; }
-
-    /**
-     * @return the linear index for the given coordinate.
-     */
-    uint index(const Coord &c) const {
-        return c.first + c.second*_width;
-    }
-
-    /**
-     * @return the coordinate corresponding to the linear index.
-     */
-    Coord coord(uint index) const {
-        return Coord(index % _width, index / _width);
-    }
-
-    /**
-     * @return the value at the given coordinate.
-     */
-    const Type &at(const Coord &c) const { return _vector[index(c)]; }
-    /**
-     * @return the value at the given coordinate.
-     */
-    Type &at(const Coord &c)             { return _vector[index(c)]; }
-    /**
-     * @return the value at the given coordinate.
-     */
-    const Type &operator [](const Coord &c) const { return _vector[index(c)]; }
-    /**
-     * @return the value at the given coordinate.
-     */
-    Type &operator [](const Coord &c)             { return _vector[index(c)]; }
-
-    /**
-     * @return the value at the given linear index.
-     */
-    const Type &at(uint index) const          { return _vector[index]; }
-    /**
-     * @return the value at the given linear index.
-     */
-    Type &at(uint index)                      { return _vector[index]; }
-    /**
-     * @return the value at the given linear index.
-     */
-    const Type &operator [](uint index) const { return _vector[index]; }
-    /**
-     * @return the value at the given linear index.
-     */
-    Type &operator [](uint index)             { return _vector[index]; }
-
-    /**
-     * @return if the given coordinate is inside the grid.
-     */
-    bool inside(const Coord &c) const {
-        return ( c.first>=0 && c.first<(int)_width
-                 && c.second>=0 && c.second<(int)_height );
-    }
-
-    /**
-     * Bound the given coordinate with the grid dimensions.
-     */
-    void bound(Coord &c) const {
-        c.first = kMax(kMin(c.first, (int)_width-1), 0);
-        c.second = kMax(kMin(c.second, (int)_height-1), 0);
-    }
-
- protected:
-    uint               _width, _height;
-    TQValueVector<Type> _vector;
-};
-}
-
-template <class Type>
-TQDataStream &operator <<(TQDataStream &s, const KGrid2D::Generic<Type> &m) {
-    s << (TQ_UINT32)m.width() << (TQ_UINT32)m.height();
-    for (uint i=0; i<m.size(); i++) s << m[i];
-    return s;
-}
-
-template <class Type>
-TQDataStream &operator >>(TQDataStream &s, KGrid2D::Generic<Type> &m) {
-    TQ_UINT32 w, h;
-    s >> w >> h;
-    m.resize(w, h);
-    for (uint i=0; i<m.size(); i++) s >> m[i];
-    return s;
-}
-
-
-namespace KGrid2D
-{
-
-//-----------------------------------------------------------------------------
-/**
- * This class contains static methods to manipulate coordinates for a
- * square bidimensionnal grid.
- *
- * @since 3.2
- */
-class SquareBase
-{
- public:
-    /**
-     * Identify the eight neighbours.
-     */
-    enum Neighbour { Left=0, Right, Up, Down, LeftUp, LeftDown,
-                     RightUp, RightDown, Nb_Neighbour };
-
-    /**
-     * @return the trigonometric angle in radians for the given neighbour.
-     */
-    static double angle(Neighbour n) {
-        switch (n) {
-        case Left:      return M_PI;
-        case Right:     return 0;
-        case Up:        return M_PI_2;
-        case Down:      return -M_PI_2;
-        case LeftUp:    return 3.0*M_PI_4;
-        case LeftDown:  return -3.0*M_PI_4;
-        case RightUp:   return M_PI_4;
-        case RightDown: return -M_PI_4;
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return 0;
-    }
-
-    /**
-     * @return the opposed neighbour.
-     */
-    static Neighbour opposed(Neighbour n) {
-        switch (n) {
-        case Left:      return Right;
-        case Right:     return Left;
-        case Up:        return Down;
-        case Down:      return Up;
-        case LeftUp:    return RightDown;
-        case LeftDown:  return RightUp;
-        case RightUp:   return LeftDown;
-        case RightDown: return LeftUp;
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return Nb_Neighbour;
-    }
-
-    /**
-     * @return true if the neighbour is a direct one (ie is one of the four
-     * nearest).
-     */
-    static bool isDirect(Neighbour n) { return n<LeftUp; }
-
-    /**
-     * @return the neighbour for the given coordinate.
-     */
-    static Coord neighbour(const Coord &c, Neighbour n) {
-        switch (n) {
-        case Left:      return c + Coord(-1,  0);
-        case Right:     return c + Coord( 1,  0);
-        case Up:        return c + Coord( 0, -1);
-        case Down:      return c + Coord( 0,  1);
-        case LeftUp:    return c + Coord(-1, -1);
-        case LeftDown:  return c + Coord(-1,  1);
-        case RightUp:   return c + Coord( 1, -1);
-        case RightDown: return c + Coord( 1,  1);
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return c;
-    }
-};
-
-/**
- * This template is a @ref Generic implementation for a square bidimensionnal
- * grid (@ref SquareBase).
- *
- * @since 3.2
- */
-template <class T>
-class Square : public Generic<T>, public SquareBase
-{
- public:
-    /**
-     * Constructor.
-     */
-    Square(uint width = 0, uint height = 0)
-        : Generic<T>(width, height) {}
-
-    /**
-     * @return the neighbours of coordinate @param c
-     * to the given set of coordinates
-     * @param c the coordinate to use as the reference point
-     * @param insideOnly only add coordinates that are inside the grid.
-     * @param directOnly only add the four nearest neighbours.
-     */
-    CoordList neighbours(const Coord &c, bool insideOnly = true,
-                         bool directOnly = false) const {
-        CoordList neighbours;
-        for (uint i=0; i<(directOnly ? LeftUp : Nb_Neighbour); i++) {
-            Coord n = neighbour(c, (Neighbour)i);
-            if ( insideOnly && !Generic<T>::inside(n) ) continue;
-            neighbours.append(n);
-        }
-        return neighbours;
-    }
-
-    /**
-     * @return the "projection" of the given coordinate on the grid edges.
-     *
-     * @param c the coordinate to use as the reference point
-     * @param n the direction of projection.
-     */
-    Coord toEdge(const Coord &c, Neighbour n) const {
-        switch (n) {
-        case Left:      return Coord(0, c.second);
-        case Right:     return Coord(Generic<T>::width()-1, c.second);
-        case Up:        return Coord(c.first, 0);
-        case Down:      return Coord(c.first, Generic<T>::height()-1);
-        case LeftUp:    return Coord(0, 0);
-        case LeftDown:  return Coord(0, Generic<T>::height()-1);
-        case RightUp:   return Coord(Generic<T>::width()-1, 0);
-        case RightDown: return Coord(Generic<T>::width()-1, Generic<T>::height()-1);
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return c;
-    }
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This class contains static methods to manipulate coordinates on an
- * hexagonal grid where hexagons form horizontal lines:
- * <pre>
- * (0,0)   (0,1)   (0,2)
- *     (1,0)   (1,1)   (1,2)
- * (2,0)   (2,1)   (2,2)
- * </pre>
- *
- * @since 3.2
- */
-class HexagonalBase
-{
- public:
-    /**
-     * Identify the six neighbours.
-     */
-    enum Neighbour { Left = 0, Right, LeftUp, LeftDown,
-                     RightUp, RightDown, Nb_Neighbour };
-
-     /**
-     * @return the trigonometric angle in radians for the given neighbour.
-     */
-    static double angle(Neighbour n) {
-        switch (n) {
-        case Left:      return M_PI;
-        case Right:     return 0;
-        case LeftUp:    return 2.0*M_PI/3;
-        case LeftDown:  return -2.0*M_PI/3;
-        case RightUp:   return M_PI/3;
-        case RightDown: return -M_PI/3;
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return 0;
-    }
-
-    /**
-     * @return the opposed neighbour.
-     */
-    static Neighbour opposed(Neighbour n) {
-        switch (n) {
-        case Left:      return Right;
-        case Right:     return Left;
-        case LeftUp:    return RightDown;
-        case LeftDown:  return RightUp;
-        case RightUp:   return LeftDown;
-        case RightDown: return LeftUp;
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return Nb_Neighbour;
-    }
-
-    /**
-     * @return the neighbour of the given coordinate.
-     */
-    static Coord neighbour(const Coord &c, Neighbour n) {
-        bool oddRow = c.second%2;
-        switch (n) {
-        case Left:      return c + Coord(-1,  0);
-        case Right:     return c + Coord( 1,  0);
-        case LeftUp:    return c + (oddRow ? Coord( 0, -1) : Coord(-1, -1));
-        case LeftDown:  return c + (oddRow ? Coord( 0,  1) : Coord(-1,  1));
-        case RightUp:   return c + (oddRow ? Coord( 1, -1) : Coord( 0, -1));
-        case RightDown: return c + (oddRow ? Coord( 1,  1) : Coord( 0,  1));
-        case Nb_Neighbour: Q_ASSERT(false);
-        }
-        return c;
-    }
-
-    /**
-    * @return the distance between the two coordinates in term of hexagons.
-    */
-    static uint distance(const Coord &c1, const Coord &c2) {
-        return kAbs(c1.first - c2.first) + kAbs(c1.second - c2.second)
-            + (c1.first==c2.first || c1.second==c2.second ? 0 : -1);
-    }
-};
-
-/**
- * This template implements a hexagonal grid
- * where hexagons form horizontal lines:
- * <pre>
- * (0,0)   (0,1)   (0,2)
- *     (1,0)   (1,1)   (1,2)
- * (2,0)   (2,1)   (2,2)
- * </pre>
- *
- * @ since 3.2
- */
-template <class Type>
-class Hexagonal : public Generic<Type>, public HexagonalBase
-{
- public:
-    /**
-     * Constructor.
-     */
-    Hexagonal(uint width = 0, uint height = 0)
-        : Generic<Type>(width, height) {}
-
-    /**
-     * @return the neighbours of coordinate @param c
-     * to the given set of coordinates
-     * @param c the coordiante to use as the reference point
-     * @param insideOnly only add coordinates that are inside the grid.
-     */
-    CoordList neighbours(const Coord &c, bool insideOnly = true) const {
-        CoordList neighbours;
-        for (uint i=0; i<Nb_Neighbour; i++) {
-            Coord n = neighbour(c, (Neighbour)i);
-            if ( insideOnly && !Generic<Type>::inside(n) ) continue;
-            neighbours.append(n);
-        }
-        return neighbours;
-    }
-
-
-    /**
-     * @return the neighbours at distance @param distance of coordinate
-     * @param c the coordinate to use as the reference point
-     * @param distance distance to the neighbour (1 means at contact).
-     * @param insideOnly only add coordinates that are inside the grid.
-     * @param all returns all neighbours at distance equal and less than
-     *        @param distance (the original coordinate is not included).
-     */
-    CoordList neighbours(const Coord &c, uint distance, bool all,
-                        bool insideOnly = true) const {
-        // brute force algorithm -- you're welcome to make it more efficient :)
-        CoordList ring;
-        if ( distance==0 ) return ring;
-        ring = neighbours(c, insideOnly);
-        if ( distance==1 ) return ring;
-        CoordList center;
-        center.append(c);
-        for (uint i=1; i<distance; i++) {
-            CoordList newRing;
-            CoordList::const_iterator it;
-            for (it=ring.begin(); it!=ring.end(); ++it) {
-                CoordList n = neighbours(*it, insideOnly);
-                CoordList::const_iterator it2;
-                for (it2=n.begin(); it2!=n.end(); ++it2)
-                    if ( center.find(*it2)==center.end()
-                         && ring.find(*it2)==ring.end()
-                         && newRing.find(*it2)==newRing.end() )
-                        newRing.append(*it2);
-                center.append(*it);
-            }
-            ring = newRing;
-        }
-        if ( !all ) return ring;
-        CoordList::const_iterator it;
-        for (it=ring.begin(); it!=ring.end(); ++it)
-            center.append(*it);
-        center.remove(c);
-        return center;
-    }
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/kstdgameaction.cpp b/libkdegames/kstdgameaction.cpp
deleted file mode 100644
index 2aeb412e..00000000
--- a/libkdegames/kstdgameaction.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include "kstdgameaction.h"
-
-#include <klocale.h>
-#include <kaction.h>
-#include <kstdaccel.h>
-#include <kconfig.h>
-#include <kdebug.h>
-
-
-KStdGameAction::KStdGameAction()
-{}
-
-KStdGameAction::~KStdGameAction()
-{}
-
-KAction *KStdGameAction::action(StdGameAction act_enum, const TQObject *recvr,
-                                const char *slot, KActionCollection *parent,
-                                const char *name)
-{
-    return create( act_enum, name, recvr, slot, parent );
-}
-
-const char* KStdGameAction::stdName(StdGameAction act_enum)
-{
-    return name(act_enum);
-}
-
-struct KStdGameActionInfo
-{
-	KStdGameAction::StdGameAction id;
-	KStdAccel::StdAccel globalAccel; // if we reuse a global accel
-    int shortcut; // specific shortcut (NH: should be configurable)
-	const char* psName;
-	const char* psLabel;
-	const char* psWhatsThis;
-	const char* psIconName;
-};
-
-const KStdGameActionInfo g_rgActionInfo[] = {
-// "game" menu
-    { KStdGameAction::New, KStdAccel::New, 0, "game_new", I18N_NOOP2("new game", "&New"), 0, "filenew" },
-    { KStdGameAction::Load, KStdAccel::Open, 0, "game_load", I18N_NOOP("&Load..."), 0, "fileopen" },
-    { KStdGameAction::LoadRecent, KStdAccel::AccelNone, 0, "game_load_recent", I18N_NOOP("Load &Recent"), 0, 0 },
-    { KStdGameAction::Restart, KStdAccel::Reload, 0, "game_restart", I18N_NOOP("Restart &Game"), 0, "reload" },
-    { KStdGameAction::Save, KStdAccel::Save, 0, "game_save", I18N_NOOP("&Save"), 0, "filesave" },
-    { KStdGameAction::SaveAs, KStdAccel::AccelNone, 0, "game_save_as", I18N_NOOP("Save &As..."), 0, "filesaveas" },
-    { KStdGameAction::End, KStdAccel::End, 0, "game_end", I18N_NOOP("&End Game"), 0, "fileclose" },
-    { KStdGameAction::Pause, KStdAccel::AccelNone, TQt::Key_P, "game_pause", I18N_NOOP("Pa&use"), 0, "player_pause" },
-    { KStdGameAction::Highscores, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_H, "game_highscores", I18N_NOOP("Show &Highscores"), 0, "highscore" },
-    { KStdGameAction::Print, KStdAccel::Print, 0, "game_print", I18N_NOOP("&Print..."), 0, "fileprint" },
-    { KStdGameAction::Quit, KStdAccel::Quit, 0, "game_quit", I18N_NOOP("&Quit"), 0, "exit" },
-// "move" menu
-    { KStdGameAction::Repeat, KStdAccel::AccelNone, 0, "move_repeat", I18N_NOOP("Repeat"), 0, 0 },
-    { KStdGameAction::Undo, KStdAccel::Undo, 0, "move_undo", I18N_NOOP("Und&o"), 0, "undo" },
-    { KStdGameAction::Redo, KStdAccel::Redo, 0, "move_redo", I18N_NOOP("Re&do"), 0, "redo" },
-    { KStdGameAction::Roll, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_R, "move_roll", I18N_NOOP("&Roll Dice"), 0, "roll" },
-    { KStdGameAction::EndTurn, KStdAccel::AccelNone, 0, "move_end_turn", I18N_NOOP("End Turn"), 0, "endturn" },
-    { KStdGameAction::Hint, KStdAccel::AccelNone, TQt::Key_H, "move_hint", I18N_NOOP("&Hint"), 0, "idea" },
-    { KStdGameAction::Demo, KStdAccel::AccelNone, TQt::Key_D, "move_demo", I18N_NOOP("&Demo"), 0, "1rightarrow" },
-    { KStdGameAction::Solve, KStdAccel::AccelNone, 0, "move_solve", I18N_NOOP("&Solve"), 0, "wizard" },
-// "settings" menu
-    { KStdGameAction::ChooseGameType, KStdAccel::AccelNone, 0, "options_choose_game_type", I18N_NOOP("Choose Game &Type"), 0, 0 },
-    { KStdGameAction::Carddecks, KStdAccel::AccelNone, 0, "options_configure_carddecks", I18N_NOOP("Configure &Carddecks..."), 0, 0 },
-    { KStdGameAction::ConfigureHighscores, KStdAccel::AccelNone, 0, "options_configure_highscores", I18N_NOOP("Configure &Highscores..."), 0, 0 },
-
-    { KStdGameAction::ActionNone, KStdAccel::AccelNone, 0, 0, 0, 0, 0 }
-};
-
-static const KStdGameActionInfo* infoPtr( KStdGameAction::StdGameAction id )
-{
-	for (uint i = 0; g_rgActionInfo[i].id!=KStdGameAction::ActionNone; i++) {
-		if( g_rgActionInfo[i].id == id )
-			return &g_rgActionInfo[i];
-	}
-	return 0;
-}
-
-
-KAction* KStdGameAction::create(StdGameAction id, const char *name,
-                                const TQObject *recvr, const char *slot,
-                                KActionCollection* parent )
-{
-	KAction* pAction = 0;
-	const KStdGameActionInfo* pInfo = infoPtr( id );
-	kdDebug(125) << "KStdGameAction::create( " << id << "=" << (pInfo ? pInfo->psName : (const char*)0) << ", " << parent << ", " << name << " )" << endl;
-	if( pInfo ) {
-		TQString sLabel = i18n(pInfo->psLabel);
-		KShortcut cut = (pInfo->globalAccel==KStdAccel::AccelNone
-                         ? KShortcut(pInfo->shortcut)
-                         : KStdAccel::shortcut(pInfo->globalAccel));
-        const char *n = name ? name : pInfo->psName;
-		switch( id ) {
-        case LoadRecent:
-            pAction =
-                new KRecentFilesAction(sLabel, cut, recvr, slot, parent, n);
-            break;
-        case Pause:
-        case Demo:
-			pAction = new KToggleAction( sLabel, pInfo->psIconName, cut,
-                                         recvr, slot, parent, n);
-			break;
-        case ChooseGameType:
-            pAction = new KSelectAction( sLabel, pInfo->psIconName, cut,
-                                         recvr, slot, parent, n);
-            break;
-		 default:
-			pAction = new KAction( sLabel, pInfo->psIconName, cut,
-                                   recvr, slot, parent, n);
-			break;
-		}
-	}
-	return pAction;
-}
-
-const char* KStdGameAction::name( StdGameAction id )
-{
-	const KStdGameActionInfo* pInfo = infoPtr( id );
-	return (pInfo) ? pInfo->psName : 0;
-}
-
-KAction *KStdGameAction::gameNew(const TQObject *recvr, const char *slot,
-                             KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(New, name, recvr, slot, parent); }
-KAction *KStdGameAction::load(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Load, name, recvr, slot, parent); }
-KRecentFilesAction *KStdGameAction::loadRecent(const TQObject *recvr, const char *slot,
-                                               KActionCollection *parent, const char *name )
-{ return static_cast<KRecentFilesAction *>(KStdGameAction::create(LoadRecent, name, recvr, slot, parent)); }
-KAction *KStdGameAction::save(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Save, name, recvr, slot, parent); }
-KAction *KStdGameAction::saveAs(const TQObject *recvr, const char *slot,
-                                KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(SaveAs, name, recvr, slot, parent); }
-KAction *KStdGameAction::end(const TQObject *recvr, const char *slot,
-                             KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(End, name, recvr, slot, parent); }
-KToggleAction *KStdGameAction::pause(const TQObject *recvr, const char *slot,
-                                     KActionCollection *parent, const char *name )
-{ return static_cast<KToggleAction *>(KStdGameAction::create(Pause, name, recvr, slot, parent)); }
-KAction *KStdGameAction::highscores(const TQObject *recvr, const char *slot,
-                                    KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Highscores, name, recvr, slot, parent); }
-KAction *KStdGameAction::print(const TQObject *recvr, const char *slot,
-                               KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Print, name, recvr, slot, parent); }
-KAction *KStdGameAction::quit(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Quit, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::repeat(const TQObject *recvr, const char *slot,
-                                KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Repeat, name, recvr, slot, parent); }
-KAction *KStdGameAction::undo(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Undo, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::redo(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Redo, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::roll(const TQObject *recvr, const char *slot,
-                              KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Roll, name, recvr, slot, parent); }
-KAction *KStdGameAction::endTurn(const TQObject *recvr, const char *slot,
-                                 KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(EndTurn, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::carddecks(const TQObject *recvr, const char *slot,
-                                   KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Carddecks, name, recvr, slot, parent); }
-KAction *KStdGameAction::configureHighscores(const TQObject*recvr, const char *slot,
-                                             KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(ConfigureHighscores, name, recvr, slot, parent); }
-KAction *KStdGameAction::hint(const TQObject*recvr, const char *slot,
-                              KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Hint, name, recvr, slot, parent); }
-KToggleAction *KStdGameAction::demo(const TQObject*recvr, const char *slot,
-                               KActionCollection *parent, const char *name)
-{ return static_cast<KToggleAction *>(KStdGameAction::create(Demo, name, recvr, slot, parent)); }
-KAction *KStdGameAction::solve(const TQObject*recvr, const char *slot,
-                               KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Solve, name, recvr, slot, parent); }
-KSelectAction *KStdGameAction::chooseGameType(const TQObject*recvr, const char *slot,
-                                          KActionCollection *parent, const char *name)
-{ return static_cast<KSelectAction *>(KStdGameAction::create(ChooseGameType, name, recvr, slot, parent)); }
-KAction *KStdGameAction::restart(const TQObject*recvr, const char *slot,
-                                 KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Restart, name, recvr, slot, parent); }
diff --git a/libkdegames/kstdgameaction.h b/libkdegames/kstdgameaction.h
deleted file mode 100644
index 6d302050..00000000
--- a/libkdegames/kstdgameaction.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
-    This file is part of the KDE games library
-    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License version 2 as published by the Free Software Foundation.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-// this class was shamelessy stolen from kdelibs/tdeui/kstdction.[cpp|h] and
-// after that just edited for our needs
-#ifndef KSTDGAMEACTION_H
-#define KSTDGAMEACTION_H
-
-class KAction;
-class KToggleAction;
-class TQObject;
-class KActionCollection;
-class KRecentFilesAction;
-class KSelectAction;
-#include <kdemacros.h>
-
-//-----------------------------------------------------------------------------
-/**
- * Replacement for KStdAction for KDE Games
- *
- * This class is an extension to the usual KStdAction class which provides
- * easy access to often used KDE actions
- *
- * Games often use different menu entries than other programs, e.g. games use
- * the menu "game" instead of "file". This class provides the entries which
- * differ from the usual KStdAction entries.
- *
- * @see KStdAction
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- */
-// #### KDE4: transform in namespace
-class KDE_EXPORT KStdGameAction
-{
-public:
-  /**
-   * The standard menubar and toolbar actions.
-   **/
-    enum StdGameAction {
-        // Game menu
-        New=1, Load, LoadRecent, Save, SaveAs, End, Pause, Highscores,
-        Print, Quit,
-        // Move menu
-        Repeat, Undo, Redo, Roll, EndTurn,
-        // Settings menu
-        Carddecks,
-        ChooseGameType, // @since 3.2
-        ConfigureHighscores, // @since 3.2
-
-        Restart, // @since 3.2
-        Hint, // @since 3.2
-        Demo, // @since 3.2
-        Solve, // @since 3.2
-        ActionNone // @since 3.2
-    };
-
-    KStdGameAction();
-    ~KStdGameAction();
-
-    /**
-     * Creates an action corresponding to the
-     * KStdAction::StdAction enum.
-     * @since 3.2
-     */
-    static KAction* create( StdGameAction id, const char *name,
-			    const TQObject *recvr, const char *slot,
-			    KActionCollection* parent );
-
-    /**
-     * @since 3.2
-     */
-	static KAction* create( StdGameAction id,
-		const TQObject *recvr, const char *slot,
-		KActionCollection* parent )
-		{ return create( id, 0, recvr, slot, parent ); }
-
-
-    /**
-     * Retrieve the action corresponding to the
-     * KStdGameAction::StdGameAction enum.
-     * @deprecated
-     */
-    static KAction *action(StdGameAction act_enum, const TQObject *recvr = 0,
-                           const char *slot = 0, KActionCollection *parent = 0,
-                           const char *name = 0L );
-
-    /**
-     * This will return the internal name of a given standard action.
-     * @since 3.2
-     */
-    static const char* name( StdGameAction id );
-
-    /**
-     * This will return the internal name of a given standard action.
-     * @deprecated
-     */
-    static const char* stdName(StdGameAction act_enum);
-
-    /**
-     * Start a new game
-     **/
-    static KAction *gameNew(const TQObject *recvr = 0, const char *slot = 0,
-                            KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Load a previousely saved game
-     */
-    static KAction *load(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Load a recently loaded game.
-     */
-    static KRecentFilesAction *loadRecent(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Save the current game.
-     */
-    static KAction *save(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Save the current game under a different filename.
-     */
-    static KAction *saveAs(const TQObject *recvr = 0, const char *slot = 0,
-                           KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Pause the game
-     **/
-    static KToggleAction *pause(const TQObject *recvr = 0, const char *slot = 0,
-                           KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Show the highscores.
-     */
-    static KAction *highscores(const TQObject *recvr = 0, const char *slot = 0,
-                           KActionCollection *parent = 0, const char *name = 0L );
-
-
-    /**
-     * End the current game, but do not quit the program. Think of a "close"
-     * entry.
-     */
-    static KAction *end(const TQObject *recvr = 0, const char *slot = 0,
-                          KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Print the current screen? Game? Whatever - hardly used in games but there
-     * is at least one example (ktuberling)
-     */
-    static KAction *print(const TQObject *recvr = 0, const char *slot = 0,
-                          KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Quit the game.
-     */
-    static KAction *quit(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-
-
-    /**
-     * Repeat the last move.
-     **/
-    static KAction *repeat(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Undo the last move
-     **/
-    static KAction *undo(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Redo the last move (which has been undone)
-     **/
-    static KAction *redo(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Roll die or dice
-     **/
-    static KAction *roll(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * End the current turn (not the game). Usually to let the next player
-     * start
-     **/
-    static KAction *endTurn(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-
-    /**
-     * Display configure carddecks dialog.
-     */
-    static KAction *carddecks(const TQObject *recvr = 0, const char *slot = 0,
-                                KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Display configure highscores dialog.
-     * @since 3.2
-     */
-    static KAction *configureHighscores(const TQObject *recvr = 0, const char *slot = 0,
-                                KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Give an advice/hint.
-     * @since 3.2
-     */
-    static KAction *hint(const TQObject *recvr = 0, const char *slot = 0,
-                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Show a demo.
-     * @since 3.2
-     */
-    static KToggleAction *demo(const TQObject *recvr = 0, const char *slot = 0,
-                               KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Solve the game.
-     * @since 3.2
-     */
-    static KAction *solve(const TQObject *recvr = 0, const char *slot = 0,
-                          KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Choose game type.
-     * @since 3.2
-     */
-    static KSelectAction *chooseGameType(const TQObject *recvr = 0, const char *slot = 0,
-                                         KActionCollection *parent = 0, const char *name = 0L );
-
-    /**
-     * Restart game.
-     * @since 3.2
-     */
-    static KAction *restart(const TQObject *recvr = 0, const char *slot = 0,
-                            KActionCollection *parent = 0, const char *name = 0L );
-
-};
-
-#endif
diff --git a/libkdegames/pics/Makefile.am b/libkdegames/pics/Makefile.am
deleted file mode 100644
index 20350377..00000000
--- a/libkdegames/pics/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-picsdir = $(kde_datadir)/tdegames/pics
-pics_DATA = star.png
-
-KDE_ICON = action-roll action-highscore action-endturn
diff --git a/libkdegames/pics/cr16-action-endturn.png b/libkdegames/pics/cr16-action-endturn.png
deleted file mode 100644
index 00051f46..00000000
Binary files a/libkdegames/pics/cr16-action-endturn.png and /dev/null differ
diff --git a/libkdegames/pics/cr16-action-highscore.png b/libkdegames/pics/cr16-action-highscore.png
deleted file mode 100644
index 8eb54762..00000000
Binary files a/libkdegames/pics/cr16-action-highscore.png and /dev/null differ
diff --git a/libkdegames/pics/cr16-action-roll.png b/libkdegames/pics/cr16-action-roll.png
deleted file mode 100644
index e41d572a..00000000
Binary files a/libkdegames/pics/cr16-action-roll.png and /dev/null differ
diff --git a/libkdegames/pics/cr22-action-roll.png b/libkdegames/pics/cr22-action-roll.png
deleted file mode 100644
index bdf85a8b..00000000
Binary files a/libkdegames/pics/cr22-action-roll.png and /dev/null differ
diff --git a/libkdegames/pics/cr32-action-endturn.png b/libkdegames/pics/cr32-action-endturn.png
deleted file mode 100644
index fc6d82bc..00000000
Binary files a/libkdegames/pics/cr32-action-endturn.png and /dev/null differ
diff --git a/libkdegames/pics/cr32-action-highscore.png b/libkdegames/pics/cr32-action-highscore.png
deleted file mode 100644
index ad797080..00000000
Binary files a/libkdegames/pics/cr32-action-highscore.png and /dev/null differ
diff --git a/libkdegames/pics/cr32-action-roll.png b/libkdegames/pics/cr32-action-roll.png
deleted file mode 100644
index 8452f4a8..00000000
Binary files a/libkdegames/pics/cr32-action-roll.png and /dev/null differ
diff --git a/libkdegames/pics/star.png b/libkdegames/pics/star.png
deleted file mode 100644
index ea88d160..00000000
Binary files a/libkdegames/pics/star.png and /dev/null differ
diff --git a/libtdegames/Makefile.am b/libtdegames/Makefile.am
new file mode 100644
index 00000000..aedac6ae
--- /dev/null
+++ b/libtdegames/Makefile.am
@@ -0,0 +1,23 @@
+
+lib_LTLIBRARIES = libtdegames.la
+libtdegames_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -no-undefined -version-info 3:0:2
+libtdegames_la_LIBADD  = highscore/libkhighscore.la kgame/libkgame.la kgame/dialogs/libkgamedialogs.la \
+		$(LIB_KSYCOCA) $(LIB_KDNSSD)
+
+libtdegames_la_SOURCES = kcarddialog.cpp kstdgameaction.cpp \
+		kgamemisc.cpp kchatbase.cpp kchat.cpp \
+		kchatdialog.cpp kgameprogress.cpp \
+        kcanvasrootpixmap.cpp kgamelcd.cpp
+include_HEADERS = kgamemisc.h kcarddialog.h kstdgameaction.h \
+		kchatbase.h kchat.h kchatdialog.h \
+        kgameprogress.h kcanvasrootpixmap.h kgamelcd.h kgrid2d.h
+
+INCLUDES = $(all_includes)
+METASOURCES = AUTO
+
+SUBDIRS = carddecks highscore kgame pics
+
+messages:
+	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
+
+include ../admin/Doxyfile.am
diff --git a/libtdegames/README b/libtdegames/README
new file mode 100644
index 00000000..b96c1772
--- /dev/null
+++ b/libtdegames/README
@@ -0,0 +1,25 @@
+This directory contains the library for the tdegames packege.
+It is a collection of functions used by some games or which
+are useful for other games.
+
+Packagers note: it is recommended to put the directory "carddecks" into a separate
+package, as not all games using libtdegames use the carddecks as well.
+
+Contents:
+  kcarddialog: Access to carddeck selection and administration
+               for cardgames
+  kstdgameaction: just like kstdaction this provides some default action for
+                  kde games. games often use different entries than other apps
+                  (like "game" instead of "file"), so use this if possible
+  kgamemisc: some static method i didn't know a good class name for. it
+             currently features "randomName()" which will just give you a random name from
+             a list (translators note: happy translating ;) i copied kde-common/accounts
+             for this so there are nearly 300 entries...)
+  kgame: this is a complete network/game handling library. it constists of a lot
+         of classes which are explained in the kgame docu (as soon as it is
+         written)
+if you use libtdegames in your game please also add
+KGlobal::locale()->insertCatalogue("libtdegames");
+to main()
+This will add libtdegames.pot to your game and therefore all libtdegames 
+strings get translated.
diff --git a/libtdegames/TODO b/libtdegames/TODO
new file mode 100644
index 00000000..136c4fdd
--- /dev/null
+++ b/libtdegames/TODO
@@ -0,0 +1,10 @@
+- 17.04.2001: change version number of the kdenonbeta one
+- 10.07.2001: scaling has been added to KCard and KCardDialog. Find out if there
+  is a memory leak!!
+- 10.07.2001: better layout for the resize box
+- 10.07.2001: global decks/carddirs need extensive testing
+
+-These pertain to the highscore widget
+The Ok button when adding a name should be enabled when the lineedit is filled with a QString of length() > 0
+
+The lineedit by default should come up with the user name that is loged in.
diff --git a/libtdegames/carddecks/Makefile.am b/libtdegames/carddecks/Makefile.am
new file mode 100644
index 00000000..8effea93
--- /dev/null
+++ b/libtdegames/carddecks/Makefile.am
@@ -0,0 +1,24 @@
+DECKDIRS = cards-aisleriot cards-dondorf-whist-b cards-gdkcard-bonded cards-hard-a-port \
+	cards-penguins cards-spaced cards-xskat-french cards-default decks cards-konqi-modern cards-warwick cards-xskat-german
+
+deckdir = $(kde_datadir)/carddecks
+
+uninstall-local:
+	rm -rf $(DESTDIR)$(deckdir)
+
+install-data-local:
+	@$(mkinstalldirs) $(DESTDIR)$(deckdir)
+	@for i in $(DECKDIRS); do \
+		if test -d $(DESTDIR)$(deckdir)/$$i; then \
+			echo "refreshing and removing $$i" ;\
+			rm -rf $(DESTDIR)$(deckdir)/$$i;\
+		fi ;\
+		echo "installing $$i" ;\
+		mkdir $(DESTDIR)$(deckdir)/$$i ;\
+		files=`cd $(srcdir)/$$i && ls -1d *` ;\
+		for f in $$files; do \
+			if test -f $(srcdir)/$$i/$$f; then \
+				$(INSTALL_DATA) $(srcdir)/$$i/$$f $(DESTDIR)$(deckdir)/$$i/$$f ;\
+			fi \
+		done \
+	done      
diff --git a/libtdegames/carddecks/README b/libtdegames/carddecks/README
new file mode 100644
index 00000000..bfac9f0d
--- /dev/null
+++ b/libtdegames/carddecks/README
@@ -0,0 +1,12 @@
+This directory contains all carddecks for KDE cardgames.
+
+The backsides of the cards are stored as PNG images in
+the directory decks as deck0.png, deck1.png, ...
+
+The cardsets with 52 cards are stored in the directories
+cards1,cards2,cards3,... where each directory contains 52
+PNG images of the cards labels 1.png,2.png,...52.png
+
+Access to these cards works by using the kcardialog library
+in libtdegames. See for documentation there.
+
diff --git a/libtdegames/carddecks/cards-aisleriot/1.png b/libtdegames/carddecks/cards-aisleriot/1.png
new file mode 100644
index 00000000..d08a67d8
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/1.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/10.png b/libtdegames/carddecks/cards-aisleriot/10.png
new file mode 100644
index 00000000..f9f00749
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/10.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/11.png b/libtdegames/carddecks/cards-aisleriot/11.png
new file mode 100644
index 00000000..036807ec
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/11.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/12.png b/libtdegames/carddecks/cards-aisleriot/12.png
new file mode 100644
index 00000000..2945ea93
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/12.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/13.png b/libtdegames/carddecks/cards-aisleriot/13.png
new file mode 100644
index 00000000..86ac688c
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/13.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/14.png b/libtdegames/carddecks/cards-aisleriot/14.png
new file mode 100644
index 00000000..e5b64e0f
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/14.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/15.png b/libtdegames/carddecks/cards-aisleriot/15.png
new file mode 100644
index 00000000..3522414c
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/15.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/16.png b/libtdegames/carddecks/cards-aisleriot/16.png
new file mode 100644
index 00000000..098a50f4
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/16.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/17.png b/libtdegames/carddecks/cards-aisleriot/17.png
new file mode 100644
index 00000000..a4abb694
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/17.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/18.png b/libtdegames/carddecks/cards-aisleriot/18.png
new file mode 100644
index 00000000..b231456b
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/18.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/19.png b/libtdegames/carddecks/cards-aisleriot/19.png
new file mode 100644
index 00000000..d77ff9c8
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/19.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/2.png b/libtdegames/carddecks/cards-aisleriot/2.png
new file mode 100644
index 00000000..5d610da7
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/2.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/20.png b/libtdegames/carddecks/cards-aisleriot/20.png
new file mode 100644
index 00000000..bf9d586f
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/20.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/21.png b/libtdegames/carddecks/cards-aisleriot/21.png
new file mode 100644
index 00000000..7ae9b457
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/21.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/22.png b/libtdegames/carddecks/cards-aisleriot/22.png
new file mode 100644
index 00000000..86dee123
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/22.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/23.png b/libtdegames/carddecks/cards-aisleriot/23.png
new file mode 100644
index 00000000..0f6aba24
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/23.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/24.png b/libtdegames/carddecks/cards-aisleriot/24.png
new file mode 100644
index 00000000..5cf8d35c
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/24.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/25.png b/libtdegames/carddecks/cards-aisleriot/25.png
new file mode 100644
index 00000000..a46de767
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/25.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/26.png b/libtdegames/carddecks/cards-aisleriot/26.png
new file mode 100644
index 00000000..a21f883d
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/26.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/27.png b/libtdegames/carddecks/cards-aisleriot/27.png
new file mode 100644
index 00000000..724146ca
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/27.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/28.png b/libtdegames/carddecks/cards-aisleriot/28.png
new file mode 100644
index 00000000..f446432e
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/28.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/29.png b/libtdegames/carddecks/cards-aisleriot/29.png
new file mode 100644
index 00000000..81060669
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/29.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/3.png b/libtdegames/carddecks/cards-aisleriot/3.png
new file mode 100644
index 00000000..9bc9a017
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/3.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/30.png b/libtdegames/carddecks/cards-aisleriot/30.png
new file mode 100644
index 00000000..d506216a
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/30.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/31.png b/libtdegames/carddecks/cards-aisleriot/31.png
new file mode 100644
index 00000000..e6643631
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/31.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/32.png b/libtdegames/carddecks/cards-aisleriot/32.png
new file mode 100644
index 00000000..225d9c3e
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/32.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/33.png b/libtdegames/carddecks/cards-aisleriot/33.png
new file mode 100644
index 00000000..bb5bd4ec
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/33.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/34.png b/libtdegames/carddecks/cards-aisleriot/34.png
new file mode 100644
index 00000000..a5a0f38d
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/34.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/35.png b/libtdegames/carddecks/cards-aisleriot/35.png
new file mode 100644
index 00000000..72cca325
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/35.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/36.png b/libtdegames/carddecks/cards-aisleriot/36.png
new file mode 100644
index 00000000..8c805d93
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/36.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/37.png b/libtdegames/carddecks/cards-aisleriot/37.png
new file mode 100644
index 00000000..36746eee
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/37.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/38.png b/libtdegames/carddecks/cards-aisleriot/38.png
new file mode 100644
index 00000000..58de88ae
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/38.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/39.png b/libtdegames/carddecks/cards-aisleriot/39.png
new file mode 100644
index 00000000..879c0f78
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/39.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/4.png b/libtdegames/carddecks/cards-aisleriot/4.png
new file mode 100644
index 00000000..6b723627
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/4.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/40.png b/libtdegames/carddecks/cards-aisleriot/40.png
new file mode 100644
index 00000000..e20553ee
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/40.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/41.png b/libtdegames/carddecks/cards-aisleriot/41.png
new file mode 100644
index 00000000..9a023831
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/41.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/42.png b/libtdegames/carddecks/cards-aisleriot/42.png
new file mode 100644
index 00000000..363e44b2
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/42.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/43.png b/libtdegames/carddecks/cards-aisleriot/43.png
new file mode 100644
index 00000000..e2e7b08c
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/43.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/44.png b/libtdegames/carddecks/cards-aisleriot/44.png
new file mode 100644
index 00000000..aeb617f6
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/44.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/45.png b/libtdegames/carddecks/cards-aisleriot/45.png
new file mode 100644
index 00000000..fee4dba0
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/45.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/46.png b/libtdegames/carddecks/cards-aisleriot/46.png
new file mode 100644
index 00000000..f5948439
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/46.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/47.png b/libtdegames/carddecks/cards-aisleriot/47.png
new file mode 100644
index 00000000..0079b371
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/47.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/48.png b/libtdegames/carddecks/cards-aisleriot/48.png
new file mode 100644
index 00000000..62a487da
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/48.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/49.png b/libtdegames/carddecks/cards-aisleriot/49.png
new file mode 100644
index 00000000..87ede197
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/49.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/5.png b/libtdegames/carddecks/cards-aisleriot/5.png
new file mode 100644
index 00000000..8c5df649
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/5.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/50.png b/libtdegames/carddecks/cards-aisleriot/50.png
new file mode 100644
index 00000000..a8a01853
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/50.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/51.png b/libtdegames/carddecks/cards-aisleriot/51.png
new file mode 100644
index 00000000..9f2d83b9
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/51.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/52.png b/libtdegames/carddecks/cards-aisleriot/52.png
new file mode 100644
index 00000000..c5c754b3
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/52.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/6.png b/libtdegames/carddecks/cards-aisleriot/6.png
new file mode 100644
index 00000000..d399ebbb
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/6.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/7.png b/libtdegames/carddecks/cards-aisleriot/7.png
new file mode 100644
index 00000000..754240cd
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/7.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/8.png b/libtdegames/carddecks/cards-aisleriot/8.png
new file mode 100644
index 00000000..805854c0
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/8.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/9.png b/libtdegames/carddecks/cards-aisleriot/9.png
new file mode 100644
index 00000000..9c032e48
Binary files /dev/null and b/libtdegames/carddecks/cards-aisleriot/9.png differ
diff --git a/libtdegames/carddecks/cards-aisleriot/COPYRIGHT b/libtdegames/carddecks/cards-aisleriot/COPYRIGHT
new file mode 100644
index 00000000..bfbeeca7
--- /dev/null
+++ b/libtdegames/carddecks/cards-aisleriot/COPYRIGHT
@@ -0,0 +1,10 @@
+This PySol cardset was adapted from gnome-games 0.27 (aisleriot).
+http://www.gnome.org
+
+Copyright (C) 1998 Jonathan Blandford <jrb@mit.edu>
+Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
+
+This cardset is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-aisleriot/index.desktop b/libtdegames/carddecks/cards-aisleriot/index.desktop
new file mode 100644
index 00000000..e70c235b
--- /dev/null
+++ b/libtdegames/carddecks/cards-aisleriot/index.desktop
@@ -0,0 +1,20 @@
+[KDE Backdeck]
+Name=AisleRiot
+Name[af]=Aisleriot
+Name[be]=Эслрыёт (пасьянсы)
+Name[bg]=Айсълриот
+Name[bn]=এইসলরায়োট
+Name[cs]=Pozdvižení v uličce
+Name[eo]=Simpla
+Name[hi]=एस्लेरियॉट
+Name[hr]=Pobuna u prolazu
+Name[ne]=आइस्ले रिओट
+Name[pa]=ਇਲਸੀਰਓਟ
+Name[ru]=ЭшлРиот (коллекция пасьянсов)
+Name[sv]=Kyrkouppror
+Name[ta]= அய்ஸில்ரியாட்
+Name[uk]=Заколот на човні
+Name[vi]= AisleRiot
+Name[zu]=I-AisleRiot
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-default/1.png b/libtdegames/carddecks/cards-default/1.png
new file mode 100644
index 00000000..8f5de97f
Binary files /dev/null and b/libtdegames/carddecks/cards-default/1.png differ
diff --git a/libtdegames/carddecks/cards-default/10.png b/libtdegames/carddecks/cards-default/10.png
new file mode 100644
index 00000000..6c7b87ea
Binary files /dev/null and b/libtdegames/carddecks/cards-default/10.png differ
diff --git a/libtdegames/carddecks/cards-default/11.png b/libtdegames/carddecks/cards-default/11.png
new file mode 100644
index 00000000..a5938708
Binary files /dev/null and b/libtdegames/carddecks/cards-default/11.png differ
diff --git a/libtdegames/carddecks/cards-default/12.png b/libtdegames/carddecks/cards-default/12.png
new file mode 100644
index 00000000..4d43a730
Binary files /dev/null and b/libtdegames/carddecks/cards-default/12.png differ
diff --git a/libtdegames/carddecks/cards-default/13.png b/libtdegames/carddecks/cards-default/13.png
new file mode 100644
index 00000000..c7d51207
Binary files /dev/null and b/libtdegames/carddecks/cards-default/13.png differ
diff --git a/libtdegames/carddecks/cards-default/14.png b/libtdegames/carddecks/cards-default/14.png
new file mode 100644
index 00000000..2efb9b18
Binary files /dev/null and b/libtdegames/carddecks/cards-default/14.png differ
diff --git a/libtdegames/carddecks/cards-default/15.png b/libtdegames/carddecks/cards-default/15.png
new file mode 100644
index 00000000..8208b271
Binary files /dev/null and b/libtdegames/carddecks/cards-default/15.png differ
diff --git a/libtdegames/carddecks/cards-default/16.png b/libtdegames/carddecks/cards-default/16.png
new file mode 100644
index 00000000..73c5fce5
Binary files /dev/null and b/libtdegames/carddecks/cards-default/16.png differ
diff --git a/libtdegames/carddecks/cards-default/17.png b/libtdegames/carddecks/cards-default/17.png
new file mode 100644
index 00000000..611b7aff
Binary files /dev/null and b/libtdegames/carddecks/cards-default/17.png differ
diff --git a/libtdegames/carddecks/cards-default/18.png b/libtdegames/carddecks/cards-default/18.png
new file mode 100644
index 00000000..8b7d1a1e
Binary files /dev/null and b/libtdegames/carddecks/cards-default/18.png differ
diff --git a/libtdegames/carddecks/cards-default/19.png b/libtdegames/carddecks/cards-default/19.png
new file mode 100644
index 00000000..0a9dac18
Binary files /dev/null and b/libtdegames/carddecks/cards-default/19.png differ
diff --git a/libtdegames/carddecks/cards-default/2.png b/libtdegames/carddecks/cards-default/2.png
new file mode 100644
index 00000000..b0c67169
Binary files /dev/null and b/libtdegames/carddecks/cards-default/2.png differ
diff --git a/libtdegames/carddecks/cards-default/20.png b/libtdegames/carddecks/cards-default/20.png
new file mode 100644
index 00000000..0657a091
Binary files /dev/null and b/libtdegames/carddecks/cards-default/20.png differ
diff --git a/libtdegames/carddecks/cards-default/21.png b/libtdegames/carddecks/cards-default/21.png
new file mode 100644
index 00000000..fe376ba1
Binary files /dev/null and b/libtdegames/carddecks/cards-default/21.png differ
diff --git a/libtdegames/carddecks/cards-default/22.png b/libtdegames/carddecks/cards-default/22.png
new file mode 100644
index 00000000..2a0e5d30
Binary files /dev/null and b/libtdegames/carddecks/cards-default/22.png differ
diff --git a/libtdegames/carddecks/cards-default/23.png b/libtdegames/carddecks/cards-default/23.png
new file mode 100644
index 00000000..52403931
Binary files /dev/null and b/libtdegames/carddecks/cards-default/23.png differ
diff --git a/libtdegames/carddecks/cards-default/24.png b/libtdegames/carddecks/cards-default/24.png
new file mode 100644
index 00000000..5af94ec7
Binary files /dev/null and b/libtdegames/carddecks/cards-default/24.png differ
diff --git a/libtdegames/carddecks/cards-default/25.png b/libtdegames/carddecks/cards-default/25.png
new file mode 100644
index 00000000..cc437aea
Binary files /dev/null and b/libtdegames/carddecks/cards-default/25.png differ
diff --git a/libtdegames/carddecks/cards-default/26.png b/libtdegames/carddecks/cards-default/26.png
new file mode 100644
index 00000000..d034f06f
Binary files /dev/null and b/libtdegames/carddecks/cards-default/26.png differ
diff --git a/libtdegames/carddecks/cards-default/27.png b/libtdegames/carddecks/cards-default/27.png
new file mode 100644
index 00000000..a23fe6ff
Binary files /dev/null and b/libtdegames/carddecks/cards-default/27.png differ
diff --git a/libtdegames/carddecks/cards-default/28.png b/libtdegames/carddecks/cards-default/28.png
new file mode 100644
index 00000000..dcccaac2
Binary files /dev/null and b/libtdegames/carddecks/cards-default/28.png differ
diff --git a/libtdegames/carddecks/cards-default/29.png b/libtdegames/carddecks/cards-default/29.png
new file mode 100644
index 00000000..e19070bd
Binary files /dev/null and b/libtdegames/carddecks/cards-default/29.png differ
diff --git a/libtdegames/carddecks/cards-default/3.png b/libtdegames/carddecks/cards-default/3.png
new file mode 100644
index 00000000..1854faba
Binary files /dev/null and b/libtdegames/carddecks/cards-default/3.png differ
diff --git a/libtdegames/carddecks/cards-default/30.png b/libtdegames/carddecks/cards-default/30.png
new file mode 100644
index 00000000..d9b285c0
Binary files /dev/null and b/libtdegames/carddecks/cards-default/30.png differ
diff --git a/libtdegames/carddecks/cards-default/31.png b/libtdegames/carddecks/cards-default/31.png
new file mode 100644
index 00000000..b77a5d8d
Binary files /dev/null and b/libtdegames/carddecks/cards-default/31.png differ
diff --git a/libtdegames/carddecks/cards-default/32.png b/libtdegames/carddecks/cards-default/32.png
new file mode 100644
index 00000000..0e0649bf
Binary files /dev/null and b/libtdegames/carddecks/cards-default/32.png differ
diff --git a/libtdegames/carddecks/cards-default/33.png b/libtdegames/carddecks/cards-default/33.png
new file mode 100644
index 00000000..d1344b0f
Binary files /dev/null and b/libtdegames/carddecks/cards-default/33.png differ
diff --git a/libtdegames/carddecks/cards-default/34.png b/libtdegames/carddecks/cards-default/34.png
new file mode 100644
index 00000000..9ff5f5aa
Binary files /dev/null and b/libtdegames/carddecks/cards-default/34.png differ
diff --git a/libtdegames/carddecks/cards-default/35.png b/libtdegames/carddecks/cards-default/35.png
new file mode 100644
index 00000000..b247d95e
Binary files /dev/null and b/libtdegames/carddecks/cards-default/35.png differ
diff --git a/libtdegames/carddecks/cards-default/36.png b/libtdegames/carddecks/cards-default/36.png
new file mode 100644
index 00000000..f5284e87
Binary files /dev/null and b/libtdegames/carddecks/cards-default/36.png differ
diff --git a/libtdegames/carddecks/cards-default/37.png b/libtdegames/carddecks/cards-default/37.png
new file mode 100644
index 00000000..e4a2fa70
Binary files /dev/null and b/libtdegames/carddecks/cards-default/37.png differ
diff --git a/libtdegames/carddecks/cards-default/38.png b/libtdegames/carddecks/cards-default/38.png
new file mode 100644
index 00000000..859e4a52
Binary files /dev/null and b/libtdegames/carddecks/cards-default/38.png differ
diff --git a/libtdegames/carddecks/cards-default/39.png b/libtdegames/carddecks/cards-default/39.png
new file mode 100644
index 00000000..b4392112
Binary files /dev/null and b/libtdegames/carddecks/cards-default/39.png differ
diff --git a/libtdegames/carddecks/cards-default/4.png b/libtdegames/carddecks/cards-default/4.png
new file mode 100644
index 00000000..136c3100
Binary files /dev/null and b/libtdegames/carddecks/cards-default/4.png differ
diff --git a/libtdegames/carddecks/cards-default/40.png b/libtdegames/carddecks/cards-default/40.png
new file mode 100644
index 00000000..2a30304a
Binary files /dev/null and b/libtdegames/carddecks/cards-default/40.png differ
diff --git a/libtdegames/carddecks/cards-default/41.png b/libtdegames/carddecks/cards-default/41.png
new file mode 100644
index 00000000..2c619dc3
Binary files /dev/null and b/libtdegames/carddecks/cards-default/41.png differ
diff --git a/libtdegames/carddecks/cards-default/42.png b/libtdegames/carddecks/cards-default/42.png
new file mode 100644
index 00000000..5200e878
Binary files /dev/null and b/libtdegames/carddecks/cards-default/42.png differ
diff --git a/libtdegames/carddecks/cards-default/43.png b/libtdegames/carddecks/cards-default/43.png
new file mode 100644
index 00000000..ebd6db3f
Binary files /dev/null and b/libtdegames/carddecks/cards-default/43.png differ
diff --git a/libtdegames/carddecks/cards-default/44.png b/libtdegames/carddecks/cards-default/44.png
new file mode 100644
index 00000000..8cdcd68f
Binary files /dev/null and b/libtdegames/carddecks/cards-default/44.png differ
diff --git a/libtdegames/carddecks/cards-default/45.png b/libtdegames/carddecks/cards-default/45.png
new file mode 100644
index 00000000..9297d188
Binary files /dev/null and b/libtdegames/carddecks/cards-default/45.png differ
diff --git a/libtdegames/carddecks/cards-default/46.png b/libtdegames/carddecks/cards-default/46.png
new file mode 100644
index 00000000..1b47218e
Binary files /dev/null and b/libtdegames/carddecks/cards-default/46.png differ
diff --git a/libtdegames/carddecks/cards-default/47.png b/libtdegames/carddecks/cards-default/47.png
new file mode 100644
index 00000000..8fd3853d
Binary files /dev/null and b/libtdegames/carddecks/cards-default/47.png differ
diff --git a/libtdegames/carddecks/cards-default/48.png b/libtdegames/carddecks/cards-default/48.png
new file mode 100644
index 00000000..01eea71b
Binary files /dev/null and b/libtdegames/carddecks/cards-default/48.png differ
diff --git a/libtdegames/carddecks/cards-default/49.png b/libtdegames/carddecks/cards-default/49.png
new file mode 100644
index 00000000..d6860e04
Binary files /dev/null and b/libtdegames/carddecks/cards-default/49.png differ
diff --git a/libtdegames/carddecks/cards-default/5.png b/libtdegames/carddecks/cards-default/5.png
new file mode 100644
index 00000000..64029ed0
Binary files /dev/null and b/libtdegames/carddecks/cards-default/5.png differ
diff --git a/libtdegames/carddecks/cards-default/50.png b/libtdegames/carddecks/cards-default/50.png
new file mode 100644
index 00000000..79c1ed05
Binary files /dev/null and b/libtdegames/carddecks/cards-default/50.png differ
diff --git a/libtdegames/carddecks/cards-default/51.png b/libtdegames/carddecks/cards-default/51.png
new file mode 100644
index 00000000..f396b946
Binary files /dev/null and b/libtdegames/carddecks/cards-default/51.png differ
diff --git a/libtdegames/carddecks/cards-default/52.png b/libtdegames/carddecks/cards-default/52.png
new file mode 100644
index 00000000..dcdc90e5
Binary files /dev/null and b/libtdegames/carddecks/cards-default/52.png differ
diff --git a/libtdegames/carddecks/cards-default/6.png b/libtdegames/carddecks/cards-default/6.png
new file mode 100644
index 00000000..1749b472
Binary files /dev/null and b/libtdegames/carddecks/cards-default/6.png differ
diff --git a/libtdegames/carddecks/cards-default/7.png b/libtdegames/carddecks/cards-default/7.png
new file mode 100644
index 00000000..2d33965c
Binary files /dev/null and b/libtdegames/carddecks/cards-default/7.png differ
diff --git a/libtdegames/carddecks/cards-default/8.png b/libtdegames/carddecks/cards-default/8.png
new file mode 100644
index 00000000..165bd76b
Binary files /dev/null and b/libtdegames/carddecks/cards-default/8.png differ
diff --git a/libtdegames/carddecks/cards-default/9.png b/libtdegames/carddecks/cards-default/9.png
new file mode 100644
index 00000000..9860c535
Binary files /dev/null and b/libtdegames/carddecks/cards-default/9.png differ
diff --git a/libtdegames/carddecks/cards-default/index.desktop b/libtdegames/carddecks/cards-default/index.desktop
new file mode 100644
index 00000000..63894a1b
--- /dev/null
+++ b/libtdegames/carddecks/cards-default/index.desktop
@@ -0,0 +1,115 @@
+[KDE Backdeck]
+Name=Standard
+Name[af]=Standaard
+Name[az]=Standart
+Name[be]=Звычайная
+Name[bg]=Стандарт
+Name[bn]=প্রমিত
+Name[br]=Reoliek
+Name[ca]=Estàndard
+Name[cs]=Standardní
+Name[cy]=Safonol
+Name[eo]=Normala
+Name[es]=Estándar
+Name[eu]=Estandarra
+Name[fa]=استاندارد
+Name[fi]=Normaali
+Name[ga]=Caighdeánach
+Name[gl]=Estándar
+Name[hi]=मानक
+Name[is]=Staðlað
+Name[ja]=標準
+Name[km]=ខ្នាត​គំរូ
+Name[ko]=표준
+Name[lt]=Standartas
+Name[lv]=Standarta
+Name[mk]=Стандард
+Name[ne]=मानक
+Name[nl]=Standaard
+Name[nso]=Lekanetse
+Name[pa]=ਮਿਆਰ
+Name[pt]=Normal
+Name[pt_BR]=Padrão
+Name[ru]=Стандарт
+Name[se]=Standárda
+Name[sk]=Štandard
+Name[sr]=Стандардни
+Name[sr@Latn]=Standardni
+Name[ta]= தரம்
+Name[tg]=Низоммеъёр
+Name[th]=มาตรฐาน
+Name[tr]=Standart
+Name[uk]=Типові
+Name[uz]=Andoza
+Name[uz@cyrillic]=Андоза
+Name[ven]=Murole
+Name[vi]=Tiêu chuẩn 
+Name[wa]=Sitandård
+Name[xh]=Umgangatho
+Name[zh_CN]=标准
+Name[zh_TW]=標準
+Name[zu]=Okulingeneyo
+Preview=11.png
+PySol=false
+Comment=Standard KDE card set\nGPL license
+Comment[af]=Standaard Kde kaart stel\nGPL lisensie
+Comment[az]=Standart KDE kart dəstəsi\nGPL license
+Comment[be]=Звычайная калода картаў KDE\nGPL license
+Comment[bg]=Стандартна колода карти KDE\nОПЛ лиценз(GPL)
+Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট\nজি.পি.এল. লাইসেন্স
+Comment[bs]=Standardni KDE špil karata\nGPL license
+Comment[ca]=Joc de cartes estàndard per al KDE sota\nLlicència GPL
+Comment[cs]=Standardní sada karet KDE\nGPL licence
+Comment[cy]=Trwydded GPL safonol\nar gyfer set cerdiau KDE
+Comment[da]=Standard KDE-kortspil\nGPL-licens
+Comment[de]=Standardmäßige KDE-Karten\nGPL-Lizenz
+Comment[el]=Προκαθορισμένο σετ καρτών του KDE\nΆδεια GPL
+Comment[en_GB]=Standard KDE card set\nGPL licence
+Comment[eo]=Normala KDEa kartaro\nGPL licenco
+Comment[es]=Juego de cartas estándar de KDE\nLicencia GPL
+Comment[et]=Standardne KDE kaardikomplekt\nGPL litsents
+Comment[eu]=KDE-ren karta-sorta estandarra\nGPL lizentzia
+Comment[fa]=مجموعه استاندارد کارت KDE\مجوز nGPL
+Comment[fi]=Normaali KDE:n korttipakka\nGPL lisenssi
+Comment[fr]=Jeu de cartes standard de KDE\nLicence GPL
+Comment[gl]=Baralla de cartas estándar de KDE\nGPL license
+Comment[he]=ערכת הקלפים הסטנדרטית של KDE\nרישיון GPL
+Comment[hi]=मानक केडीई ताश सेट\nजीपीएल अनुज्ञापत्र
+Comment[hr]=Standardni KDE komplet karata\nGPL licenca
+Comment[hu]=Standard KDE kártyacsomag\n(GPL licencű)
+Comment[is]=Venjulegi KDE spilastokkurinn\nGPL leyfi
+Comment[it]=Insieme di carte standard di KDE\nLicenza GPL
+Comment[ja]=標準 KDE カードセット\nGPL ライセンス
+Comment[km]=បណ្ដុំ​បៀ KDE ខ្នាត​គំរូ\nអជ្ញាបណ្ណ GPL
+Comment[ko]=표준 KDE 카드 모음\nGPL 라이선스
+Comment[lt]=Standartinis KDE kortų rinkinys\nGPL licencija
+Comment[lv]=Standarta KDE kāršu komplekts\n GPL licenze
+Comment[mk]=Стандарден комплет на карти во KDE\nGPL-лиценца
+Comment[mt]=Mazz karti standard KDE\nliċenzja GPL
+Comment[nb]=Standard KDE sett med kort\nGPL-lisens
+Comment[nds]=KDE-Standardkoorten\nGPL-Lizenz
+Comment[ne]=मानक केडीई कार्ड सेट\nGPL इजाजतपत्र
+Comment[nl]=Standaard KDE-kaartrug\nGPL-licentie
+Comment[nn]=Standard KDE-kortstokk\nGPL-lisens
+Comment[pl]=Standardowy zestaw kart KDE\nLicencja GPL
+Comment[pt]=Baralho de cartas normal do KDE\nLicença GPL
+Comment[pt_BR]=Jogo de cartas padrão do KDE\nLicença GPL
+Comment[ro]=Set de cărţi KDE standard\nLicenţă GPL
+Comment[ru]=Стандартная колода карт KDE\nЛицензия: GPL
+Comment[sk]=Štandardný balíček kariet KDE\nlicencia GPL
+Comment[sl]=Standardni nabor kart v KDE\nLicenca GPL
+Comment[sr]=Стандардни KDE-ов шпил карата\nGPL лиценца
+Comment[sr@Latn]=Standardni KDE-ov špil karata\nGPL licenca
+Comment[sv]=Förvald KDE-kortlek\nGPL-licens
+Comment[ta]=நிலையான கேடிஇ சீட்டு அமைப்பு \nGPL இயக்க ஆணை
+Comment[tg]=Маҷмӯи кортҳои низомии KDE\nлитсензияи GPL
+Comment[th]=ชุดของเกมไพ่ของ KDE\nลิขสิทธิ์แบบ GPL
+Comment[tr]=Standart KDE kart seti\nGPL lisansı
+Comment[uk]=Типовий набір карт KDE\nліцензія GPL
+Comment[ven]=U vhekanya ha magarata a KDE ya Murole\tendelo ya nGPL
+Comment[vi]=Thẻ KDE tiêu chuẩn đặt \nGPL license
+Comment[wa]=Cwårdjeus standård di KDE\ndizo licince GPL
+Comment[xh]=Umgangatho wekhadi le KDE iqela lekhadi \nGPL imvumelwano
+Comment[zh_CN]=标准 KDE 牌面\nGPL 授权
+Comment[zh_TW]=標準 KDE 牌局\nGPL 授權
+Comment[zu]=Iqoqo lamakhadi elilingeneyo le-KDE\n ilayisensi ye-GPL
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/1.png b/libtdegames/carddecks/cards-dondorf-whist-b/1.png
new file mode 100644
index 00000000..89c86909
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/1.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/10.png b/libtdegames/carddecks/cards-dondorf-whist-b/10.png
new file mode 100644
index 00000000..5113cad8
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/10.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/11.png b/libtdegames/carddecks/cards-dondorf-whist-b/11.png
new file mode 100644
index 00000000..11fc7e05
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/11.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/12.png b/libtdegames/carddecks/cards-dondorf-whist-b/12.png
new file mode 100644
index 00000000..a2307ddc
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/12.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/13.png b/libtdegames/carddecks/cards-dondorf-whist-b/13.png
new file mode 100644
index 00000000..0b9e20cd
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/13.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/14.png b/libtdegames/carddecks/cards-dondorf-whist-b/14.png
new file mode 100644
index 00000000..1c49f750
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/14.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/15.png b/libtdegames/carddecks/cards-dondorf-whist-b/15.png
new file mode 100644
index 00000000..ab295e25
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/15.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/16.png b/libtdegames/carddecks/cards-dondorf-whist-b/16.png
new file mode 100644
index 00000000..d8bd8402
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/16.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/17.png b/libtdegames/carddecks/cards-dondorf-whist-b/17.png
new file mode 100644
index 00000000..d3a3f6ed
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/17.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/18.png b/libtdegames/carddecks/cards-dondorf-whist-b/18.png
new file mode 100644
index 00000000..12831991
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/18.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/19.png b/libtdegames/carddecks/cards-dondorf-whist-b/19.png
new file mode 100644
index 00000000..e7199dce
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/19.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/2.png b/libtdegames/carddecks/cards-dondorf-whist-b/2.png
new file mode 100644
index 00000000..93ec9944
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/2.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/20.png b/libtdegames/carddecks/cards-dondorf-whist-b/20.png
new file mode 100644
index 00000000..90b043f0
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/20.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/21.png b/libtdegames/carddecks/cards-dondorf-whist-b/21.png
new file mode 100644
index 00000000..905ccd6a
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/21.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/22.png b/libtdegames/carddecks/cards-dondorf-whist-b/22.png
new file mode 100644
index 00000000..2eee5bbc
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/22.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/23.png b/libtdegames/carddecks/cards-dondorf-whist-b/23.png
new file mode 100644
index 00000000..b717110e
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/23.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/24.png b/libtdegames/carddecks/cards-dondorf-whist-b/24.png
new file mode 100644
index 00000000..4c05cd1d
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/24.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/25.png b/libtdegames/carddecks/cards-dondorf-whist-b/25.png
new file mode 100644
index 00000000..c6701d0d
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/25.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/26.png b/libtdegames/carddecks/cards-dondorf-whist-b/26.png
new file mode 100644
index 00000000..a737f469
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/26.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/27.png b/libtdegames/carddecks/cards-dondorf-whist-b/27.png
new file mode 100644
index 00000000..c904309b
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/27.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/28.png b/libtdegames/carddecks/cards-dondorf-whist-b/28.png
new file mode 100644
index 00000000..8da263d7
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/28.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/29.png b/libtdegames/carddecks/cards-dondorf-whist-b/29.png
new file mode 100644
index 00000000..8ff7822d
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/29.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/3.png b/libtdegames/carddecks/cards-dondorf-whist-b/3.png
new file mode 100644
index 00000000..7f5644f8
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/3.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/30.png b/libtdegames/carddecks/cards-dondorf-whist-b/30.png
new file mode 100644
index 00000000..c93c64dc
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/30.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/31.png b/libtdegames/carddecks/cards-dondorf-whist-b/31.png
new file mode 100644
index 00000000..912cbf79
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/31.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/32.png b/libtdegames/carddecks/cards-dondorf-whist-b/32.png
new file mode 100644
index 00000000..9b72443c
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/32.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/33.png b/libtdegames/carddecks/cards-dondorf-whist-b/33.png
new file mode 100644
index 00000000..20f863ac
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/33.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/34.png b/libtdegames/carddecks/cards-dondorf-whist-b/34.png
new file mode 100644
index 00000000..7763d965
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/34.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/35.png b/libtdegames/carddecks/cards-dondorf-whist-b/35.png
new file mode 100644
index 00000000..29eaef82
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/35.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/36.png b/libtdegames/carddecks/cards-dondorf-whist-b/36.png
new file mode 100644
index 00000000..fd72b718
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/36.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/37.png b/libtdegames/carddecks/cards-dondorf-whist-b/37.png
new file mode 100644
index 00000000..15a2b979
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/37.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/38.png b/libtdegames/carddecks/cards-dondorf-whist-b/38.png
new file mode 100644
index 00000000..91551173
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/38.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/39.png b/libtdegames/carddecks/cards-dondorf-whist-b/39.png
new file mode 100644
index 00000000..dcb66d00
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/39.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/4.png b/libtdegames/carddecks/cards-dondorf-whist-b/4.png
new file mode 100644
index 00000000..1033ffd0
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/4.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/40.png b/libtdegames/carddecks/cards-dondorf-whist-b/40.png
new file mode 100644
index 00000000..a1b9b2e9
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/40.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/41.png b/libtdegames/carddecks/cards-dondorf-whist-b/41.png
new file mode 100644
index 00000000..8d7ca55b
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/41.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/42.png b/libtdegames/carddecks/cards-dondorf-whist-b/42.png
new file mode 100644
index 00000000..4570430b
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/42.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/43.png b/libtdegames/carddecks/cards-dondorf-whist-b/43.png
new file mode 100644
index 00000000..c889b795
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/43.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/44.png b/libtdegames/carddecks/cards-dondorf-whist-b/44.png
new file mode 100644
index 00000000..b73bd4d1
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/44.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/45.png b/libtdegames/carddecks/cards-dondorf-whist-b/45.png
new file mode 100644
index 00000000..de6730cd
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/45.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/46.png b/libtdegames/carddecks/cards-dondorf-whist-b/46.png
new file mode 100644
index 00000000..f20edcc9
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/46.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/47.png b/libtdegames/carddecks/cards-dondorf-whist-b/47.png
new file mode 100644
index 00000000..50ec6b95
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/47.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/48.png b/libtdegames/carddecks/cards-dondorf-whist-b/48.png
new file mode 100644
index 00000000..c0bfdfbd
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/48.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/49.png b/libtdegames/carddecks/cards-dondorf-whist-b/49.png
new file mode 100644
index 00000000..c8803ffa
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/49.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/5.png b/libtdegames/carddecks/cards-dondorf-whist-b/5.png
new file mode 100644
index 00000000..0fb9ffcf
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/5.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/50.png b/libtdegames/carddecks/cards-dondorf-whist-b/50.png
new file mode 100644
index 00000000..6d8c891e
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/50.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/51.png b/libtdegames/carddecks/cards-dondorf-whist-b/51.png
new file mode 100644
index 00000000..fc2c76d0
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/51.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/52.png b/libtdegames/carddecks/cards-dondorf-whist-b/52.png
new file mode 100644
index 00000000..6aef81aa
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/52.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/6.png b/libtdegames/carddecks/cards-dondorf-whist-b/6.png
new file mode 100644
index 00000000..f70072cf
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/6.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/7.png b/libtdegames/carddecks/cards-dondorf-whist-b/7.png
new file mode 100644
index 00000000..1dd352dc
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/7.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/8.png b/libtdegames/carddecks/cards-dondorf-whist-b/8.png
new file mode 100644
index 00000000..087906ca
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/8.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/9.png b/libtdegames/carddecks/cards-dondorf-whist-b/9.png
new file mode 100644
index 00000000..9bb290ee
Binary files /dev/null and b/libtdegames/carddecks/cards-dondorf-whist-b/9.png differ
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT b/libtdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
new file mode 100644
index 00000000..917bc1e3
--- /dev/null
+++ b/libtdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
@@ -0,0 +1,12 @@
+This PySol cardset was created by T. Kirk.
+
+Copyright (C) 2000 T. Kirk <grania@mailcity.com>
+
+This card set uses the court and Ace images from a deck published
+by Dondorf and Co. of Frankfurt in 1896.  The cards are double ended
+and have different images on each end.  Two card sets were produced.
+
+This card set is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-dondorf-whist-b/index.desktop b/libtdegames/carddecks/cards-dondorf-whist-b/index.desktop
new file mode 100644
index 00000000..6626e825
--- /dev/null
+++ b/libtdegames/carddecks/cards-dondorf-whist-b/index.desktop
@@ -0,0 +1,17 @@
+[KDE Backdeck]
+Name=Dondorf
+Name[be]=Дандорф
+Name[bg]=Дондроф
+Name[bn]=ডনডর্ফ
+Name[eo]=Bela
+Name[hi]=डॉनड्रॉफ
+Name[lv]=Dondorfa
+Name[mk]=Дондорф
+Name[ne]=डनडोर्फ
+Name[ru]=Дондорф
+Name[sr]=Дондорф
+Name[ta]=டேன்டார்ஃப்
+Name[tg]=Дондорф
+Name[zu]=I-Dondorf
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/1.png b/libtdegames/carddecks/cards-gdkcard-bonded/1.png
new file mode 100644
index 00000000..17c1ac79
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/1.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/10.png b/libtdegames/carddecks/cards-gdkcard-bonded/10.png
new file mode 100644
index 00000000..f9fe505b
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/10.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/11.png b/libtdegames/carddecks/cards-gdkcard-bonded/11.png
new file mode 100644
index 00000000..9fa6e5ec
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/11.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/12.png b/libtdegames/carddecks/cards-gdkcard-bonded/12.png
new file mode 100644
index 00000000..09089e70
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/12.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/13.png b/libtdegames/carddecks/cards-gdkcard-bonded/13.png
new file mode 100644
index 00000000..cb6b0e6f
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/13.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/14.png b/libtdegames/carddecks/cards-gdkcard-bonded/14.png
new file mode 100644
index 00000000..027217be
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/14.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/15.png b/libtdegames/carddecks/cards-gdkcard-bonded/15.png
new file mode 100644
index 00000000..b9054f4f
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/15.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/16.png b/libtdegames/carddecks/cards-gdkcard-bonded/16.png
new file mode 100644
index 00000000..7b14d54a
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/16.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/17.png b/libtdegames/carddecks/cards-gdkcard-bonded/17.png
new file mode 100644
index 00000000..e4d9b798
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/17.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/18.png b/libtdegames/carddecks/cards-gdkcard-bonded/18.png
new file mode 100644
index 00000000..c0fe1954
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/18.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/19.png b/libtdegames/carddecks/cards-gdkcard-bonded/19.png
new file mode 100644
index 00000000..7f24d523
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/19.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/2.png b/libtdegames/carddecks/cards-gdkcard-bonded/2.png
new file mode 100644
index 00000000..7d8cbbcb
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/2.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/20.png b/libtdegames/carddecks/cards-gdkcard-bonded/20.png
new file mode 100644
index 00000000..1a6e01c9
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/20.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/21.png b/libtdegames/carddecks/cards-gdkcard-bonded/21.png
new file mode 100644
index 00000000..c217b982
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/21.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/22.png b/libtdegames/carddecks/cards-gdkcard-bonded/22.png
new file mode 100644
index 00000000..82ce9196
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/22.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/23.png b/libtdegames/carddecks/cards-gdkcard-bonded/23.png
new file mode 100644
index 00000000..03850bef
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/23.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/24.png b/libtdegames/carddecks/cards-gdkcard-bonded/24.png
new file mode 100644
index 00000000..990289f6
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/24.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/25.png b/libtdegames/carddecks/cards-gdkcard-bonded/25.png
new file mode 100644
index 00000000..04ea602f
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/25.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/26.png b/libtdegames/carddecks/cards-gdkcard-bonded/26.png
new file mode 100644
index 00000000..705a22a2
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/26.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/27.png b/libtdegames/carddecks/cards-gdkcard-bonded/27.png
new file mode 100644
index 00000000..cf5ea112
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/27.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/28.png b/libtdegames/carddecks/cards-gdkcard-bonded/28.png
new file mode 100644
index 00000000..d613413c
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/28.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/29.png b/libtdegames/carddecks/cards-gdkcard-bonded/29.png
new file mode 100644
index 00000000..8838c750
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/29.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/3.png b/libtdegames/carddecks/cards-gdkcard-bonded/3.png
new file mode 100644
index 00000000..563a6385
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/3.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/30.png b/libtdegames/carddecks/cards-gdkcard-bonded/30.png
new file mode 100644
index 00000000..4fb2901b
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/30.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/31.png b/libtdegames/carddecks/cards-gdkcard-bonded/31.png
new file mode 100644
index 00000000..8bcd3090
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/31.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/32.png b/libtdegames/carddecks/cards-gdkcard-bonded/32.png
new file mode 100644
index 00000000..c5fb66db
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/32.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/33.png b/libtdegames/carddecks/cards-gdkcard-bonded/33.png
new file mode 100644
index 00000000..43d4df04
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/33.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/34.png b/libtdegames/carddecks/cards-gdkcard-bonded/34.png
new file mode 100644
index 00000000..1bf6c975
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/34.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/35.png b/libtdegames/carddecks/cards-gdkcard-bonded/35.png
new file mode 100644
index 00000000..ba85c37e
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/35.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/36.png b/libtdegames/carddecks/cards-gdkcard-bonded/36.png
new file mode 100644
index 00000000..c45008af
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/36.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/37.png b/libtdegames/carddecks/cards-gdkcard-bonded/37.png
new file mode 100644
index 00000000..05cac5a9
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/37.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/38.png b/libtdegames/carddecks/cards-gdkcard-bonded/38.png
new file mode 100644
index 00000000..7c52ecbf
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/38.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/39.png b/libtdegames/carddecks/cards-gdkcard-bonded/39.png
new file mode 100644
index 00000000..1404295a
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/39.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/4.png b/libtdegames/carddecks/cards-gdkcard-bonded/4.png
new file mode 100644
index 00000000..fbf1b7d2
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/4.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/40.png b/libtdegames/carddecks/cards-gdkcard-bonded/40.png
new file mode 100644
index 00000000..b1c0f317
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/40.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/41.png b/libtdegames/carddecks/cards-gdkcard-bonded/41.png
new file mode 100644
index 00000000..a59a245c
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/41.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/42.png b/libtdegames/carddecks/cards-gdkcard-bonded/42.png
new file mode 100644
index 00000000..104836a5
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/42.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/43.png b/libtdegames/carddecks/cards-gdkcard-bonded/43.png
new file mode 100644
index 00000000..90b51009
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/43.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/44.png b/libtdegames/carddecks/cards-gdkcard-bonded/44.png
new file mode 100644
index 00000000..66960d0d
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/44.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/45.png b/libtdegames/carddecks/cards-gdkcard-bonded/45.png
new file mode 100644
index 00000000..7aabe88f
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/45.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/46.png b/libtdegames/carddecks/cards-gdkcard-bonded/46.png
new file mode 100644
index 00000000..adfb2516
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/46.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/47.png b/libtdegames/carddecks/cards-gdkcard-bonded/47.png
new file mode 100644
index 00000000..0f48a363
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/47.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/48.png b/libtdegames/carddecks/cards-gdkcard-bonded/48.png
new file mode 100644
index 00000000..368c593a
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/48.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/49.png b/libtdegames/carddecks/cards-gdkcard-bonded/49.png
new file mode 100644
index 00000000..a783b506
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/49.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/5.png b/libtdegames/carddecks/cards-gdkcard-bonded/5.png
new file mode 100644
index 00000000..9f809535
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/5.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/50.png b/libtdegames/carddecks/cards-gdkcard-bonded/50.png
new file mode 100644
index 00000000..dacc26cd
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/50.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/51.png b/libtdegames/carddecks/cards-gdkcard-bonded/51.png
new file mode 100644
index 00000000..13a6e924
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/51.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/52.png b/libtdegames/carddecks/cards-gdkcard-bonded/52.png
new file mode 100644
index 00000000..cce8c9f6
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/52.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/6.png b/libtdegames/carddecks/cards-gdkcard-bonded/6.png
new file mode 100644
index 00000000..c679e0c3
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/6.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/7.png b/libtdegames/carddecks/cards-gdkcard-bonded/7.png
new file mode 100644
index 00000000..53b35fbf
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/7.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/8.png b/libtdegames/carddecks/cards-gdkcard-bonded/8.png
new file mode 100644
index 00000000..389d0069
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/8.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/9.png b/libtdegames/carddecks/cards-gdkcard-bonded/9.png
new file mode 100644
index 00000000..59551a1a
Binary files /dev/null and b/libtdegames/carddecks/cards-gdkcard-bonded/9.png differ
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT b/libtdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
new file mode 100644
index 00000000..36052f95
--- /dev/null
+++ b/libtdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
@@ -0,0 +1,13 @@
+This PySol cardset was adapted from gnome-games 1.0.2 (gdk-card-image).
+http://www.gnome.org
+
+Copyright (C) 1994 Heiko Eissfeldt <heiko@colossus.escape.de>
+Copyright (C) 1994 Michael Bischoff <mbi@mo.math.nat.tu-bs.de>
+Copyright (C) 1998 Felix Bellaby <felix@pooh.u-net.com>
+Copyright (C) 1998 Ryu Changwoo <cwryu@eve.kaist.ac.kr>
+Copyright (C) 1999 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
+
+This cardset is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-gdkcard-bonded/index.desktop b/libtdegames/carddecks/cards-gdkcard-bonded/index.desktop
new file mode 100644
index 00000000..68f3ff21
--- /dev/null
+++ b/libtdegames/carddecks/cards-gdkcard-bonded/index.desktop
@@ -0,0 +1,37 @@
+[KDE Backdeck]
+Name=Bonded
+Name[af]=Geheg
+Name[az]=Bağlı
+Name[be]=Перапляценні
+Name[bg]=Завързан
+Name[bn]=আবদ্ধ
+Name[ca]=Unides
+Name[cs]=Lepenka
+Name[de]=Verbunden
+Name[eo]=Benda
+Name[es]=Unidas
+Name[eu]=Estekatua
+Name[fi]=Sidottu
+Name[fr]=Compact
+Name[gl]=Unidas
+Name[hi]=बॉन्डेड
+Name[hr]=Povezano
+Name[is]=Bundið
+Name[lv]=Vienkāršs
+Name[mk]=Врзани
+Name[mt]=Mehmuż
+Name[ne]=बन्डेड
+Name[pt]=Unidos
+Name[pt_BR]=Laçado
+Name[ru]=Переплетения
+Name[sr]=Везан
+Name[sr@Latn]=Vezan
+Name[ta]=பிணைக்கப்பட்ட
+Name[tg]=Печдарпечшавӣ
+Name[tr]=Bağlı
+Name[uk]=Бони
+Name[ven]=Zwo khwathiswa
+Name[xh]=Dibeneyo
+Name[zu]=Kuxhumene
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-hard-a-port/1.png b/libtdegames/carddecks/cards-hard-a-port/1.png
new file mode 100644
index 00000000..05c56268
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/1.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/10.png b/libtdegames/carddecks/cards-hard-a-port/10.png
new file mode 100644
index 00000000..ee2d2072
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/10.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/11.png b/libtdegames/carddecks/cards-hard-a-port/11.png
new file mode 100644
index 00000000..4fd72b89
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/11.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/12.png b/libtdegames/carddecks/cards-hard-a-port/12.png
new file mode 100644
index 00000000..7dd80ce7
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/12.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/13.png b/libtdegames/carddecks/cards-hard-a-port/13.png
new file mode 100644
index 00000000..62edf27c
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/13.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/14.png b/libtdegames/carddecks/cards-hard-a-port/14.png
new file mode 100644
index 00000000..5cfa05ed
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/14.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/15.png b/libtdegames/carddecks/cards-hard-a-port/15.png
new file mode 100644
index 00000000..a950a87c
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/15.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/16.png b/libtdegames/carddecks/cards-hard-a-port/16.png
new file mode 100644
index 00000000..8b0d76f3
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/16.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/17.png b/libtdegames/carddecks/cards-hard-a-port/17.png
new file mode 100644
index 00000000..9625563e
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/17.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/18.png b/libtdegames/carddecks/cards-hard-a-port/18.png
new file mode 100644
index 00000000..715c8443
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/18.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/19.png b/libtdegames/carddecks/cards-hard-a-port/19.png
new file mode 100644
index 00000000..7a3cf664
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/19.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/2.png b/libtdegames/carddecks/cards-hard-a-port/2.png
new file mode 100644
index 00000000..bf4d601f
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/2.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/20.png b/libtdegames/carddecks/cards-hard-a-port/20.png
new file mode 100644
index 00000000..331abc3b
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/20.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/21.png b/libtdegames/carddecks/cards-hard-a-port/21.png
new file mode 100644
index 00000000..59adfb08
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/21.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/22.png b/libtdegames/carddecks/cards-hard-a-port/22.png
new file mode 100644
index 00000000..a1ca8484
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/22.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/23.png b/libtdegames/carddecks/cards-hard-a-port/23.png
new file mode 100644
index 00000000..d97de844
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/23.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/24.png b/libtdegames/carddecks/cards-hard-a-port/24.png
new file mode 100644
index 00000000..65e3da3c
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/24.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/25.png b/libtdegames/carddecks/cards-hard-a-port/25.png
new file mode 100644
index 00000000..14f82b7d
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/25.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/26.png b/libtdegames/carddecks/cards-hard-a-port/26.png
new file mode 100644
index 00000000..e2601df6
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/26.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/27.png b/libtdegames/carddecks/cards-hard-a-port/27.png
new file mode 100644
index 00000000..d18b29d7
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/27.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/28.png b/libtdegames/carddecks/cards-hard-a-port/28.png
new file mode 100644
index 00000000..3dcc0842
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/28.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/29.png b/libtdegames/carddecks/cards-hard-a-port/29.png
new file mode 100644
index 00000000..a0cc5866
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/29.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/3.png b/libtdegames/carddecks/cards-hard-a-port/3.png
new file mode 100644
index 00000000..b78502b9
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/3.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/30.png b/libtdegames/carddecks/cards-hard-a-port/30.png
new file mode 100644
index 00000000..e659dc83
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/30.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/31.png b/libtdegames/carddecks/cards-hard-a-port/31.png
new file mode 100644
index 00000000..db6f599c
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/31.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/32.png b/libtdegames/carddecks/cards-hard-a-port/32.png
new file mode 100644
index 00000000..9e42582f
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/32.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/33.png b/libtdegames/carddecks/cards-hard-a-port/33.png
new file mode 100644
index 00000000..c19f1520
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/33.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/34.png b/libtdegames/carddecks/cards-hard-a-port/34.png
new file mode 100644
index 00000000..139dc9b4
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/34.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/35.png b/libtdegames/carddecks/cards-hard-a-port/35.png
new file mode 100644
index 00000000..62d8a9bc
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/35.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/36.png b/libtdegames/carddecks/cards-hard-a-port/36.png
new file mode 100644
index 00000000..510d150e
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/36.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/37.png b/libtdegames/carddecks/cards-hard-a-port/37.png
new file mode 100644
index 00000000..2e03c9e2
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/37.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/38.png b/libtdegames/carddecks/cards-hard-a-port/38.png
new file mode 100644
index 00000000..e12131f0
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/38.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/39.png b/libtdegames/carddecks/cards-hard-a-port/39.png
new file mode 100644
index 00000000..eae23793
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/39.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/4.png b/libtdegames/carddecks/cards-hard-a-port/4.png
new file mode 100644
index 00000000..9d7f80c1
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/4.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/40.png b/libtdegames/carddecks/cards-hard-a-port/40.png
new file mode 100644
index 00000000..733be70f
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/40.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/41.png b/libtdegames/carddecks/cards-hard-a-port/41.png
new file mode 100644
index 00000000..b3e51b07
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/41.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/42.png b/libtdegames/carddecks/cards-hard-a-port/42.png
new file mode 100644
index 00000000..a6f69d9f
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/42.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/43.png b/libtdegames/carddecks/cards-hard-a-port/43.png
new file mode 100644
index 00000000..49c20875
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/43.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/44.png b/libtdegames/carddecks/cards-hard-a-port/44.png
new file mode 100644
index 00000000..6fed6ead
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/44.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/45.png b/libtdegames/carddecks/cards-hard-a-port/45.png
new file mode 100644
index 00000000..81be70a2
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/45.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/46.png b/libtdegames/carddecks/cards-hard-a-port/46.png
new file mode 100644
index 00000000..d82c5f60
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/46.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/47.png b/libtdegames/carddecks/cards-hard-a-port/47.png
new file mode 100644
index 00000000..f6056465
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/47.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/48.png b/libtdegames/carddecks/cards-hard-a-port/48.png
new file mode 100644
index 00000000..6369f53b
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/48.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/49.png b/libtdegames/carddecks/cards-hard-a-port/49.png
new file mode 100644
index 00000000..49b5b53e
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/49.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/5.png b/libtdegames/carddecks/cards-hard-a-port/5.png
new file mode 100644
index 00000000..6ff98a13
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/5.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/50.png b/libtdegames/carddecks/cards-hard-a-port/50.png
new file mode 100644
index 00000000..ce8e46db
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/50.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/51.png b/libtdegames/carddecks/cards-hard-a-port/51.png
new file mode 100644
index 00000000..46552bee
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/51.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/52.png b/libtdegames/carddecks/cards-hard-a-port/52.png
new file mode 100644
index 00000000..b03db4a0
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/52.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/6.png b/libtdegames/carddecks/cards-hard-a-port/6.png
new file mode 100644
index 00000000..24fa84b0
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/6.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/7.png b/libtdegames/carddecks/cards-hard-a-port/7.png
new file mode 100644
index 00000000..11561878
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/7.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/8.png b/libtdegames/carddecks/cards-hard-a-port/8.png
new file mode 100644
index 00000000..08d124b7
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/8.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/9.png b/libtdegames/carddecks/cards-hard-a-port/9.png
new file mode 100644
index 00000000..14962b11
Binary files /dev/null and b/libtdegames/carddecks/cards-hard-a-port/9.png differ
diff --git a/libtdegames/carddecks/cards-hard-a-port/COPYRIGHT b/libtdegames/carddecks/cards-hard-a-port/COPYRIGHT
new file mode 100644
index 00000000..f5575c7b
--- /dev/null
+++ b/libtdegames/carddecks/cards-hard-a-port/COPYRIGHT
@@ -0,0 +1,14 @@
+This PySol cardset was created by T. Kirk.
+
+Copyright (C) 2000 T. Kirk <grania@mailcity.com>
+
+This transformation card set uses images from a set of trade
+cards produced in the late 19th century in the United States
+of America.  Cards of this type were given away as premiums
+with the purchase of various products.  Each of the cards
+has a different image.
+
+This card set is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-hard-a-port/index.desktop b/libtdegames/carddecks/cards-hard-a-port/index.desktop
new file mode 100644
index 00000000..d8e49aa5
--- /dev/null
+++ b/libtdegames/carddecks/cards-hard-a-port/index.desktop
@@ -0,0 +1,29 @@
+[KDE Backdeck]
+Name=Hard a Port
+Name[af]=Hard 'n Poort
+Name[be]=Пампушка
+Name[bg]=Дамски
+Name[bn]=হার্ড এ পোর্ট
+Name[de]=Hart Backbord
+Name[eo]=Tenta
+Name[hi]=हार्ड ए पोर्ट
+Name[hr]=Tvrdi na portu
+Name[is]=Hart á bakborða
+Name[it]=Donnine
+Name[km]=ច្រក​រឹង
+Name[lv]=Klasisks
+Name[nds]=Hatt Backboord
+Name[ne]=कडा एउटा पोर्ट
+Name[pt_BR]=Duramente um Porto
+Name[ro]=Licenţioase
+Name[ru]=Пышка
+Name[sr]=Хард-а-порт
+Name[sr@Latn]=Hard-a-port
+Name[sv]=Dikt babord
+Name[ta]=முனையத்தை கடினமாக்கு
+Name[tg]=Даргоҳи Сахт
+Name[ven]=Port yo Khwathaho
+Name[xh]=Izibuko Esport eqinileyo
+Name[zu]=Qinisa isikhumulo
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-konqi-modern/1.png b/libtdegames/carddecks/cards-konqi-modern/1.png
new file mode 100644
index 00000000..68dfb0ff
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/1.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/10.png b/libtdegames/carddecks/cards-konqi-modern/10.png
new file mode 100644
index 00000000..6df3ad8d
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/10.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/11.png b/libtdegames/carddecks/cards-konqi-modern/11.png
new file mode 100644
index 00000000..665cb2a6
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/11.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/12.png b/libtdegames/carddecks/cards-konqi-modern/12.png
new file mode 100644
index 00000000..1f23d99e
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/12.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/13.png b/libtdegames/carddecks/cards-konqi-modern/13.png
new file mode 100644
index 00000000..f1027fdc
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/13.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/14.png b/libtdegames/carddecks/cards-konqi-modern/14.png
new file mode 100644
index 00000000..80d11335
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/14.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/15.png b/libtdegames/carddecks/cards-konqi-modern/15.png
new file mode 100644
index 00000000..72913f7b
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/15.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/16.png b/libtdegames/carddecks/cards-konqi-modern/16.png
new file mode 100644
index 00000000..225f7774
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/16.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/17.png b/libtdegames/carddecks/cards-konqi-modern/17.png
new file mode 100644
index 00000000..0444e010
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/17.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/18.png b/libtdegames/carddecks/cards-konqi-modern/18.png
new file mode 100644
index 00000000..f325c781
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/18.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/19.png b/libtdegames/carddecks/cards-konqi-modern/19.png
new file mode 100644
index 00000000..570e951e
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/19.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/2.png b/libtdegames/carddecks/cards-konqi-modern/2.png
new file mode 100644
index 00000000..89b2b4d5
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/2.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/20.png b/libtdegames/carddecks/cards-konqi-modern/20.png
new file mode 100644
index 00000000..d4b47c7d
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/20.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/21.png b/libtdegames/carddecks/cards-konqi-modern/21.png
new file mode 100644
index 00000000..9ab04cc5
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/21.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/22.png b/libtdegames/carddecks/cards-konqi-modern/22.png
new file mode 100644
index 00000000..387c3203
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/22.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/23.png b/libtdegames/carddecks/cards-konqi-modern/23.png
new file mode 100644
index 00000000..fcec2343
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/23.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/24.png b/libtdegames/carddecks/cards-konqi-modern/24.png
new file mode 100644
index 00000000..48c9ed02
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/24.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/25.png b/libtdegames/carddecks/cards-konqi-modern/25.png
new file mode 100644
index 00000000..80bbfdf1
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/25.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/26.png b/libtdegames/carddecks/cards-konqi-modern/26.png
new file mode 100644
index 00000000..2a879ec5
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/26.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/27.png b/libtdegames/carddecks/cards-konqi-modern/27.png
new file mode 100644
index 00000000..1e6141c0
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/27.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/28.png b/libtdegames/carddecks/cards-konqi-modern/28.png
new file mode 100644
index 00000000..1403437e
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/28.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/29.png b/libtdegames/carddecks/cards-konqi-modern/29.png
new file mode 100644
index 00000000..415b48cc
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/29.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/3.png b/libtdegames/carddecks/cards-konqi-modern/3.png
new file mode 100644
index 00000000..43067744
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/3.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/30.png b/libtdegames/carddecks/cards-konqi-modern/30.png
new file mode 100644
index 00000000..8a1b885d
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/30.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/31.png b/libtdegames/carddecks/cards-konqi-modern/31.png
new file mode 100644
index 00000000..c7de49ed
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/31.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/32.png b/libtdegames/carddecks/cards-konqi-modern/32.png
new file mode 100644
index 00000000..57e0015f
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/32.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/33.png b/libtdegames/carddecks/cards-konqi-modern/33.png
new file mode 100644
index 00000000..a502ae94
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/33.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/34.png b/libtdegames/carddecks/cards-konqi-modern/34.png
new file mode 100644
index 00000000..524768dc
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/34.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/35.png b/libtdegames/carddecks/cards-konqi-modern/35.png
new file mode 100644
index 00000000..d15a240e
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/35.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/36.png b/libtdegames/carddecks/cards-konqi-modern/36.png
new file mode 100644
index 00000000..b8dce3f8
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/36.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/37.png b/libtdegames/carddecks/cards-konqi-modern/37.png
new file mode 100644
index 00000000..2f193cc1
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/37.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/38.png b/libtdegames/carddecks/cards-konqi-modern/38.png
new file mode 100644
index 00000000..097d63ff
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/38.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/39.png b/libtdegames/carddecks/cards-konqi-modern/39.png
new file mode 100644
index 00000000..a94a6009
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/39.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/4.png b/libtdegames/carddecks/cards-konqi-modern/4.png
new file mode 100644
index 00000000..b4890c03
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/4.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/40.png b/libtdegames/carddecks/cards-konqi-modern/40.png
new file mode 100644
index 00000000..d533469a
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/40.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/41.png b/libtdegames/carddecks/cards-konqi-modern/41.png
new file mode 100644
index 00000000..f524f7ea
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/41.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/42.png b/libtdegames/carddecks/cards-konqi-modern/42.png
new file mode 100644
index 00000000..9e6ff5af
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/42.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/43.png b/libtdegames/carddecks/cards-konqi-modern/43.png
new file mode 100644
index 00000000..59e9e273
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/43.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/44.png b/libtdegames/carddecks/cards-konqi-modern/44.png
new file mode 100644
index 00000000..a3114bd9
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/44.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/45.png b/libtdegames/carddecks/cards-konqi-modern/45.png
new file mode 100644
index 00000000..2614080b
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/45.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/46.png b/libtdegames/carddecks/cards-konqi-modern/46.png
new file mode 100644
index 00000000..a3118981
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/46.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/47.png b/libtdegames/carddecks/cards-konqi-modern/47.png
new file mode 100644
index 00000000..423ec06e
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/47.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/48.png b/libtdegames/carddecks/cards-konqi-modern/48.png
new file mode 100644
index 00000000..5153c779
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/48.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/49.png b/libtdegames/carddecks/cards-konqi-modern/49.png
new file mode 100644
index 00000000..99f8ae96
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/49.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/5.png b/libtdegames/carddecks/cards-konqi-modern/5.png
new file mode 100644
index 00000000..5e167b1a
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/5.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/50.png b/libtdegames/carddecks/cards-konqi-modern/50.png
new file mode 100644
index 00000000..a9c41757
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/50.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/51.png b/libtdegames/carddecks/cards-konqi-modern/51.png
new file mode 100644
index 00000000..b322fc1b
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/51.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/52.png b/libtdegames/carddecks/cards-konqi-modern/52.png
new file mode 100644
index 00000000..d614733f
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/52.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/6.png b/libtdegames/carddecks/cards-konqi-modern/6.png
new file mode 100644
index 00000000..d614e646
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/6.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/7.png b/libtdegames/carddecks/cards-konqi-modern/7.png
new file mode 100644
index 00000000..961ac50f
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/7.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/8.png b/libtdegames/carddecks/cards-konqi-modern/8.png
new file mode 100644
index 00000000..1769d3db
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/8.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/9.png b/libtdegames/carddecks/cards-konqi-modern/9.png
new file mode 100644
index 00000000..f86dcd48
Binary files /dev/null and b/libtdegames/carddecks/cards-konqi-modern/9.png differ
diff --git a/libtdegames/carddecks/cards-konqi-modern/index.desktop b/libtdegames/carddecks/cards-konqi-modern/index.desktop
new file mode 100644
index 00000000..4dc5fe5c
--- /dev/null
+++ b/libtdegames/carddecks/cards-konqi-modern/index.desktop
@@ -0,0 +1,62 @@
+[KDE Backdeck]
+Name=Konqi
+Name[be]=Конкі
+Name[bg]=Конки
+Name[bn]=কনকি
+Name[cs]=Konqui
+Name[eo]=Konĉja
+Name[hi]=के-ऑन्गी
+Name[it]=Konqui
+Name[lv]=Konvi
+Name[ne]=कोन्क्वी
+Name[ru]=Конки
+Name[sr]=Конки
+Name[sr@Latn]=Konki
+Name[ta]=கான்கி
+Name[tg]=Конки
+Name[uk]=Конкі
+Name[zu]=I-Konqi
+Preview=11.png
+PySol=false
+Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\n Katie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[bs]=Moderni Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n     <l_layland@hotmail.com>\nKatie per Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi per Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKatie vytvořila Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKatie gan Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie von Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi von Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKatie από Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n <l_layland@hotmail.com>\nKonjo de Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonĉjo de Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKatie-ren egilea: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n     لایلند <l_layland@hotmail.com>\nKatie توسط آگنیسکا زاکووسکا\n     <agnieszka@imagegalaxy.de>\nKonqi توسط استفان اسپاتز\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n     <l_layland@hotmail.com>a\nKatie Agnieszka Czajkowskaa\n     <agnieszka@imagegalaxy.de>a\nKonqi Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n     <l_layland@hotmail.com>\nKatie par Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi par Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n     <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[is]=Nútíma Konqi - spilastokkur fjölskyldunnar\nHönnun: Laura Layland\n <l_layland@hotmail.com>\nKatie e. Agnieszka Czajkowska\n    <agnieszka@imagegalaxy.de>\nKonqi e. Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[it]=Konqui moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKatie di Agnieszka Czajkowska\n<agnieszka@imagegalaxy.de>\nKonqi di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n     <l_layland@hotmail.com>\nKatie の作者: Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi の作者: Stefan Spatz \n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Katie no Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n Konkvi no Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi од Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
+Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKatie vun Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi vun Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ne]=आधुनिक कोन्क्की - परिवारिक कार्डडेक \nडिजाइन प्ले: लाउरा लेल्यान्ड\n     <l_layland@hotmail.com>\nKatie, अग्निज्का जज्कोस्काद्वारा\n     <agnieszka@imagegalaxy.de>\nKonqi, स्टेफान स्पार्टजद्वारा \n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n   <l_layland@hotmail.com>\nKatie door Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi door Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
+Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ru]=Современная колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКэйт нарисована Агниежкой Зайковской (Agnieszka Czajkowska) <agnieszka@imagegalaxy.de>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszky Czajkowskeja\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszke Czajkowske\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКети: Агњешка Чајковска (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKeti: Agnješka Čajkovska (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ta]=மார்டன் கான்கி - புதிய குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லெளரா லேலேண்டு\n <l_ayland@hotmail.com>\n Katie by Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Laylanda\n     <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi від Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n     <l_layland@hotmail.com>\nKatie pa Agnieszka Czajkowska\n     <agnieszka@imagegalaxy.de>\nKonqi pa Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska...<agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libtdegames/carddecks/cards-penguins/1.png b/libtdegames/carddecks/cards-penguins/1.png
new file mode 100644
index 00000000..b59022e8
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/1.png differ
diff --git a/libtdegames/carddecks/cards-penguins/10.png b/libtdegames/carddecks/cards-penguins/10.png
new file mode 100644
index 00000000..d54669fe
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/10.png differ
diff --git a/libtdegames/carddecks/cards-penguins/11.png b/libtdegames/carddecks/cards-penguins/11.png
new file mode 100644
index 00000000..02c2464c
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/11.png differ
diff --git a/libtdegames/carddecks/cards-penguins/12.png b/libtdegames/carddecks/cards-penguins/12.png
new file mode 100644
index 00000000..d179eb99
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/12.png differ
diff --git a/libtdegames/carddecks/cards-penguins/13.png b/libtdegames/carddecks/cards-penguins/13.png
new file mode 100644
index 00000000..135af493
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/13.png differ
diff --git a/libtdegames/carddecks/cards-penguins/14.png b/libtdegames/carddecks/cards-penguins/14.png
new file mode 100644
index 00000000..4a179917
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/14.png differ
diff --git a/libtdegames/carddecks/cards-penguins/15.png b/libtdegames/carddecks/cards-penguins/15.png
new file mode 100644
index 00000000..b5238d00
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/15.png differ
diff --git a/libtdegames/carddecks/cards-penguins/16.png b/libtdegames/carddecks/cards-penguins/16.png
new file mode 100644
index 00000000..33fe6b8e
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/16.png differ
diff --git a/libtdegames/carddecks/cards-penguins/17.png b/libtdegames/carddecks/cards-penguins/17.png
new file mode 100644
index 00000000..99b77ce8
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/17.png differ
diff --git a/libtdegames/carddecks/cards-penguins/18.png b/libtdegames/carddecks/cards-penguins/18.png
new file mode 100644
index 00000000..b88ae958
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/18.png differ
diff --git a/libtdegames/carddecks/cards-penguins/19.png b/libtdegames/carddecks/cards-penguins/19.png
new file mode 100644
index 00000000..532899aa
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/19.png differ
diff --git a/libtdegames/carddecks/cards-penguins/2.png b/libtdegames/carddecks/cards-penguins/2.png
new file mode 100644
index 00000000..090cfd02
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/2.png differ
diff --git a/libtdegames/carddecks/cards-penguins/20.png b/libtdegames/carddecks/cards-penguins/20.png
new file mode 100644
index 00000000..ed129a32
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/20.png differ
diff --git a/libtdegames/carddecks/cards-penguins/21.png b/libtdegames/carddecks/cards-penguins/21.png
new file mode 100644
index 00000000..5bf532f7
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/21.png differ
diff --git a/libtdegames/carddecks/cards-penguins/22.png b/libtdegames/carddecks/cards-penguins/22.png
new file mode 100644
index 00000000..07c61ced
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/22.png differ
diff --git a/libtdegames/carddecks/cards-penguins/23.png b/libtdegames/carddecks/cards-penguins/23.png
new file mode 100644
index 00000000..ecce302b
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/23.png differ
diff --git a/libtdegames/carddecks/cards-penguins/24.png b/libtdegames/carddecks/cards-penguins/24.png
new file mode 100644
index 00000000..feee0a9e
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/24.png differ
diff --git a/libtdegames/carddecks/cards-penguins/25.png b/libtdegames/carddecks/cards-penguins/25.png
new file mode 100644
index 00000000..d42f2b2b
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/25.png differ
diff --git a/libtdegames/carddecks/cards-penguins/26.png b/libtdegames/carddecks/cards-penguins/26.png
new file mode 100644
index 00000000..cc5e930f
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/26.png differ
diff --git a/libtdegames/carddecks/cards-penguins/27.png b/libtdegames/carddecks/cards-penguins/27.png
new file mode 100644
index 00000000..4ae7702a
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/27.png differ
diff --git a/libtdegames/carddecks/cards-penguins/28.png b/libtdegames/carddecks/cards-penguins/28.png
new file mode 100644
index 00000000..ee9b40ea
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/28.png differ
diff --git a/libtdegames/carddecks/cards-penguins/29.png b/libtdegames/carddecks/cards-penguins/29.png
new file mode 100644
index 00000000..ba2dfe7d
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/29.png differ
diff --git a/libtdegames/carddecks/cards-penguins/3.png b/libtdegames/carddecks/cards-penguins/3.png
new file mode 100644
index 00000000..7f53daf9
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/3.png differ
diff --git a/libtdegames/carddecks/cards-penguins/30.png b/libtdegames/carddecks/cards-penguins/30.png
new file mode 100644
index 00000000..1486cf98
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/30.png differ
diff --git a/libtdegames/carddecks/cards-penguins/31.png b/libtdegames/carddecks/cards-penguins/31.png
new file mode 100644
index 00000000..805d39e9
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/31.png differ
diff --git a/libtdegames/carddecks/cards-penguins/32.png b/libtdegames/carddecks/cards-penguins/32.png
new file mode 100644
index 00000000..4a1b12f0
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/32.png differ
diff --git a/libtdegames/carddecks/cards-penguins/33.png b/libtdegames/carddecks/cards-penguins/33.png
new file mode 100644
index 00000000..b8ae8965
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/33.png differ
diff --git a/libtdegames/carddecks/cards-penguins/34.png b/libtdegames/carddecks/cards-penguins/34.png
new file mode 100644
index 00000000..e2ce160c
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/34.png differ
diff --git a/libtdegames/carddecks/cards-penguins/35.png b/libtdegames/carddecks/cards-penguins/35.png
new file mode 100644
index 00000000..580c4d12
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/35.png differ
diff --git a/libtdegames/carddecks/cards-penguins/36.png b/libtdegames/carddecks/cards-penguins/36.png
new file mode 100644
index 00000000..296d4c7c
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/36.png differ
diff --git a/libtdegames/carddecks/cards-penguins/37.png b/libtdegames/carddecks/cards-penguins/37.png
new file mode 100644
index 00000000..fbbefa84
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/37.png differ
diff --git a/libtdegames/carddecks/cards-penguins/38.png b/libtdegames/carddecks/cards-penguins/38.png
new file mode 100644
index 00000000..7d9a34bd
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/38.png differ
diff --git a/libtdegames/carddecks/cards-penguins/39.png b/libtdegames/carddecks/cards-penguins/39.png
new file mode 100644
index 00000000..23ffffaa
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/39.png differ
diff --git a/libtdegames/carddecks/cards-penguins/4.png b/libtdegames/carddecks/cards-penguins/4.png
new file mode 100644
index 00000000..79ced119
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/4.png differ
diff --git a/libtdegames/carddecks/cards-penguins/40.png b/libtdegames/carddecks/cards-penguins/40.png
new file mode 100644
index 00000000..b9bed320
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/40.png differ
diff --git a/libtdegames/carddecks/cards-penguins/41.png b/libtdegames/carddecks/cards-penguins/41.png
new file mode 100644
index 00000000..c5a65385
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/41.png differ
diff --git a/libtdegames/carddecks/cards-penguins/42.png b/libtdegames/carddecks/cards-penguins/42.png
new file mode 100644
index 00000000..aba32e3e
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/42.png differ
diff --git a/libtdegames/carddecks/cards-penguins/43.png b/libtdegames/carddecks/cards-penguins/43.png
new file mode 100644
index 00000000..04623c1e
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/43.png differ
diff --git a/libtdegames/carddecks/cards-penguins/44.png b/libtdegames/carddecks/cards-penguins/44.png
new file mode 100644
index 00000000..7e6069e6
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/44.png differ
diff --git a/libtdegames/carddecks/cards-penguins/45.png b/libtdegames/carddecks/cards-penguins/45.png
new file mode 100644
index 00000000..36b67487
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/45.png differ
diff --git a/libtdegames/carddecks/cards-penguins/46.png b/libtdegames/carddecks/cards-penguins/46.png
new file mode 100644
index 00000000..80216f18
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/46.png differ
diff --git a/libtdegames/carddecks/cards-penguins/47.png b/libtdegames/carddecks/cards-penguins/47.png
new file mode 100644
index 00000000..9fb16882
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/47.png differ
diff --git a/libtdegames/carddecks/cards-penguins/48.png b/libtdegames/carddecks/cards-penguins/48.png
new file mode 100644
index 00000000..12f928e6
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/48.png differ
diff --git a/libtdegames/carddecks/cards-penguins/49.png b/libtdegames/carddecks/cards-penguins/49.png
new file mode 100644
index 00000000..9119c351
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/49.png differ
diff --git a/libtdegames/carddecks/cards-penguins/5.png b/libtdegames/carddecks/cards-penguins/5.png
new file mode 100644
index 00000000..f18a3a57
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/5.png differ
diff --git a/libtdegames/carddecks/cards-penguins/50.png b/libtdegames/carddecks/cards-penguins/50.png
new file mode 100644
index 00000000..e3dacdba
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/50.png differ
diff --git a/libtdegames/carddecks/cards-penguins/51.png b/libtdegames/carddecks/cards-penguins/51.png
new file mode 100644
index 00000000..fa46ff72
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/51.png differ
diff --git a/libtdegames/carddecks/cards-penguins/52.png b/libtdegames/carddecks/cards-penguins/52.png
new file mode 100644
index 00000000..1522ed3f
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/52.png differ
diff --git a/libtdegames/carddecks/cards-penguins/6.png b/libtdegames/carddecks/cards-penguins/6.png
new file mode 100644
index 00000000..9d84eb8d
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/6.png differ
diff --git a/libtdegames/carddecks/cards-penguins/7.png b/libtdegames/carddecks/cards-penguins/7.png
new file mode 100644
index 00000000..2b8d0768
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/7.png differ
diff --git a/libtdegames/carddecks/cards-penguins/8.png b/libtdegames/carddecks/cards-penguins/8.png
new file mode 100644
index 00000000..933be6e7
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/8.png differ
diff --git a/libtdegames/carddecks/cards-penguins/9.png b/libtdegames/carddecks/cards-penguins/9.png
new file mode 100644
index 00000000..669d6e00
Binary files /dev/null and b/libtdegames/carddecks/cards-penguins/9.png differ
diff --git a/libtdegames/carddecks/cards-penguins/COPYRIGHT b/libtdegames/carddecks/cards-penguins/COPYRIGHT
new file mode 100644
index 00000000..cf87594e
--- /dev/null
+++ b/libtdegames/carddecks/cards-penguins/COPYRIGHT
@@ -0,0 +1,10 @@
+This PySol cardset was adapted from the Ace of Penguins 1.0.
+http://www.delorie.com/store/ace/
+
+Copyright (C) 1998 DJ Delorie <dj@delorie.com>
+Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
+
+This cardset is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-penguins/index.desktop b/libtdegames/carddecks/cards-penguins/index.desktop
new file mode 100644
index 00000000..2fe12197
--- /dev/null
+++ b/libtdegames/carddecks/cards-penguins/index.desktop
@@ -0,0 +1,67 @@
+[KDE Backdeck]
+Name=Penguins
+Name[af]=Pikkewyne
+Name[ar]=بطاريق
+Name[az]=Pinqvinlər
+Name[be]=Пінгвіны
+Name[bg]=Пингвин
+Name[bn]=পেঙ্গুইন
+Name[br]=Pennoù-gwenn
+Name[bs]=Pingvini
+Name[ca]=Pingüins
+Name[cs]=Tučňáci
+Name[da]=Pingviner
+Name[de]=Pinguine
+Name[el]=Πιγκουίνοι
+Name[eo]=Pingvenoj
+Name[es]=Pingüinos
+Name[et]=Pingviinid
+Name[eu]=Pinguinoak
+Name[fa]=پنگوئنها
+Name[fi]=Pingviinit
+Name[fr]=Pingouins
+Name[gl]=Pingüíns
+Name[he]=פנגוינים
+Name[hi]=पेंग्विन्स
+Name[hr]=Pingvini
+Name[hu]=Pingvinek
+Name[is]=Mörgæsir
+Name[it]=Pinguini
+Name[km]=ភេនឃ្វីន
+Name[ko]=펭귄
+Name[lt]=Pingvinai
+Name[lv]=Pingvīni
+Name[mk]=Пингвини
+Name[mt]=Pingwini
+Name[nb]=Pingviner
+Name[nds]=Pinguins
+Name[ne]=पेन्गुइन
+Name[nl]=Pinguïns
+Name[nn]=Pingvinar
+Name[pa]=ਪੈਂਗੂਇਨ
+Name[pl]=Pingwiny
+Name[pt]=Pinguins
+Name[pt_BR]=Pingüins
+Name[ro]=Pinguini
+Name[ru]=Пингвины
+Name[se]=Pingviinnat
+Name[sk]=Tučniaci
+Name[sl]=Pingvini
+Name[sr]=Пингвини
+Name[sr@Latn]=Pingvini
+Name[sv]=Pingviner
+Name[ta]=பென்குயின்கள்
+Name[tg]=Пингвинҳо
+Name[th]=เพนกวิน
+Name[tr]=Penguenler
+Name[uk]=Пінгвіни
+Name[uz]=Pingvinlar
+Name[uz@cyrillic]=Пингвинлар
+Name[vi]=Chim cánh cụt 
+Name[wa]=Pingwins
+Name[xh]=iintaka zaselwandle
+Name[zh_CN]=企鹅
+Name[zh_TW]=企鵝
+Name[zu]=Izinyoni zasemanzini
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-spaced/1.png b/libtdegames/carddecks/cards-spaced/1.png
new file mode 100644
index 00000000..62220b38
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/1.png differ
diff --git a/libtdegames/carddecks/cards-spaced/10.png b/libtdegames/carddecks/cards-spaced/10.png
new file mode 100644
index 00000000..d0bcd828
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/10.png differ
diff --git a/libtdegames/carddecks/cards-spaced/11.png b/libtdegames/carddecks/cards-spaced/11.png
new file mode 100644
index 00000000..b4e6016e
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/11.png differ
diff --git a/libtdegames/carddecks/cards-spaced/12.png b/libtdegames/carddecks/cards-spaced/12.png
new file mode 100644
index 00000000..45ab5cf5
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/12.png differ
diff --git a/libtdegames/carddecks/cards-spaced/13.png b/libtdegames/carddecks/cards-spaced/13.png
new file mode 100644
index 00000000..37e7c2ce
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/13.png differ
diff --git a/libtdegames/carddecks/cards-spaced/14.png b/libtdegames/carddecks/cards-spaced/14.png
new file mode 100644
index 00000000..97af1f02
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/14.png differ
diff --git a/libtdegames/carddecks/cards-spaced/15.png b/libtdegames/carddecks/cards-spaced/15.png
new file mode 100644
index 00000000..fb2fcc76
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/15.png differ
diff --git a/libtdegames/carddecks/cards-spaced/16.png b/libtdegames/carddecks/cards-spaced/16.png
new file mode 100644
index 00000000..9042b161
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/16.png differ
diff --git a/libtdegames/carddecks/cards-spaced/17.png b/libtdegames/carddecks/cards-spaced/17.png
new file mode 100644
index 00000000..a67b2832
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/17.png differ
diff --git a/libtdegames/carddecks/cards-spaced/18.png b/libtdegames/carddecks/cards-spaced/18.png
new file mode 100644
index 00000000..f4c8a04b
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/18.png differ
diff --git a/libtdegames/carddecks/cards-spaced/19.png b/libtdegames/carddecks/cards-spaced/19.png
new file mode 100644
index 00000000..fac5b199
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/19.png differ
diff --git a/libtdegames/carddecks/cards-spaced/2.png b/libtdegames/carddecks/cards-spaced/2.png
new file mode 100644
index 00000000..af3c76fd
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/2.png differ
diff --git a/libtdegames/carddecks/cards-spaced/20.png b/libtdegames/carddecks/cards-spaced/20.png
new file mode 100644
index 00000000..12d43520
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/20.png differ
diff --git a/libtdegames/carddecks/cards-spaced/21.png b/libtdegames/carddecks/cards-spaced/21.png
new file mode 100644
index 00000000..ea715adc
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/21.png differ
diff --git a/libtdegames/carddecks/cards-spaced/22.png b/libtdegames/carddecks/cards-spaced/22.png
new file mode 100644
index 00000000..13e6d7ae
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/22.png differ
diff --git a/libtdegames/carddecks/cards-spaced/23.png b/libtdegames/carddecks/cards-spaced/23.png
new file mode 100644
index 00000000..f43a745f
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/23.png differ
diff --git a/libtdegames/carddecks/cards-spaced/24.png b/libtdegames/carddecks/cards-spaced/24.png
new file mode 100644
index 00000000..810f59ef
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/24.png differ
diff --git a/libtdegames/carddecks/cards-spaced/25.png b/libtdegames/carddecks/cards-spaced/25.png
new file mode 100644
index 00000000..836b9863
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/25.png differ
diff --git a/libtdegames/carddecks/cards-spaced/26.png b/libtdegames/carddecks/cards-spaced/26.png
new file mode 100644
index 00000000..27bc29bf
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/26.png differ
diff --git a/libtdegames/carddecks/cards-spaced/27.png b/libtdegames/carddecks/cards-spaced/27.png
new file mode 100644
index 00000000..a44baa51
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/27.png differ
diff --git a/libtdegames/carddecks/cards-spaced/28.png b/libtdegames/carddecks/cards-spaced/28.png
new file mode 100644
index 00000000..af480ddd
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/28.png differ
diff --git a/libtdegames/carddecks/cards-spaced/29.png b/libtdegames/carddecks/cards-spaced/29.png
new file mode 100644
index 00000000..622968f4
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/29.png differ
diff --git a/libtdegames/carddecks/cards-spaced/3.png b/libtdegames/carddecks/cards-spaced/3.png
new file mode 100644
index 00000000..5b31e13b
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/3.png differ
diff --git a/libtdegames/carddecks/cards-spaced/30.png b/libtdegames/carddecks/cards-spaced/30.png
new file mode 100644
index 00000000..e43e9bd0
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/30.png differ
diff --git a/libtdegames/carddecks/cards-spaced/31.png b/libtdegames/carddecks/cards-spaced/31.png
new file mode 100644
index 00000000..382d0c11
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/31.png differ
diff --git a/libtdegames/carddecks/cards-spaced/32.png b/libtdegames/carddecks/cards-spaced/32.png
new file mode 100644
index 00000000..969e921d
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/32.png differ
diff --git a/libtdegames/carddecks/cards-spaced/33.png b/libtdegames/carddecks/cards-spaced/33.png
new file mode 100644
index 00000000..e9dbd109
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/33.png differ
diff --git a/libtdegames/carddecks/cards-spaced/34.png b/libtdegames/carddecks/cards-spaced/34.png
new file mode 100644
index 00000000..49d26d66
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/34.png differ
diff --git a/libtdegames/carddecks/cards-spaced/35.png b/libtdegames/carddecks/cards-spaced/35.png
new file mode 100644
index 00000000..f60149e5
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/35.png differ
diff --git a/libtdegames/carddecks/cards-spaced/36.png b/libtdegames/carddecks/cards-spaced/36.png
new file mode 100644
index 00000000..49b7044a
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/36.png differ
diff --git a/libtdegames/carddecks/cards-spaced/37.png b/libtdegames/carddecks/cards-spaced/37.png
new file mode 100644
index 00000000..dafb3402
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/37.png differ
diff --git a/libtdegames/carddecks/cards-spaced/38.png b/libtdegames/carddecks/cards-spaced/38.png
new file mode 100644
index 00000000..f1d7e030
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/38.png differ
diff --git a/libtdegames/carddecks/cards-spaced/39.png b/libtdegames/carddecks/cards-spaced/39.png
new file mode 100644
index 00000000..8e045381
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/39.png differ
diff --git a/libtdegames/carddecks/cards-spaced/4.png b/libtdegames/carddecks/cards-spaced/4.png
new file mode 100644
index 00000000..e8ceab32
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/4.png differ
diff --git a/libtdegames/carddecks/cards-spaced/40.png b/libtdegames/carddecks/cards-spaced/40.png
new file mode 100644
index 00000000..de378577
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/40.png differ
diff --git a/libtdegames/carddecks/cards-spaced/41.png b/libtdegames/carddecks/cards-spaced/41.png
new file mode 100644
index 00000000..0e4f3382
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/41.png differ
diff --git a/libtdegames/carddecks/cards-spaced/42.png b/libtdegames/carddecks/cards-spaced/42.png
new file mode 100644
index 00000000..910524a2
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/42.png differ
diff --git a/libtdegames/carddecks/cards-spaced/43.png b/libtdegames/carddecks/cards-spaced/43.png
new file mode 100644
index 00000000..f9f218bf
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/43.png differ
diff --git a/libtdegames/carddecks/cards-spaced/44.png b/libtdegames/carddecks/cards-spaced/44.png
new file mode 100644
index 00000000..fe64a155
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/44.png differ
diff --git a/libtdegames/carddecks/cards-spaced/45.png b/libtdegames/carddecks/cards-spaced/45.png
new file mode 100644
index 00000000..d914f7b1
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/45.png differ
diff --git a/libtdegames/carddecks/cards-spaced/46.png b/libtdegames/carddecks/cards-spaced/46.png
new file mode 100644
index 00000000..f6953f9d
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/46.png differ
diff --git a/libtdegames/carddecks/cards-spaced/47.png b/libtdegames/carddecks/cards-spaced/47.png
new file mode 100644
index 00000000..bfaa56ff
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/47.png differ
diff --git a/libtdegames/carddecks/cards-spaced/48.png b/libtdegames/carddecks/cards-spaced/48.png
new file mode 100644
index 00000000..b5d46c34
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/48.png differ
diff --git a/libtdegames/carddecks/cards-spaced/49.png b/libtdegames/carddecks/cards-spaced/49.png
new file mode 100644
index 00000000..f890b5db
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/49.png differ
diff --git a/libtdegames/carddecks/cards-spaced/5.png b/libtdegames/carddecks/cards-spaced/5.png
new file mode 100644
index 00000000..e160f9b3
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/5.png differ
diff --git a/libtdegames/carddecks/cards-spaced/50.png b/libtdegames/carddecks/cards-spaced/50.png
new file mode 100644
index 00000000..488eb5fa
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/50.png differ
diff --git a/libtdegames/carddecks/cards-spaced/51.png b/libtdegames/carddecks/cards-spaced/51.png
new file mode 100644
index 00000000..4d1f41b0
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/51.png differ
diff --git a/libtdegames/carddecks/cards-spaced/52.png b/libtdegames/carddecks/cards-spaced/52.png
new file mode 100644
index 00000000..345579f4
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/52.png differ
diff --git a/libtdegames/carddecks/cards-spaced/6.png b/libtdegames/carddecks/cards-spaced/6.png
new file mode 100644
index 00000000..90e8e998
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/6.png differ
diff --git a/libtdegames/carddecks/cards-spaced/7.png b/libtdegames/carddecks/cards-spaced/7.png
new file mode 100644
index 00000000..374ee771
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/7.png differ
diff --git a/libtdegames/carddecks/cards-spaced/8.png b/libtdegames/carddecks/cards-spaced/8.png
new file mode 100644
index 00000000..987a24c6
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/8.png differ
diff --git a/libtdegames/carddecks/cards-spaced/9.png b/libtdegames/carddecks/cards-spaced/9.png
new file mode 100644
index 00000000..f2855e9f
Binary files /dev/null and b/libtdegames/carddecks/cards-spaced/9.png differ
diff --git a/libtdegames/carddecks/cards-spaced/COPYRIGHT b/libtdegames/carddecks/cards-spaced/COPYRIGHT
new file mode 100644
index 00000000..f54e3a4e
--- /dev/null
+++ b/libtdegames/carddecks/cards-spaced/COPYRIGHT
@@ -0,0 +1,16 @@
+The backs for these cards came from the U.S. National Aeronautics
+and Space Administration.  The original images can be found at:
+http://antwrp.gsfc.nasa.gov/apod/archivepix.html
+along with a lot more just like 'em.
+
+The penguins are by "The PAPA" <papalini@biancaneve.ing.unifi.it>
+and can be found at:
+http://biancaneve.ing.unifi.it/~papalini/
+and there's a lot more of those too.
+
+Copyright (C) 1999 T. Kirk <grania@mailcity.com>
+
+This card set is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-spaced/index.desktop b/libtdegames/carddecks/cards-spaced/index.desktop
new file mode 100644
index 00000000..0e9eadf0
--- /dev/null
+++ b/libtdegames/carddecks/cards-spaced/index.desktop
@@ -0,0 +1,46 @@
+[KDE Backdeck]
+Name=Spaced
+Name[af]=Gespasieer
+Name[az]=Boşluqlu
+Name[be]=Космас
+Name[bg]=Звезден
+Name[bn]=স্পেসযুক্ত
+Name[ca]=Espaiades
+Name[cs]=Vesmír
+Name[de]=Mit Abstand
+Name[eo]=Komika
+Name[es]=Espaciadas
+Name[eu]=Tartea
+Name[fr]=Spatial
+Name[gl]=Espaciadas
+Name[hi]=स्पेस्ड
+Name[hu]=Űr
+Name[is]=Speisað
+Name[it]=Spaziale
+Name[ko]=우주
+Name[lv]=Kosmisks
+Name[mk]=Раздалечени
+Name[mt]=Spazzjat
+Name[nb]=Rom-duell
+Name[nds]=Afstand
+Name[ne]=खाली स्थान
+Name[nl]=Ruimtelijk
+Name[nso]=Beetswe Sekgoba
+Name[pl]=Przestrzenny
+Name[pt]=Espacial
+Name[pt_BR]=Espaçado
+Name[ro]=Spaţiat
+Name[ru]=Космос
+Name[sl]=Vesoljski dvoboj
+Name[sr]=Размакнут
+Name[sr@Latn]=Razmaknut
+Name[sv]=Spejsad
+Name[ta]=இடம் விடப்பட்ட
+Name[tg]=Кайҳонӣ
+Name[tr]=Boşluklu
+Name[uk]=Космічний
+Name[ven]=Hu na zwikala
+Name[xh]=ukugqagqeneyo
+Name[zu]=Kunezikhala
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-warwick/0.png b/libtdegames/carddecks/cards-warwick/0.png
new file mode 100644
index 00000000..e8fc5c76
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/0.png differ
diff --git a/libtdegames/carddecks/cards-warwick/1.png b/libtdegames/carddecks/cards-warwick/1.png
new file mode 100644
index 00000000..79fc960c
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/1.png differ
diff --git a/libtdegames/carddecks/cards-warwick/10.png b/libtdegames/carddecks/cards-warwick/10.png
new file mode 100644
index 00000000..9b459b5c
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/10.png differ
diff --git a/libtdegames/carddecks/cards-warwick/105.png b/libtdegames/carddecks/cards-warwick/105.png
new file mode 100644
index 00000000..0f49bdd9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/105.png differ
diff --git a/libtdegames/carddecks/cards-warwick/106.png b/libtdegames/carddecks/cards-warwick/106.png
new file mode 100644
index 00000000..4e2371c1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/106.png differ
diff --git a/libtdegames/carddecks/cards-warwick/107.png b/libtdegames/carddecks/cards-warwick/107.png
new file mode 100644
index 00000000..c7a19052
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/107.png differ
diff --git a/libtdegames/carddecks/cards-warwick/108.png b/libtdegames/carddecks/cards-warwick/108.png
new file mode 100644
index 00000000..09ee0a0a
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/108.png differ
diff --git a/libtdegames/carddecks/cards-warwick/109.png b/libtdegames/carddecks/cards-warwick/109.png
new file mode 100644
index 00000000..a48b134c
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/109.png differ
diff --git a/libtdegames/carddecks/cards-warwick/11.png b/libtdegames/carddecks/cards-warwick/11.png
new file mode 100644
index 00000000..a78f94b7
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/11.png differ
diff --git a/libtdegames/carddecks/cards-warwick/110.png b/libtdegames/carddecks/cards-warwick/110.png
new file mode 100644
index 00000000..2a3fccd9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/110.png differ
diff --git a/libtdegames/carddecks/cards-warwick/111.png b/libtdegames/carddecks/cards-warwick/111.png
new file mode 100644
index 00000000..20c9f0f9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/111.png differ
diff --git a/libtdegames/carddecks/cards-warwick/112.png b/libtdegames/carddecks/cards-warwick/112.png
new file mode 100644
index 00000000..90935873
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/112.png differ
diff --git a/libtdegames/carddecks/cards-warwick/113.png b/libtdegames/carddecks/cards-warwick/113.png
new file mode 100644
index 00000000..7df5d9b1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/113.png differ
diff --git a/libtdegames/carddecks/cards-warwick/114.png b/libtdegames/carddecks/cards-warwick/114.png
new file mode 100644
index 00000000..062ae319
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/114.png differ
diff --git a/libtdegames/carddecks/cards-warwick/115.png b/libtdegames/carddecks/cards-warwick/115.png
new file mode 100644
index 00000000..fd4b83b4
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/115.png differ
diff --git a/libtdegames/carddecks/cards-warwick/116.png b/libtdegames/carddecks/cards-warwick/116.png
new file mode 100644
index 00000000..7f1c0dcd
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/116.png differ
diff --git a/libtdegames/carddecks/cards-warwick/12.png b/libtdegames/carddecks/cards-warwick/12.png
new file mode 100644
index 00000000..41d93ef2
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/12.png differ
diff --git a/libtdegames/carddecks/cards-warwick/13.png b/libtdegames/carddecks/cards-warwick/13.png
new file mode 100644
index 00000000..b990c512
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/13.png differ
diff --git a/libtdegames/carddecks/cards-warwick/14.png b/libtdegames/carddecks/cards-warwick/14.png
new file mode 100644
index 00000000..45b94a15
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/14.png differ
diff --git a/libtdegames/carddecks/cards-warwick/15.png b/libtdegames/carddecks/cards-warwick/15.png
new file mode 100644
index 00000000..46c1f3f6
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/15.png differ
diff --git a/libtdegames/carddecks/cards-warwick/16.png b/libtdegames/carddecks/cards-warwick/16.png
new file mode 100644
index 00000000..d8d118f9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/16.png differ
diff --git a/libtdegames/carddecks/cards-warwick/17.png b/libtdegames/carddecks/cards-warwick/17.png
new file mode 100644
index 00000000..e6e0aa93
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/17.png differ
diff --git a/libtdegames/carddecks/cards-warwick/18.png b/libtdegames/carddecks/cards-warwick/18.png
new file mode 100644
index 00000000..eb84255b
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/18.png differ
diff --git a/libtdegames/carddecks/cards-warwick/19.png b/libtdegames/carddecks/cards-warwick/19.png
new file mode 100644
index 00000000..88d4d6d9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/19.png differ
diff --git a/libtdegames/carddecks/cards-warwick/2.png b/libtdegames/carddecks/cards-warwick/2.png
new file mode 100644
index 00000000..98e798a1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/2.png differ
diff --git a/libtdegames/carddecks/cards-warwick/20.png b/libtdegames/carddecks/cards-warwick/20.png
new file mode 100644
index 00000000..4f75de50
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/20.png differ
diff --git a/libtdegames/carddecks/cards-warwick/21.png b/libtdegames/carddecks/cards-warwick/21.png
new file mode 100644
index 00000000..39bba2f2
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/21.png differ
diff --git a/libtdegames/carddecks/cards-warwick/22.png b/libtdegames/carddecks/cards-warwick/22.png
new file mode 100644
index 00000000..733c396d
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/22.png differ
diff --git a/libtdegames/carddecks/cards-warwick/23.png b/libtdegames/carddecks/cards-warwick/23.png
new file mode 100644
index 00000000..ab00c341
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/23.png differ
diff --git a/libtdegames/carddecks/cards-warwick/24.png b/libtdegames/carddecks/cards-warwick/24.png
new file mode 100644
index 00000000..eeb73bdd
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/24.png differ
diff --git a/libtdegames/carddecks/cards-warwick/25.png b/libtdegames/carddecks/cards-warwick/25.png
new file mode 100644
index 00000000..25715b2f
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/25.png differ
diff --git a/libtdegames/carddecks/cards-warwick/26.png b/libtdegames/carddecks/cards-warwick/26.png
new file mode 100644
index 00000000..e248ded1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/26.png differ
diff --git a/libtdegames/carddecks/cards-warwick/27.png b/libtdegames/carddecks/cards-warwick/27.png
new file mode 100644
index 00000000..1bb2ab90
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/27.png differ
diff --git a/libtdegames/carddecks/cards-warwick/28.png b/libtdegames/carddecks/cards-warwick/28.png
new file mode 100644
index 00000000..33085ffb
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/28.png differ
diff --git a/libtdegames/carddecks/cards-warwick/29.png b/libtdegames/carddecks/cards-warwick/29.png
new file mode 100644
index 00000000..3f15d8d9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/29.png differ
diff --git a/libtdegames/carddecks/cards-warwick/3.png b/libtdegames/carddecks/cards-warwick/3.png
new file mode 100644
index 00000000..7f298774
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/3.png differ
diff --git a/libtdegames/carddecks/cards-warwick/30.png b/libtdegames/carddecks/cards-warwick/30.png
new file mode 100644
index 00000000..ce1f2dd9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/30.png differ
diff --git a/libtdegames/carddecks/cards-warwick/31.png b/libtdegames/carddecks/cards-warwick/31.png
new file mode 100644
index 00000000..fadee1b1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/31.png differ
diff --git a/libtdegames/carddecks/cards-warwick/32.png b/libtdegames/carddecks/cards-warwick/32.png
new file mode 100644
index 00000000..4d4391d2
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/32.png differ
diff --git a/libtdegames/carddecks/cards-warwick/33.png b/libtdegames/carddecks/cards-warwick/33.png
new file mode 100644
index 00000000..7d1a106f
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/33.png differ
diff --git a/libtdegames/carddecks/cards-warwick/34.png b/libtdegames/carddecks/cards-warwick/34.png
new file mode 100644
index 00000000..8d2197e7
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/34.png differ
diff --git a/libtdegames/carddecks/cards-warwick/35.png b/libtdegames/carddecks/cards-warwick/35.png
new file mode 100644
index 00000000..e8f5789d
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/35.png differ
diff --git a/libtdegames/carddecks/cards-warwick/36.png b/libtdegames/carddecks/cards-warwick/36.png
new file mode 100644
index 00000000..32bd75b8
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/36.png differ
diff --git a/libtdegames/carddecks/cards-warwick/37.png b/libtdegames/carddecks/cards-warwick/37.png
new file mode 100644
index 00000000..8a85b206
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/37.png differ
diff --git a/libtdegames/carddecks/cards-warwick/38.png b/libtdegames/carddecks/cards-warwick/38.png
new file mode 100644
index 00000000..edc98fa9
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/38.png differ
diff --git a/libtdegames/carddecks/cards-warwick/39.png b/libtdegames/carddecks/cards-warwick/39.png
new file mode 100644
index 00000000..6ac9b1ab
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/39.png differ
diff --git a/libtdegames/carddecks/cards-warwick/4.png b/libtdegames/carddecks/cards-warwick/4.png
new file mode 100644
index 00000000..ba94daeb
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/4.png differ
diff --git a/libtdegames/carddecks/cards-warwick/40.png b/libtdegames/carddecks/cards-warwick/40.png
new file mode 100644
index 00000000..046f281e
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/40.png differ
diff --git a/libtdegames/carddecks/cards-warwick/41.png b/libtdegames/carddecks/cards-warwick/41.png
new file mode 100644
index 00000000..278f7242
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/41.png differ
diff --git a/libtdegames/carddecks/cards-warwick/42.png b/libtdegames/carddecks/cards-warwick/42.png
new file mode 100644
index 00000000..e0c8857d
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/42.png differ
diff --git a/libtdegames/carddecks/cards-warwick/43.png b/libtdegames/carddecks/cards-warwick/43.png
new file mode 100644
index 00000000..126b5d8e
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/43.png differ
diff --git a/libtdegames/carddecks/cards-warwick/44.png b/libtdegames/carddecks/cards-warwick/44.png
new file mode 100644
index 00000000..220f6e45
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/44.png differ
diff --git a/libtdegames/carddecks/cards-warwick/45.png b/libtdegames/carddecks/cards-warwick/45.png
new file mode 100644
index 00000000..0a5742e1
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/45.png differ
diff --git a/libtdegames/carddecks/cards-warwick/46.png b/libtdegames/carddecks/cards-warwick/46.png
new file mode 100644
index 00000000..f4312a3b
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/46.png differ
diff --git a/libtdegames/carddecks/cards-warwick/47.png b/libtdegames/carddecks/cards-warwick/47.png
new file mode 100644
index 00000000..a4495a2e
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/47.png differ
diff --git a/libtdegames/carddecks/cards-warwick/48.png b/libtdegames/carddecks/cards-warwick/48.png
new file mode 100644
index 00000000..039755f8
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/48.png differ
diff --git a/libtdegames/carddecks/cards-warwick/49.png b/libtdegames/carddecks/cards-warwick/49.png
new file mode 100644
index 00000000..dd7b9779
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/49.png differ
diff --git a/libtdegames/carddecks/cards-warwick/5.png b/libtdegames/carddecks/cards-warwick/5.png
new file mode 100644
index 00000000..d881d1a8
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/5.png differ
diff --git a/libtdegames/carddecks/cards-warwick/50.png b/libtdegames/carddecks/cards-warwick/50.png
new file mode 100644
index 00000000..5840d1a7
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/50.png differ
diff --git a/libtdegames/carddecks/cards-warwick/51.png b/libtdegames/carddecks/cards-warwick/51.png
new file mode 100644
index 00000000..04628627
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/51.png differ
diff --git a/libtdegames/carddecks/cards-warwick/52.png b/libtdegames/carddecks/cards-warwick/52.png
new file mode 100644
index 00000000..07efb60a
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/52.png differ
diff --git a/libtdegames/carddecks/cards-warwick/6.png b/libtdegames/carddecks/cards-warwick/6.png
new file mode 100644
index 00000000..dbe64d0a
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/6.png differ
diff --git a/libtdegames/carddecks/cards-warwick/7.png b/libtdegames/carddecks/cards-warwick/7.png
new file mode 100644
index 00000000..16176ad2
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/7.png differ
diff --git a/libtdegames/carddecks/cards-warwick/8.png b/libtdegames/carddecks/cards-warwick/8.png
new file mode 100644
index 00000000..f62b3441
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/8.png differ
diff --git a/libtdegames/carddecks/cards-warwick/9.png b/libtdegames/carddecks/cards-warwick/9.png
new file mode 100644
index 00000000..a773d309
Binary files /dev/null and b/libtdegames/carddecks/cards-warwick/9.png differ
diff --git a/libtdegames/carddecks/cards-warwick/index.desktop b/libtdegames/carddecks/cards-warwick/index.desktop
new file mode 100644
index 00000000..042b6f1b
--- /dev/null
+++ b/libtdegames/carddecks/cards-warwick/index.desktop
@@ -0,0 +1,126 @@
+[KDE Backdeck]
+Name=Blue Balloon
+Name[af]=Blou Ballon
+Name[ar]=بالون أزرق
+Name[az]=Göy Balon
+Name[be]=Паветраны шар
+Name[bg]=Син балон
+Name[bn]=নীল বেলুন
+Name[br]=Boull glas
+Name[bs]=Plavi balon
+Name[ca]=Pilota blava
+Name[cs]=Modrý balón
+Name[cy]=Balwn Glas
+Name[da]=Blå ballon
+Name[de]=Blauer Ballon
+Name[el]=Μπλε μπαλόνι
+Name[eo]=Blua balono
+Name[es]=Globo azul
+Name[et]=Sinine õhupall
+Name[eu]=Globo urdina
+Name[fi]=Sininen pallo
+Name[fr]=Ballon bleu
+Name[gl]=Globo azul
+Name[he]=בלון כחול
+Name[hi]=ब्लू बलून
+Name[hr]=Plavi balon
+Name[hu]=Kék léggömb
+Name[is]=Blá blaðra
+Name[it]=Pallone blu
+Name[ja]=青風船
+Name[km]=បាល់​ខៀវ
+Name[ko]=파란 풍선
+Name[lt]=Mėlynas balionas
+Name[lv]=Zili baloni
+Name[mk]=Син балон
+Name[mt]=Bużżieqa Blu
+Name[nb]=Blå ballong
+Name[nds]=Blaag Ballon
+Name[ne]=निलो बेलुन
+Name[nl]=Blauwe ballon
+Name[nn]=Blå ballong
+Name[pa]=ਨੀਲਾ ਗੁਬਰਾ
+Name[pl]=Niebieski balon
+Name[pt]=Balão Azul
+Name[pt_BR]=Balão Azul
+Name[ro]=Balon albastru
+Name[ru]=Воздушный шар
+Name[se]=Alit balloŋga
+Name[sk]=Modrý balón
+Name[sl]=Modri balon
+Name[sr]=Плави балон
+Name[sr@Latn]=Plavi balon
+Name[sv]=Blå ballong
+Name[ta]=நீல பலூன்
+Name[tg]=Курраҳои Ҳавоӣ
+Name[th]=ลูกโป่งสีฟ้า - K
+Name[tr]=Mavi Balon
+Name[uk]=Блакитна кулька
+Name[ven]=Baloni la muvhala wa Lutombo 
+Name[vi]=Bóng bay xanh 
+Name[xh]=Ibhaluni eblowu
+Name[zh_CN]=蓝气球
+Name[zh_TW]=藍色氣球
+Name[zu]=Ibhelunde eliluhlaza
+Preview=11.png
+PySol=false
+Comment=Card set supplied by Warwick Allison
+Comment[af]=Kaart stel verskaf deur Warwick Allison
+Comment[az]=Warwick Allison tərəfindən düzəldilən kart dəstəsi
+Comment[be]=Калода картаў ад Ворвіка Элісана (Warwick Allison)
+Comment[bg]=Колода карти от Warwick Allison
+Comment[bn]=কার্ডের সেট সরবরাহ করেছেন ওয়ারউইক এল্লিসন
+Comment[bs]=Špil je dostavio Warwick Allison
+Comment[ca]=Joc de cartes aportat per Warwick Allison
+Comment[cs]=Sada karet od Warwicka Allisona
+Comment[cy]=Set cerdiau wedi ei ddarparu gan Warwick Allison
+Comment[da]=Kortspil fra Warwick Allison
+Comment[de]=Karten von Warwick Allison
+Comment[el]=Σετ καρτών από τον Warwick Allison
+Comment[eo]=Kartaro donita de Warwick Allison
+Comment[es]=Juego de cartas suministrado por Warwick Allison
+Comment[et]=Warwick Allison'i poolt pakutud kaardipakk
+Comment[eu]=Warwick Allison-ek emandako karta-sorta
+Comment[fa]=مجموعه کارت توسط وارویک آلیسون تهیه شد
+Comment[fi]=Warwick Allison toimittama korttipakka
+Comment[fr]=Jeu de cartes fourni par Warwick Allison
+Comment[gl]=Baralla proporcionada por Warwick Allison
+Comment[he]=ערכת הקלפים סופקה על ידי וורויק אליסון
+Comment[hi]=ताश की गड्डी वारविक एलीसन द्वारा प्रदत्त किया गया
+Comment[hr]=Set karata, poklonio Warwick Allison
+Comment[hu]=Warwick Allison kártyacsomagja
+Comment[is]=Spilastokkur eftir Warwick Allison
+Comment[it]=Mazzo di carte fornito da Warwick Allison
+Comment[ja]=Warwick Allison 作のカードセット
+Comment[km]=បៀរ​ត្រូវ​កំណត់​ផ្ដល់​ដោយ Warwick Allison
+Comment[ko]=Warwick Allison이 만든 카드 셋
+Comment[lt]=Warwick Allison kortų rinkinys
+Comment[lv]=Kāršu komplekts no Warwick Allison
+Comment[mk]=Комплетот карти е обезбеден од Ворвик Алисон (Warwick Allison)
+Comment[mt]=Sett ta' karti mogħti minn Warwick Allison
+Comment[nb]=Kortstokk levert av Warwick Allison
+Comment[nds]=Koorten vun Warwick Allison
+Comment[ne]=वारविक एलिसोनद्वारा वितरण गरिएको कार्ड सेट
+Comment[nl]=Kaartset, geleverd door Warwick Allison
+Comment[nn]=Kortstokk frå Warwick Allison
+Comment[pl]=Zestaw kart dostarczony przez Warwicka Allisona
+Comment[pt]=Baralho de cartas fornecido por Warwick Allison
+Comment[pt_BR]=Jogo de cartas fornecido por Warwick Allison
+Comment[ro]=Set de cărţi de joc de Warwick Allison
+Comment[ru]=Колода карт от Warwick Allison
+Comment[sk]=Balíček kariet od Warwicka Allisona
+Comment[sl]=Nabor kart od Warwicka Allisona
+Comment[sr]=Шпил карата кога је обезбедио Варвик Алисон (Warwick Allison)
+Comment[sr@Latn]=Špil karata koga je obezbedio Varvik Alison (Warwick Allison)
+Comment[sv]=Kortuppsättning tillhandahållen av Warwick Allison
+Comment[ta]=சீட்டுக்கட்டு வில்லியம் எலிசனால் அனுப்பப்பட்டது
+Comment[tg]=Маҷмӯи Кортҳо, ки аз тарафи Warwick Allison пешниҳод шудаанд
+Comment[th]=ชุดไพ่สนับสนุนโดย Warwick Allison
+Comment[tr]=Kart kümeleri Warwick Allison tarafından sağlanmıştır
+Comment[uk]=Набір карт від Warwick Allison
+Comment[ven]=Garata yo diswa nga Warwick Allison
+Comment[vi]=BềEthẻ được cung cấp bởi Warwick Allison 
+Comment[xh]=Imfano nye yamakhadi inikwe ngu Warwick Allison
+Comment[zh_CN]=牌面由 Warwick Allison 提供
+Comment[zh_TW]=牌局由 Warwick Allison 提供
+Comment[zu]=Iqoqo lamakhadi linikelwe ngu-Warwick Allison
diff --git a/libtdegames/carddecks/cards-xskat-french/1.png b/libtdegames/carddecks/cards-xskat-french/1.png
new file mode 100644
index 00000000..fdc71a26
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/1.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/10.png b/libtdegames/carddecks/cards-xskat-french/10.png
new file mode 100644
index 00000000..9dede1c7
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/10.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/11.png b/libtdegames/carddecks/cards-xskat-french/11.png
new file mode 100644
index 00000000..4c1dbf2a
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/11.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/12.png b/libtdegames/carddecks/cards-xskat-french/12.png
new file mode 100644
index 00000000..e34fc6bb
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/12.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/13.png b/libtdegames/carddecks/cards-xskat-french/13.png
new file mode 100644
index 00000000..842935ca
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/13.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/14.png b/libtdegames/carddecks/cards-xskat-french/14.png
new file mode 100644
index 00000000..e87706aa
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/14.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/15.png b/libtdegames/carddecks/cards-xskat-french/15.png
new file mode 100644
index 00000000..28d82c71
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/15.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/16.png b/libtdegames/carddecks/cards-xskat-french/16.png
new file mode 100644
index 00000000..4920f2f4
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/16.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/17.png b/libtdegames/carddecks/cards-xskat-french/17.png
new file mode 100644
index 00000000..27658c7c
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/17.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/18.png b/libtdegames/carddecks/cards-xskat-french/18.png
new file mode 100644
index 00000000..ea34c973
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/18.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/19.png b/libtdegames/carddecks/cards-xskat-french/19.png
new file mode 100644
index 00000000..80a0c22b
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/19.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/2.png b/libtdegames/carddecks/cards-xskat-french/2.png
new file mode 100644
index 00000000..de465ef6
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/2.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/20.png b/libtdegames/carddecks/cards-xskat-french/20.png
new file mode 100644
index 00000000..4a0aca66
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/20.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/21.png b/libtdegames/carddecks/cards-xskat-french/21.png
new file mode 100644
index 00000000..b7c6027f
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/21.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/22.png b/libtdegames/carddecks/cards-xskat-french/22.png
new file mode 100644
index 00000000..ae77e460
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/22.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/23.png b/libtdegames/carddecks/cards-xskat-french/23.png
new file mode 100644
index 00000000..967385fc
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/23.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/24.png b/libtdegames/carddecks/cards-xskat-french/24.png
new file mode 100644
index 00000000..e8b84baf
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/24.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/25.png b/libtdegames/carddecks/cards-xskat-french/25.png
new file mode 100644
index 00000000..f933ca25
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/25.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/26.png b/libtdegames/carddecks/cards-xskat-french/26.png
new file mode 100644
index 00000000..ab981154
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/26.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/27.png b/libtdegames/carddecks/cards-xskat-french/27.png
new file mode 100644
index 00000000..f34477ff
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/27.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/28.png b/libtdegames/carddecks/cards-xskat-french/28.png
new file mode 100644
index 00000000..0d1d71ff
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/28.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/29.png b/libtdegames/carddecks/cards-xskat-french/29.png
new file mode 100644
index 00000000..80e86965
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/29.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/3.png b/libtdegames/carddecks/cards-xskat-french/3.png
new file mode 100644
index 00000000..e4cc9d63
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/3.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/30.png b/libtdegames/carddecks/cards-xskat-french/30.png
new file mode 100644
index 00000000..a935d55e
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/30.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/31.png b/libtdegames/carddecks/cards-xskat-french/31.png
new file mode 100644
index 00000000..6c8d2883
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/31.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/32.png b/libtdegames/carddecks/cards-xskat-french/32.png
new file mode 100644
index 00000000..5af0268b
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/32.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/33.png b/libtdegames/carddecks/cards-xskat-french/33.png
new file mode 100644
index 00000000..7bd0fbed
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/33.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/34.png b/libtdegames/carddecks/cards-xskat-french/34.png
new file mode 100644
index 00000000..dc8bb29f
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/34.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/35.png b/libtdegames/carddecks/cards-xskat-french/35.png
new file mode 100644
index 00000000..7eb3f06f
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/35.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/36.png b/libtdegames/carddecks/cards-xskat-french/36.png
new file mode 100644
index 00000000..01902b33
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/36.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/37.png b/libtdegames/carddecks/cards-xskat-french/37.png
new file mode 100644
index 00000000..80599469
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/37.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/38.png b/libtdegames/carddecks/cards-xskat-french/38.png
new file mode 100644
index 00000000..fb4a37e4
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/38.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/39.png b/libtdegames/carddecks/cards-xskat-french/39.png
new file mode 100644
index 00000000..01fe85ae
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/39.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/4.png b/libtdegames/carddecks/cards-xskat-french/4.png
new file mode 100644
index 00000000..dff28353
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/4.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/40.png b/libtdegames/carddecks/cards-xskat-french/40.png
new file mode 100644
index 00000000..a9e28170
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/40.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/41.png b/libtdegames/carddecks/cards-xskat-french/41.png
new file mode 100644
index 00000000..66e69166
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/41.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/42.png b/libtdegames/carddecks/cards-xskat-french/42.png
new file mode 100644
index 00000000..92e21830
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/42.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/43.png b/libtdegames/carddecks/cards-xskat-french/43.png
new file mode 100644
index 00000000..b39a4afa
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/43.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/44.png b/libtdegames/carddecks/cards-xskat-french/44.png
new file mode 100644
index 00000000..94bf0fc7
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/44.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/45.png b/libtdegames/carddecks/cards-xskat-french/45.png
new file mode 100644
index 00000000..bbdb0ad6
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/45.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/46.png b/libtdegames/carddecks/cards-xskat-french/46.png
new file mode 100644
index 00000000..ed610b6a
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/46.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/47.png b/libtdegames/carddecks/cards-xskat-french/47.png
new file mode 100644
index 00000000..2688622a
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/47.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/48.png b/libtdegames/carddecks/cards-xskat-french/48.png
new file mode 100644
index 00000000..0dc1d52e
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/48.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/49.png b/libtdegames/carddecks/cards-xskat-french/49.png
new file mode 100644
index 00000000..4499c0fd
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/49.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/5.png b/libtdegames/carddecks/cards-xskat-french/5.png
new file mode 100644
index 00000000..702b65bc
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/5.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/50.png b/libtdegames/carddecks/cards-xskat-french/50.png
new file mode 100644
index 00000000..9b8b6619
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/50.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/51.png b/libtdegames/carddecks/cards-xskat-french/51.png
new file mode 100644
index 00000000..1edf32d5
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/51.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/52.png b/libtdegames/carddecks/cards-xskat-french/52.png
new file mode 100644
index 00000000..0fe25caa
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/52.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/6.png b/libtdegames/carddecks/cards-xskat-french/6.png
new file mode 100644
index 00000000..642225b1
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/6.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/7.png b/libtdegames/carddecks/cards-xskat-french/7.png
new file mode 100644
index 00000000..a16236b0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/7.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/8.png b/libtdegames/carddecks/cards-xskat-french/8.png
new file mode 100644
index 00000000..3cb261c4
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/8.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/9.png b/libtdegames/carddecks/cards-xskat-french/9.png
new file mode 100644
index 00000000..2b1d9c43
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-french/9.png differ
diff --git a/libtdegames/carddecks/cards-xskat-french/COPYRIGHT b/libtdegames/carddecks/cards-xskat-french/COPYRIGHT
new file mode 100644
index 00000000..dc217dc3
--- /dev/null
+++ b/libtdegames/carddecks/cards-xskat-french/COPYRIGHT
@@ -0,0 +1,8 @@
+This PySol cardset was adapted from the game XSkat 4.0
+
+Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
+
+This cardset is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-xskat-french/index.desktop b/libtdegames/carddecks/cards-xskat-french/index.desktop
new file mode 100644
index 00000000..3dec4a0c
--- /dev/null
+++ b/libtdegames/carddecks/cards-xskat-french/index.desktop
@@ -0,0 +1,55 @@
+[KDE Backdeck]
+Name=XSkat French
+Name[be]=Французскі XSkat
+Name[bg]=Френски модел
+Name[bn]=ফরাসি এক্স-স্কাট
+Name[br]=XSkat gallek
+Name[bs]=XSkat Francuski
+Name[ca]=XSkat francès
+Name[cs]=Francouzský XSkat
+Name[cy]=XSkat Ffrangeg
+Name[da]=XSkat-fransk
+Name[de]=XSkat Französisch
+Name[el]=XSkat Γαλλικό
+Name[eo]=XSkat Franca
+Name[es]=XSkat francés
+Name[et]=XSkat (Prantsuse)
+Name[eu]=XSkat Frantsesa
+Name[fa]=XSkat فرانسوی
+Name[fi]=XSkat Ranska
+Name[fr]=XSkat français
+Name[he]=XSkat צרפתי
+Name[hr]=Francuski XSkat
+Name[hu]=FRancia XSkat
+Name[is]=XSkat á frönsku
+Name[it]=XSkat francese
+Name[ja]=XSkat フランス語
+Name[km]=XSkat បារាំង
+Name[ko]=프랑스 XSkat
+Name[lt]=XSkat Prancūziškai
+Name[lv]=XSkat Franču
+Name[mk]=Француски XSkat
+Name[nb]=Fransk XSkat
+Name[nds]=XSkat (Franzöösch)
+Name[ne]=एक्स स्क्याट फ्रेन्च
+Name[nl]=XSkat Frans
+Name[nn]=Fransk XSkat
+Name[pa]=XSkat ਫਰੈਂਚ
+Name[pl]=Francuski skat
+Name[pt]=XSkat Francês
+Name[pt_BR]=XSkat Francês
+Name[ru]=Французский XSkat
+Name[se]=Fránskkalaš XSkat
+Name[sk]=XSkat francúzsky
+Name[sl]=Francoski XSkat
+Name[sr]=XSkat француски
+Name[sr@Latn]=XSkat francuski
+Name[sv]=Fransk X-skat
+Name[ta]=XSkat ஃபிரஞ்ச்
+Name[tg]=XSkat Фаронсавӣ
+Name[tr]=XSkat Fransızca
+Name[uk]=Французький XSkat
+Name[zh_CN]=XSkat 法语
+Name[zh_TW]=XSkat 法語
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/cards-xskat-german/1.png b/libtdegames/carddecks/cards-xskat-german/1.png
new file mode 100644
index 00000000..e679884b
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/1.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/10.png b/libtdegames/carddecks/cards-xskat-german/10.png
new file mode 100644
index 00000000..c9590dbb
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/10.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/11.png b/libtdegames/carddecks/cards-xskat-german/11.png
new file mode 100644
index 00000000..d1c6f500
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/11.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/12.png b/libtdegames/carddecks/cards-xskat-german/12.png
new file mode 100644
index 00000000..5c92d83a
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/12.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/13.png b/libtdegames/carddecks/cards-xskat-german/13.png
new file mode 100644
index 00000000..d68f0c00
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/13.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/14.png b/libtdegames/carddecks/cards-xskat-german/14.png
new file mode 100644
index 00000000..324e3756
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/14.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/15.png b/libtdegames/carddecks/cards-xskat-german/15.png
new file mode 100644
index 00000000..9a516e30
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/15.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/16.png b/libtdegames/carddecks/cards-xskat-german/16.png
new file mode 100644
index 00000000..9d9dec03
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/16.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/17.png b/libtdegames/carddecks/cards-xskat-german/17.png
new file mode 100644
index 00000000..5dc10fa2
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/17.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/18.png b/libtdegames/carddecks/cards-xskat-german/18.png
new file mode 100644
index 00000000..90562629
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/18.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/19.png b/libtdegames/carddecks/cards-xskat-german/19.png
new file mode 100644
index 00000000..7e4552ab
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/19.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/2.png b/libtdegames/carddecks/cards-xskat-german/2.png
new file mode 100644
index 00000000..1c1f8118
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/2.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/20.png b/libtdegames/carddecks/cards-xskat-german/20.png
new file mode 100644
index 00000000..a15534b6
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/20.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/21.png b/libtdegames/carddecks/cards-xskat-german/21.png
new file mode 100644
index 00000000..7aca79e7
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/21.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/22.png b/libtdegames/carddecks/cards-xskat-german/22.png
new file mode 100644
index 00000000..b487a1c8
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/22.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/23.png b/libtdegames/carddecks/cards-xskat-german/23.png
new file mode 100644
index 00000000..761d3bfe
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/23.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/24.png b/libtdegames/carddecks/cards-xskat-german/24.png
new file mode 100644
index 00000000..537e590c
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/24.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/25.png b/libtdegames/carddecks/cards-xskat-german/25.png
new file mode 100644
index 00000000..09567171
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/25.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/26.png b/libtdegames/carddecks/cards-xskat-german/26.png
new file mode 100644
index 00000000..761fc42d
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/26.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/27.png b/libtdegames/carddecks/cards-xskat-german/27.png
new file mode 100644
index 00000000..05083aa2
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/27.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/28.png b/libtdegames/carddecks/cards-xskat-german/28.png
new file mode 100644
index 00000000..e885a908
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/28.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/29.png b/libtdegames/carddecks/cards-xskat-german/29.png
new file mode 100644
index 00000000..5b7244a0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/29.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/3.png b/libtdegames/carddecks/cards-xskat-german/3.png
new file mode 100644
index 00000000..978e63c0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/3.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/30.png b/libtdegames/carddecks/cards-xskat-german/30.png
new file mode 100644
index 00000000..3f8b03ef
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/30.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/31.png b/libtdegames/carddecks/cards-xskat-german/31.png
new file mode 100644
index 00000000..9ab830ce
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/31.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/32.png b/libtdegames/carddecks/cards-xskat-german/32.png
new file mode 100644
index 00000000..b87d68d0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/32.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/33.png b/libtdegames/carddecks/cards-xskat-german/33.png
new file mode 100644
index 00000000..078abf39
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/33.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/34.png b/libtdegames/carddecks/cards-xskat-german/34.png
new file mode 100644
index 00000000..94c5297f
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/34.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/35.png b/libtdegames/carddecks/cards-xskat-german/35.png
new file mode 100644
index 00000000..241ba5dc
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/35.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/36.png b/libtdegames/carddecks/cards-xskat-german/36.png
new file mode 100644
index 00000000..339a155a
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/36.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/37.png b/libtdegames/carddecks/cards-xskat-german/37.png
new file mode 100644
index 00000000..106023f4
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/37.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/38.png b/libtdegames/carddecks/cards-xskat-german/38.png
new file mode 100644
index 00000000..848f9696
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/38.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/39.png b/libtdegames/carddecks/cards-xskat-german/39.png
new file mode 100644
index 00000000..43eaba16
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/39.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/4.png b/libtdegames/carddecks/cards-xskat-german/4.png
new file mode 100644
index 00000000..d69848a0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/4.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/40.png b/libtdegames/carddecks/cards-xskat-german/40.png
new file mode 100644
index 00000000..87619dce
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/40.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/41.png b/libtdegames/carddecks/cards-xskat-german/41.png
new file mode 100644
index 00000000..6b09c88c
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/41.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/42.png b/libtdegames/carddecks/cards-xskat-german/42.png
new file mode 100644
index 00000000..04a1993b
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/42.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/43.png b/libtdegames/carddecks/cards-xskat-german/43.png
new file mode 100644
index 00000000..d5b92e29
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/43.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/44.png b/libtdegames/carddecks/cards-xskat-german/44.png
new file mode 100644
index 00000000..6cf2e09b
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/44.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/45.png b/libtdegames/carddecks/cards-xskat-german/45.png
new file mode 100644
index 00000000..b6a6a2a7
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/45.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/46.png b/libtdegames/carddecks/cards-xskat-german/46.png
new file mode 100644
index 00000000..05f686ab
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/46.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/47.png b/libtdegames/carddecks/cards-xskat-german/47.png
new file mode 100644
index 00000000..f31c89f3
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/47.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/48.png b/libtdegames/carddecks/cards-xskat-german/48.png
new file mode 100644
index 00000000..a8e1c51e
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/48.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/49.png b/libtdegames/carddecks/cards-xskat-german/49.png
new file mode 100644
index 00000000..2a473ac3
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/49.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/5.png b/libtdegames/carddecks/cards-xskat-german/5.png
new file mode 100644
index 00000000..66a4b568
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/5.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/50.png b/libtdegames/carddecks/cards-xskat-german/50.png
new file mode 100644
index 00000000..3a7d6ac0
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/50.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/51.png b/libtdegames/carddecks/cards-xskat-german/51.png
new file mode 100644
index 00000000..09e25a6c
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/51.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/52.png b/libtdegames/carddecks/cards-xskat-german/52.png
new file mode 100644
index 00000000..e7d74ae4
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/52.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/6.png b/libtdegames/carddecks/cards-xskat-german/6.png
new file mode 100644
index 00000000..e4b1d7de
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/6.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/7.png b/libtdegames/carddecks/cards-xskat-german/7.png
new file mode 100644
index 00000000..09e99d70
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/7.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/8.png b/libtdegames/carddecks/cards-xskat-german/8.png
new file mode 100644
index 00000000..58fdc56e
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/8.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/9.png b/libtdegames/carddecks/cards-xskat-german/9.png
new file mode 100644
index 00000000..b55ee847
Binary files /dev/null and b/libtdegames/carddecks/cards-xskat-german/9.png differ
diff --git a/libtdegames/carddecks/cards-xskat-german/COPYRIGHT b/libtdegames/carddecks/cards-xskat-german/COPYRIGHT
new file mode 100644
index 00000000..dc217dc3
--- /dev/null
+++ b/libtdegames/carddecks/cards-xskat-german/COPYRIGHT
@@ -0,0 +1,8 @@
+This PySol cardset was adapted from the game XSkat 4.0
+
+Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
+
+This cardset is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of
+the License, or (at your option) any later version.
diff --git a/libtdegames/carddecks/cards-xskat-german/index.desktop b/libtdegames/carddecks/cards-xskat-german/index.desktop
new file mode 100644
index 00000000..3f19d526
--- /dev/null
+++ b/libtdegames/carddecks/cards-xskat-german/index.desktop
@@ -0,0 +1,55 @@
+[KDE Backdeck]
+Name=XSkat German
+Name[be]=Нямецкі XSkat
+Name[bg]=Немски модел
+Name[bn]=জর্মন এক্স-স্কাট
+Name[br]=XSkat alamanek
+Name[bs]=XSkat Njemački
+Name[ca]=XSkat alemany
+Name[cs]=Německý XSkat
+Name[cy]=XSkat Almaeneg
+Name[da]=XSkat-tysk
+Name[de]=XSkat Deutsch
+Name[el]=XSkat Γερμανικό
+Name[eo]=XSkat Germana
+Name[es]=XSkat alemán
+Name[et]=XSkat (Saksa)
+Name[eu]=XSkat alemaniera
+Name[fa]=آلمانی XSkat
+Name[fi]=XSkat Saksa
+Name[fr]=XSkat allemand
+Name[he]=XSkat גרמני
+Name[hr]=Njemački XSkat
+Name[hu]=Német XSkat
+Name[is]=XSkat á þýsku
+Name[it]=XSkat tedesco
+Name[ja]=XSkat ドイツ語
+Name[km]=XSkat អាល្លឺម៉ង់
+Name[ko]=독일 XSkat
+Name[lt]=XSkat Vokiškai
+Name[lv]=XSkat Vācu
+Name[mk]=Германски XSkat
+Name[nb]=Tysk XSkat
+Name[nds]=XSkat (Düütsch)
+Name[ne]=एक्स स्क्याट जर्मन
+Name[nl]=XSkat Duits
+Name[nn]=Tysk XSkat
+Name[pa]=XSkat ਜਰਮਨ
+Name[pl]=Niemiecki skat
+Name[pt]=XSkat Alemã
+Name[pt_BR]=XSkat Alemão
+Name[ru]=Немецкий XSkat
+Name[se]=Duiskkalaš XSkat
+Name[sk]=XScat nemecký
+Name[sl]=Nemški XSkat
+Name[sr]=XSkat немачки
+Name[sr@Latn]=XSkat nemački
+Name[sv]=Tysk X-skat
+Name[ta]=XSkat ஜெர்மன்
+Name[tg]=XSkat Олмонӣ
+Name[tr]=XSkat Almanca
+Name[uk]=Німецький XSkat
+Name[zh_CN]=XSkat 德语
+Name[zh_TW]=XSkat 德語
+Preview=11.png
+PySol=yes
diff --git a/libtdegames/carddecks/convertpysols b/libtdegames/carddecks/convertpysols
new file mode 100755
index 00000000..f2434475
--- /dev/null
+++ b/libtdegames/carddecks/convertpysols
@@ -0,0 +1,69 @@
+#! /bin/sh
+
+cd $1
+
+convert -format png -tqgeometry "72x96" 01c.gif 1.png
+convert -format png -tqgeometry "72x96" 01s.gif 2.png
+convert -format png -tqgeometry "72x96" 01h.gif 3.png
+convert -format png -tqgeometry "72x96" 01d.gif 4.png
+
+convert -format png -tqgeometry "72x96" 13c.gif 5.png
+convert -format png -tqgeometry "72x96" 13s.gif 6.png
+convert -format png -tqgeometry "72x96" 13h.gif 7.png
+convert -format png -tqgeometry "72x96" 13d.gif 8.png
+
+convert -format png -tqgeometry "72x96" 12c.gif 9.png
+convert -format png -tqgeometry "72x96" 12s.gif 10.png
+convert -format png -tqgeometry "72x96" 12h.gif 11.png
+convert -format png -tqgeometry "72x96" 12d.gif 12.png
+
+convert -format png -tqgeometry "72x96" 11c.gif 13.png
+convert -format png -tqgeometry "72x96" 11s.gif 14.png
+convert -format png -tqgeometry "72x96" 11h.gif 15.png
+convert -format png -tqgeometry "72x96" 11d.gif 16.png
+
+convert -format png -tqgeometry "72x96" 10c.gif 17.png
+convert -format png -tqgeometry "72x96" 10s.gif 18.png
+convert -format png -tqgeometry "72x96" 10h.gif 19.png
+convert -format png -tqgeometry "72x96" 10d.gif 20.png
+
+convert -format png -tqgeometry "72x96" 09c.gif 21.png
+convert -format png -tqgeometry "72x96" 09s.gif 22.png
+convert -format png -tqgeometry "72x96" 09h.gif 23.png
+convert -format png -tqgeometry "72x96" 09d.gif 24.png
+
+convert -format png -tqgeometry "72x96" 08c.gif 25.png
+convert -format png -tqgeometry "72x96" 08s.gif 26.png
+convert -format png -tqgeometry "72x96" 08h.gif 27.png
+convert -format png -tqgeometry "72x96" 08d.gif 28.png
+
+convert -format png -tqgeometry "72x96" 07c.gif 29.png
+convert -format png -tqgeometry "72x96" 07s.gif 30.png
+convert -format png -tqgeometry "72x96" 07h.gif 31.png
+convert -format png -tqgeometry "72x96" 07d.gif 32.png
+
+convert -format png -tqgeometry "72x96" 06c.gif 33.png
+convert -format png -tqgeometry "72x96" 06s.gif 34.png
+convert -format png -tqgeometry "72x96" 06h.gif 35.png
+convert -format png -tqgeometry "72x96" 06d.gif 36.png
+
+convert -format png -tqgeometry "72x96" 05c.gif 37.png
+convert -format png -tqgeometry "72x96" 05s.gif 38.png
+convert -format png -tqgeometry "72x96" 05h.gif 39.png
+convert -format png -tqgeometry "72x96" 05d.gif 40.png
+
+convert -format png -tqgeometry "72x96" 04c.gif 41.png
+convert -format png -tqgeometry "72x96" 04s.gif 42.png
+convert -format png -tqgeometry "72x96" 04h.gif 43.png
+convert -format png -tqgeometry "72x96" 04d.gif 44.png
+
+convert -format png -tqgeometry "72x96" 03c.gif 45.png
+convert -format png -tqgeometry "72x96" 03s.gif 46.png
+convert -format png -tqgeometry "72x96" 03h.gif 47.png
+convert -format png -tqgeometry "72x96" 03d.gif 48.png
+
+convert -format png -tqgeometry "72x96" 02c.gif 49.png
+convert -format png -tqgeometry "72x96" 02s.gif 50.png
+convert -format png -tqgeometry "72x96" 02h.gif 51.png
+convert -format png -tqgeometry "72x96" 02d.gif 52.png
+
diff --git a/libtdegames/carddecks/decks/deck0.desktop b/libtdegames/carddecks/decks/deck0.desktop
new file mode 100644
index 00000000..0388ea4b
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck0.desktop
@@ -0,0 +1,113 @@
+[KDE Cards]
+Name=Technics
+Name[az]=Texnik
+Name[be]=Тэхніка
+Name[bg]=Техника
+Name[bn]=টেকনিক্স
+Name[bs]=Tehnički
+Name[ca]=Tècniques
+Name[cs]=Technika
+Name[eo]=Tekniko
+Name[es]=Técnicas
+Name[et]=Tehnika
+Name[eu]=Teknikoa
+Name[fi]=Tekniikka
+Name[fr]=Technique
+Name[gl]=Técnicas
+Name[hi]=टेक्निक्स
+Name[hr]=Tehnika
+Name[hu]=Technikai
+Name[id]=Teknik
+Name[is]=Tækni
+Name[it]=Tecnico
+Name[km]=វិធីសាស្ត្រ
+Name[lt]=Technika
+Name[lv]=Tehnika
+Name[mk]=Техника
+Name[mt]=Tekniċi
+Name[nb]=Teknisk
+Name[nds]=Technik
+Name[ne]=उपाय
+Name[nl]=Technisch
+Name[nn]=Teknisk
+Name[pt]=Técnico
+Name[pt_BR]=Técnicas
+Name[ro]=Tehnic
+Name[ru]=Шестерёнки
+Name[se]=Teknihkalaš
+Name[sk]=Technické
+Name[sl]=Tehnika
+Name[sr]=Техникс
+Name[sr@Latn]=Tehniks
+Name[sv]=Teknik
+Name[ta]=நுணுக்கங்கள்
+Name[tg]=Шомгонаҳо
+Name[th]=เทคนิค
+Name[tr]=Teknik
+Name[uk]=Шестерні
+Name[ven]=Madaela
+Name[vi]=Kĩ thuật 
+Name[xh]=iindlela zokudlala
+Name[zh_CN]=工艺
+Name[zh_TW]=工藝
+Comment=Standard KDE card deck
+Comment[af]=Standaard Kde kaart pak
+Comment[az]=Standart KDE kart dəstəsi
+Comment[be]=Стандартная калода картаў KDE
+Comment[bg]=Стандартна колода карти за KDE
+Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট
+Comment[bs]=Standardni KDE špil karata
+Comment[ca]=Joc de cartes estàndard del KDE
+Comment[cs]=Standardní sada karet KDE
+Comment[cy]=Set cerdiau safonol KDE
+Comment[da]=Standard KDE-kortspil
+Comment[de]=Standardmäßige KDE-Karten
+Comment[el]=Προκαθορισμένο σύνολο τράπουλας του KDE
+Comment[eo]=Normala KDEa kartaro
+Comment[es]=Baraja de cartas estándar de KDE
+Comment[et]=Standardne KDE kaardipakk
+Comment[eu]=KDE-ren karta-sorta
+Comment[fa]=دسته کارت استاندارد KDE
+Comment[fi]=Normaali KDE:n korttipakka
+Comment[fr]=Jeu de cartes standard de KDE
+Comment[gl]=Baralla de cartas estándar de KDE
+Comment[he]=חפיסת הקלפים הסטנדרטית של KDE
+Comment[hi]=मानक केडीई ताश गड्डी
+Comment[hr]=Standardni KDE komplet karata
+Comment[hu]=Standard KDE kártyacsomag
+Comment[is]=Venjulegi KDE spilastokkurinn
+Comment[it]=Mazzo di carte standard di KDE
+Comment[ja]=KDE 標準カードデッキ
+Comment[km]=ហូ​បៀ KDE ខ្នាត​គំរូ
+Comment[ko]=표준 KDE 카드 모음
+Comment[lt]=Standartinė KDE kortų kaladė
+Comment[lv]=Standarta KDE kāršu galds
+Comment[mk]=Стандарден шпил карти на KDE 
+Comment[mt]=Mazz karti standard tal-KDE
+Comment[nb]=Standard KDE-kortstokk
+Comment[nds]=KDE-Standardkoorten
+Comment[ne]=मानक केडीई कार्ड डेक
+Comment[nl]=Standaard KDE-kaartrug
+Comment[nn]=Standard KDE-kortstokk
+Comment[pa]=ਮਿਆਰੀ KDE ਤਾਸ਼ ਪੱਤੇ
+Comment[pl]=Standardowy zestaw kart KDE
+Comment[pt]=Baralho de cartas por omissão do KDE
+Comment[pt_BR]=Baralho padrão do KDE
+Comment[ro]=Set de cărţi de joc KDE standard
+Comment[ru]=Стандартная колода карт KDE
+Comment[sk]=Štandardný balíček kariet KDE
+Comment[sl]=Standardni komplet kart za KDE
+Comment[sr]=Стандардни KDE-ов шпил карата
+Comment[sr@Latn]=Standardni KDE-ov špil karata
+Comment[sv]=Förvald KDE-kortlek
+Comment[ta]=நிலையான கேடிஇ சீட்டின் மேல் தளம்                                                                                                                                                                                                                                                                                            
+Comment[tg]=Маҷмӯи кортҳои муқаррарии KDE
+Comment[th]=ชุดไพ่มาตรฐานของ KDE
+Comment[tr]=Standart KDE kart destesi
+Comment[uk]=Типовий малюнок карт KDE
+Comment[ven]=Tshidzhumba tsha magarata tsha murole wa KDE
+Comment[vi]=KDE card deck chuẩn 
+Comment[xh]=Umgangatho womphezulu wamakhadi eKDE 
+Comment[zh_CN]=标准 KDE 牌垛
+Comment[zh_TW]=標準 KDE 紙牌花色
+Comment[zu]=Isigaxa samakhadi esilinganisiwe we-KDE
diff --git a/libtdegames/carddecks/decks/deck0.png b/libtdegames/carddecks/decks/deck0.png
new file mode 100644
index 00000000..0a877a51
Binary files /dev/null and b/libtdegames/carddecks/decks/deck0.png differ
diff --git a/libtdegames/carddecks/decks/deck1.desktop b/libtdegames/carddecks/decks/deck1.desktop
new file mode 100644
index 00000000..0a8c2cf7
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck1.desktop
@@ -0,0 +1,56 @@
+[KDE Cards]
+Name=Fairy
+Name[af]=Fee
+Name[az]=Pəri
+Name[be]=Фея
+Name[bg]=Фея
+Name[bn]=পরী
+Name[ca]=Fada
+Name[cs]=Víla
+Name[cy]=Tylwyth Teg
+Name[da]=Fe
+Name[de]=Elfe
+Name[el]=Νεράιδα
+Name[eo]=Elfo
+Name[es]=Hada
+Name[et]=Haldjas
+Name[eu]=Maitagarria
+Name[fa]=جن و پری
+Name[fi]=Keijukainen
+Name[fr]=Féérie
+Name[gl]=Fada
+Name[hi]=परी
+Name[hr]=Vila
+Name[hu]=Tündéres
+Name[is]=Álfur
+Name[it]=Fata
+Name[km]=ទេវតា
+Name[ko]=요정
+Name[lt]=Fėja
+Name[lv]=Pasaku
+Name[mk]=Самовила
+Name[mt]=Għafrid
+Name[nb]=Fe
+Name[nds]=Fee
+Name[ne]=अप्सरा
+Name[nl]=Fee
+Name[nn]=Fe
+Name[pl]=Wróżkarski
+Name[pt]=Fada
+Name[pt_BR]=Mágico
+Name[ro]=Basm
+Name[ru]=Фея
+Name[sr]=Вила
+Name[sr@Latn]=Vila
+Name[sv]=Älva
+Name[ta]=தேவதை
+Name[tg]=Парӣ
+Name[tr]=Peri
+Name[uk]=Чарівний
+Name[uz]=Pari
+Name[uz@cyrillic]=Пари
+Name[ven]=Zwi a pfesesea
+Name[vi]=Xinh đẹp 
+Name[zh_CN]=仙女
+Name[zh_TW]=仙女
+Name[zu]=Okunomlingo
diff --git a/libtdegames/carddecks/decks/deck1.png b/libtdegames/carddecks/decks/deck1.png
new file mode 100644
index 00000000..247875a2
Binary files /dev/null and b/libtdegames/carddecks/decks/deck1.png differ
diff --git a/libtdegames/carddecks/decks/deck10.desktop b/libtdegames/carddecks/decks/deck10.desktop
new file mode 100644
index 00000000..5e871ede
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck10.desktop
@@ -0,0 +1,66 @@
+[KDE Cards]
+Name=Classic Blue
+Name[af]=Klasieke Blou
+Name[ar]=أزرق كلاسيكي
+Name[az]=Klassik Göy
+Name[be]=Класічны сіні
+Name[bg]=Класическо синьо
+Name[bn]=ক্লাসিক নীল
+Name[bs]=Klasični plavi
+Name[ca]=Blau clàssic
+Name[cs]=Klasická modrá
+Name[cy]=Glas Clasurol
+Name[da]=Klassisk blå
+Name[de]=Klassisches Blau
+Name[el]=Κλασσικό μπλε
+Name[eo]=Klasika bluo
+Name[es]=Azul clásico
+Name[et]=Klassikaline sinine
+Name[eu]=Urdin klasikoa
+Name[fa]=آبی کلاسیک‌
+Name[fi]=Klassinen sininen
+Name[fr]=Bleu classique
+Name[gl]=Azul clásico
+Name[he]=כחול קלסי 
+Name[hi]=आदर्श नीला
+Name[hr]=Klasično plava
+Name[hu]=Klasszikus kék
+Name[id]=Biru klasik
+Name[is]=Klassískur blár
+Name[it]=Blu classico
+Name[ja]=クラシックブルー
+Name[km]=ខៀវ​ក្លាស៊ិក
+Name[ko]=고전 파란색
+Name[lt]=Klasikinė mėlyna
+Name[lv]=Klasiski zils
+Name[mk]=Класично сино 
+Name[mt]=Blu Klassiku
+Name[nb]=Klassisk Blå
+Name[nds]=Klass'sch Blaag
+Name[ne]=उत्कृष्ट निलो
+Name[nl]=Klassiek blauw
+Name[nn]=Klassisk blå
+Name[pa]=ਟਕਸਾਲੀ ਨੀਲੇ
+Name[pl]=Klasyczny niebieski
+Name[pt]=Azul Clássico
+Name[pt_BR]=Azul Clássico
+Name[ro]=Albastru clasic
+Name[ru]=Классический синий
+Name[se]=Klassihkalaš alit
+Name[sk]=Klasické modré
+Name[sl]=Klasična modra
+Name[sr]=Класични плави
+Name[sr@Latn]=Klasični plavi
+Name[sv]=Klassisk blå
+Name[ta]=சிறந்த நீலம்
+Name[tg]=Кабуди Классикӣ
+Name[th]=ฟ้าคลาสสิค
+Name[tr]=Klasik Mavi
+Name[uk]=Блакитний
+Name[ven]=Muvhala wa Lutombo wa Maimo
+Name[vi]=Màu xanh cềEđiển 
+Name[wa]=Bleu classike
+Name[xh]=Umbala oblowu omdala
+Name[zh_CN]=经典蓝
+Name[zh_TW]=古典藍
+Name[zu]=Ubuluhlaza obuhle
diff --git a/libtdegames/carddecks/decks/deck10.png b/libtdegames/carddecks/decks/deck10.png
new file mode 100644
index 00000000..c84dcf73
Binary files /dev/null and b/libtdegames/carddecks/decks/deck10.png differ
diff --git a/libtdegames/carddecks/decks/deck11.desktop b/libtdegames/carddecks/decks/deck11.desktop
new file mode 100644
index 00000000..8d0fbb44
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck11.desktop
@@ -0,0 +1,66 @@
+[KDE Cards]
+Name=Classic Red
+Name[af]=Klasieke Rooi
+Name[ar]=أحمر كلاسيكي
+Name[az]=Klassik Qırmızı
+Name[be]=Класічны чырвоны
+Name[bg]=Класическо червено
+Name[bn]=ক্লাসিক লাল
+Name[bs]=Klasični crveni
+Name[ca]=Vermell clàssic
+Name[cs]=Klasická červená
+Name[cy]=Coch Clasurol
+Name[da]=Klassisk Rød
+Name[de]=Klassisches Rot
+Name[el]=Κλασσικό κόκκινο
+Name[eo]=Klasika ruĝo
+Name[es]=Rojo clásico
+Name[et]=Klassikaline punane
+Name[eu]=Gorri klasikoa
+Name[fa]=قرمز کلاسیک
+Name[fi]=Klassinen punainen
+Name[fr]=Rouge classique
+Name[gl]=Vermello clásico
+Name[he]=אדום קלסי
+Name[hi]=आदर्श लाल
+Name[hr]=Klasično crvena
+Name[hu]=klasszikus vörös
+Name[id]=Merah klasik
+Name[is]=Klassískur rauður
+Name[it]=Rosso classico
+Name[ja]=クラシックレッド
+Name[km]=ក្រហម​ក្លាស៊ិក
+Name[ko]=고전 빨간색
+Name[lt]=Klasikinė raudona
+Name[lv]=Klasiski sarkans
+Name[mk]=Класично црвено
+Name[mt]=Aħmar Klassiku
+Name[nb]=Klassisk Rød
+Name[nds]=Klass'sch Root
+Name[ne]=उत्कृष्ट रातो
+Name[nl]=Klassiek rood
+Name[nn]=Klassisk raud
+Name[pa]=ਟਕਸਾਲੀ ਲਾਲ
+Name[pl]=Klasyczny czerwony
+Name[pt]=Vermelho Clássico
+Name[pt_BR]=Vermelho Clássico
+Name[ro]=Roşu clasic
+Name[ru]=Классический красный
+Name[se]=Klassihkalaš ruoksat
+Name[sk]=Klasické červené
+Name[sl]=Klasična rdeča
+Name[sr]=Класични црвени
+Name[sr@Latn]=Klasični crveni
+Name[sv]=Klassisk röd
+Name[ta]= சிறந்த சிகப்பு
+Name[tg]=Сурхи Классикӣ
+Name[th]=แดงคลาสสิค
+Name[tr]=Klasik Kırmızı
+Name[uk]=Червоний
+Name[ven]=Muvhala Mutshuku wa Maimo
+Name[vi]=ĐềEcềEđiển 
+Name[wa]=Rodje classike
+Name[xh]=Umbala obomvu wakudala
+Name[zh_CN]=经典红
+Name[zh_TW]=古典紅
+Name[zu]=Ububomvu obuhle
diff --git a/libtdegames/carddecks/decks/deck11.png b/libtdegames/carddecks/decks/deck11.png
new file mode 100644
index 00000000..0474a551
Binary files /dev/null and b/libtdegames/carddecks/decks/deck11.png differ
diff --git a/libtdegames/carddecks/decks/deck12.desktop b/libtdegames/carddecks/decks/deck12.desktop
new file mode 100644
index 00000000..aa0918bd
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck12.desktop
@@ -0,0 +1,41 @@
+[KDE Cards]
+Name=Chin
+Name[af]=Ken
+Name[az]=Çənə
+Name[be]=Памада
+Name[bg]=Чин
+Name[bn]=চিবুক
+Name[cs]=Brada
+Name[cy]=Gên
+Name[eo]=Vizaĝo
+Name[eu]=Kokotsa
+Name[fr]=Visage
+Name[hi]=ठोढ़ी
+Name[hr]=Brada
+Name[is]=Haka
+Name[it]=Mento
+Name[ja]=中国
+Name[km]=ចង្កា
+Name[lt]=Smakras
+Name[lv]=Seja
+Name[mk]=Брада
+Name[nds]=Kinn
+Name[ne]=चिन
+Name[nl]=Kin
+Name[pl]=Podbródek
+Name[ro]=Bărbie
+Name[ru]=Помада
+Name[sl]=Džin
+Name[sr]=Брада
+Name[sr@Latn]=Brada
+Name[sv]=Pingla
+Name[ta]=தாடை
+Name[tg]=Манаҳ
+Name[tr]=Çene
+Name[uk]=Красуня
+Name[uz@cyrillic]=Чин
+Name[ven]=Tshitefu
+Name[xh]=Isilevu
+Name[zh_CN]=头像
+Name[zh_TW]=中國
+Name[zu]=Isilevu
diff --git a/libtdegames/carddecks/decks/deck12.png b/libtdegames/carddecks/decks/deck12.png
new file mode 100644
index 00000000..df9f6b71
Binary files /dev/null and b/libtdegames/carddecks/decks/deck12.png differ
diff --git a/libtdegames/carddecks/decks/deck13.desktop b/libtdegames/carddecks/decks/deck13.desktop
new file mode 100644
index 00000000..37180379
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck13.desktop
@@ -0,0 +1,63 @@
+[KDE Cards]
+Name=Copy
+Name[af]=Kopie
+Name[ar]=إنسخ
+Name[az]=Köçür
+Name[be]=Скапіяваць
+Name[bg]=Ръка
+Name[bn]=কপি
+Name[br]=Eilañ
+Name[bs]=Kopiraj
+Name[ca]=Còpia
+Name[cs]=Kopie
+Name[cy]=Copio
+Name[da]=Kopi
+Name[de]=Kopie
+Name[eo]=Mano
+Name[es]=Copia
+Name[et]=Koopia
+Name[eu]=Kopiatu
+Name[fi]=Kopio
+Name[fo]=Avrit
+Name[fr]=Copie
+Name[ga]=Cóipeáil
+Name[gl]=Copia
+Name[hi]=नक़ल
+Name[hr]=Kopija
+Name[hu]=Másolás
+Name[id]=Salin
+Name[is]=Afrit
+Name[it]=Impronta
+Name[ja]=コピー
+Name[km]=ចម្លង
+Name[lt]=Kopija
+Name[lv]=Kopija
+Name[mk]=Копија
+Name[mt]=Kopja
+Name[nb]=Kopier
+Name[nds]=Kopie
+Name[ne]=प्रतिलिपि
+Name[nl]=Hand
+Name[nn]=Kopi
+Name[pl]=Kopia
+Name[pt]=Cópia
+Name[pt_BR]=Cópia
+Name[ro]=Copie
+Name[ru]=Отпечаток
+Name[se]=Máŋgus
+Name[sl]=Prepis
+Name[sr]=Копија
+Name[sr@Latn]=Kopija
+Name[sv]=Kopia
+Name[ta]=படியெடு
+Name[tg]=Нақш
+Name[tr]=Kopyala
+Name[uk]=Копія
+Name[uz]=Nusxa
+Name[uz@cyrillic]=Нусха
+Name[ven]=Tshikopololwa
+Name[wa]=Copyî
+Name[xh]=Ukukopa
+Name[zh_CN]=复制
+Name[zh_TW]=復制品
+Name[zu]=Khiphela
diff --git a/libtdegames/carddecks/decks/deck13.png b/libtdegames/carddecks/decks/deck13.png
new file mode 100644
index 00000000..377ec7a1
Binary files /dev/null and b/libtdegames/carddecks/decks/deck13.png differ
diff --git a/libtdegames/carddecks/decks/deck14.desktop b/libtdegames/carddecks/decks/deck14.desktop
new file mode 100644
index 00000000..fd5df9f8
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck14.desktop
@@ -0,0 +1,66 @@
+[KDE Cards]
+Name=Penguin
+Name[af]=Pikkewyn
+Name[ar]=بطريق
+Name[az]=Pinqvin
+Name[be]=Пінгвін
+Name[bg]=Пингвин
+Name[bn]=পেঙ্গুইন
+Name[br]=Penn-gwenn
+Name[bs]=Pingvin
+Name[ca]=Pingüí
+Name[cs]=Tučňák
+Name[cy]=Pengwin
+Name[da]=Pingvin
+Name[de]=Pinguin
+Name[el]=Πιγκουίνος
+Name[eo]=Pingveno
+Name[es]=Pingüino
+Name[et]=Pingviin
+Name[eu]=Pinguinoa
+Name[fa]=پنگوئن
+Name[fi]=Pingviini
+Name[fr]=Pingouin
+Name[gl]=Pingüín
+Name[he]=פינגווין
+Name[hi]=पेंग्विन
+Name[hr]=Pingvin
+Name[hu]=Pingvin
+Name[is]=Mörgæs
+Name[it]=Pinguino
+Name[km]=ផេនឃ្វីន
+Name[ko]=펭귄
+Name[lt]=Pingvinas
+Name[lv]=Pingvīns
+Name[mk]=Пингвин
+Name[mt]=Pingwin
+Name[nb]=Pingvin
+Name[nds]=Pinguin
+Name[ne]=पेन्गुइन
+Name[nl]=Pinguïn
+Name[nn]=Pingvin
+Name[pa]=ਪੈਂਗੂਇਨ
+Name[pl]=Pingwin
+Name[pt]=Pinguim
+Name[pt_BR]=Pingüim
+Name[ro]=Pinguin
+Name[ru]=Пингвин
+Name[se]=Piŋviidna
+Name[sk]=Tučniak
+Name[sl]=Pingvin
+Name[sr]=Пингвин
+Name[sr@Latn]=Pingvin
+Name[sv]=Pingvin
+Name[ta]=பென்குயின்
+Name[tg]=Пингвин
+Name[th]=เพนกวิน
+Name[tr]=Penguen
+Name[uk]=Пінгвін
+Name[uz]=Pingvin
+Name[uz@cyrillic]=Пингвин
+Name[vi]=Chim cánh cụt 
+Name[wa]=Pingwin
+Name[xh]=Ipenguin
+Name[zh_CN]=企鹅
+Name[zh_TW]=企鵝
+Name[zu]=Inyoni yasemanzini
diff --git a/libtdegames/carddecks/decks/deck14.png b/libtdegames/carddecks/decks/deck14.png
new file mode 100644
index 00000000..694632bd
Binary files /dev/null and b/libtdegames/carddecks/decks/deck14.png differ
diff --git a/libtdegames/carddecks/decks/deck15.desktop b/libtdegames/carddecks/decks/deck15.desktop
new file mode 100644
index 00000000..92015b81
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck15.desktop
@@ -0,0 +1,19 @@
+[KDE Cards]
+Name=Tristan
+Name[be]=Трыстан
+Name[bg]=Тристан
+Name[bn]=ত্রিস্তান
+Name[eo]=Ornamo
+Name[hi]=ट्राईस्टान
+Name[hu]=Trisztán
+Name[lv]=Tristans
+Name[mk]=Тристан
+Name[ne]=ट्रिस्टान
+Name[pt]=Tristão
+Name[ru]=Тристан
+Name[sr]=Тристан
+Name[ta]=ட்ரிஸ்டன்
+Name[tg]=Тристан
+Name[uk]=Трістан
+Name[uz@cyrillic]=Тристан
+Name[zu]=I-Tristan
diff --git a/libtdegames/carddecks/decks/deck15.png b/libtdegames/carddecks/decks/deck15.png
new file mode 100644
index 00000000..73c3b92c
Binary files /dev/null and b/libtdegames/carddecks/decks/deck15.png differ
diff --git a/libtdegames/carddecks/decks/deck16.desktop b/libtdegames/carddecks/decks/deck16.desktop
new file mode 100644
index 00000000..11ec9761
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck16.desktop
@@ -0,0 +1,60 @@
+[KDE Cards]
+Name=Grandma
+Name[af]=Ouma
+Name[ar]=جدَة
+Name[az]=Nənə
+Name[be]=Бабуля
+Name[bg]=Стар стил
+Name[bn]=ঠাকুরমা, দাদী, নানী ইত্যাদি
+Name[br]=Mamm-goz
+Name[ca]=Àvia
+Name[cs]=Babička
+Name[cy]=Nain
+Name[da]=Bedstemor
+Name[de]=Großmutter
+Name[el]=Γιαγιά
+Name[eo]=Avinjo
+Name[es]=Abuela
+Name[et]=Vanaema
+Name[eu]=Amona
+Name[fi]=Isoäiti
+Name[fo]=Omma
+Name[fr]=Grand-mère
+Name[gl]=Aboa
+Name[he]=סבתא
+Name[hi]=दादी अम्मा
+Name[hr]=Baka
+Name[hu]=Nagyi
+Name[is]=Amma
+Name[it]=Nonna
+Name[km]=យាយ
+Name[ko]=할머니
+Name[lv]=Vecmāmiņa
+Name[mk]=Старовремско
+Name[mt]=Nanna
+Name[nb]=Bestemor
+Name[nds]=Oma
+Name[ne]=हजुरआमा
+Name[nl]=Grootmoeder
+Name[nn]=Bestemor
+Name[pl]=Babcia
+Name[pt]=Avó
+Name[pt_BR]=Vovó
+Name[ro]=Bunica
+Name[ru]=Бабуля
+Name[se]=Áhkku
+Name[sk]=Stará mama
+Name[sl]=Babica
+Name[sr]=Бака
+Name[sr@Latn]=Baka
+Name[sv]=Farmor
+Name[ta]=பாட்டி
+Name[tg]=Модаркалон
+Name[tr]=Büyük anne
+Name[uk]=Бабуся
+Name[ven]=Makhulu vha mukegulu
+Name[wa]=Grand-mere
+Name[xh]=Umakhulu
+Name[zh_CN]=祖母
+Name[zh_TW]=祖母
+Name[zu]=Ugogo
diff --git a/libtdegames/carddecks/decks/deck16.png b/libtdegames/carddecks/decks/deck16.png
new file mode 100644
index 00000000..8310ecbe
Binary files /dev/null and b/libtdegames/carddecks/decks/deck16.png differ
diff --git a/libtdegames/carddecks/decks/deck17.desktop b/libtdegames/carddecks/decks/deck17.desktop
new file mode 100644
index 00000000..1537939f
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck17.desktop
@@ -0,0 +1,65 @@
+[KDE Cards]
+Name=Modern Red
+Name[af]=Moderne Rooi
+Name[ar]=أحمر حديث
+Name[az]=Çağdaş Qırmızı
+Name[be]=Сучасны чырвоны
+Name[bg]=Модерно червено
+Name[bn]=আধুনিক লাল
+Name[bs]=Moderna crvena
+Name[ca]=Vermell modern
+Name[cs]=Moderní červená
+Name[cy]=Coch Cyfoes
+Name[da]=Moderne rød
+Name[de]=Modernes Rot
+Name[el]=Μοντέρνο κόκκινο
+Name[eo]=Moderna ruĝo
+Name[es]=Rojo moderno
+Name[et]=Modernpunane
+Name[eu]=Gorri modernoa
+Name[fa]=قرمز مدرن‌
+Name[fi]=Moderni punainen
+Name[fr]=Rouge moderne
+Name[gl]=Vermello moderno
+Name[he]=אדום מודרני
+Name[hi]=आधुनिक लाल
+Name[hr]=Suvremeno crvena
+Name[hu]=Modern vörös
+Name[is]=Nútíma rauður
+Name[it]=Rosso moderno
+Name[ja]=モダンレッド
+Name[km]=ពណ៌​ក្រហម​ទំនើប
+Name[ko]=현대적 빨간색
+Name[lt]=Moderni raudona
+Name[lv]=Moderni sarkans
+Name[mk]=Модерно црвено
+Name[mt]=Aħmar modern
+Name[nb]=Moderne Rød
+Name[nds]=Modern Root
+Name[ne]=उन्नत रातो
+Name[nl]=Modern rood
+Name[nn]=Moderne raud
+Name[pa]=ਨਵਾਂ ਲਾਲ
+Name[pl]=Nowoczesny czerwony
+Name[pt]=Vermelho Moderno
+Name[pt_BR]=Vermelho Moderno
+Name[ro]=Roşu modern
+Name[ru]=Современный красный
+Name[se]=Ođđaáigásaš ruoksat
+Name[sk]=Moderné červené
+Name[sl]=Moderna rdeča
+Name[sr]=Модерни црвени
+Name[sr@Latn]=Moderni crveni
+Name[sv]=Modern röd
+Name[ta]=நவீன சிகப்பு
+Name[tg]=Сурхи Замонавӣ
+Name[th]=แดงทันสมัย
+Name[tr]=Modern Kırmızı
+Name[uk]=Плетінь
+Name[ven]=Muvhala Mutshuku wa Tshizwino
+Name[vi]=Màu đềEhiện đại 
+Name[wa]=Rodje modiene
+Name[xh]=Umbala omtsha obomvu 
+Name[zh_CN]=现代红
+Name[zh_TW]=現代紅
+Name[zu]=Ububomvu besimanje
diff --git a/libtdegames/carddecks/decks/deck17.png b/libtdegames/carddecks/decks/deck17.png
new file mode 100644
index 00000000..71054897
Binary files /dev/null and b/libtdegames/carddecks/decks/deck17.png differ
diff --git a/libtdegames/carddecks/decks/deck18.desktop b/libtdegames/carddecks/decks/deck18.desktop
new file mode 100644
index 00000000..c3266a98
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck18.desktop
@@ -0,0 +1,19 @@
+[KDE Cards]
+Name=Holstentor
+Name[be]=Палац
+Name[bg]=Замък
+Name[bn]=হোলস্টেনটর
+Name[eo]=Holsten-pordego
+Name[hi]=हॉल्स्टेंटर
+Name[lv]=Holšteina
+Name[mk]=Холстентор
+Name[nds]=Holstendoor
+Name[ne]=होल्सटेन्टर
+Name[ru]=Замок
+Name[sr]=Холстентор
+Name[ta]=ஹால்ஸ்டென்டர்
+Name[tg]=Қулф
+Name[uk]=Замок
+Name[ven]=Vhushavhelo
+Name[zh_CN]=豪斯顿门
+Name[zu]=I-Holstentor
diff --git a/libtdegames/carddecks/decks/deck18.png b/libtdegames/carddecks/decks/deck18.png
new file mode 100644
index 00000000..fc93b02f
Binary files /dev/null and b/libtdegames/carddecks/decks/deck18.png differ
diff --git a/libtdegames/carddecks/decks/deck19.desktop b/libtdegames/carddecks/decks/deck19.desktop
new file mode 100644
index 00000000..d77c2c98
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck19.desktop
@@ -0,0 +1,63 @@
+[KDE Cards]
+Name=Horizon
+Name[af]=Horison
+Name[ar]=الأفق
+Name[az]=Üfüq
+Name[be]=Гарызонт
+Name[bg]=Хоризонт
+Name[bn]=দিগন্ত
+Name[br]=Dremmwel
+Name[bs]=Horizont
+Name[ca]=Horitzó
+Name[cs]=Horizont
+Name[cy]=Gorwel
+Name[da]=Horisont
+Name[de]=Horizont
+Name[el]=Ορίζοντας
+Name[eo]=Horizonto
+Name[es]=Horizonte
+Name[et]=Horisont
+Name[eu]=Zeruertza
+Name[fa]=افق
+Name[fi]=Horisontti
+Name[ga]=Léaslíne
+Name[gl]=Horizonte
+Name[he]=אופק
+Name[hi]=क्षितिज
+Name[hr]=Horizont
+Name[hu]=Horizont
+Name[is]=Sjóndeildarhringur
+Name[it]=Orizzonte
+Name[km]=ជើង​មេឃ
+Name[ko]=수평선
+Name[lv]=Horizonts
+Name[mk]=Хоризонт
+Name[mt]=Orizzont
+Name[nb]=Horisont
+Name[nds]=Kimm
+Name[ne]=क्षितिज
+Name[nn]=Horisont
+Name[pa]=ਖੇਤਰ
+Name[pl]=Horyzont
+Name[pt]=Horizonte
+Name[pt_BR]=Horizonte
+Name[ro]=Orizont
+Name[ru]=Горизонт
+Name[sk]=Horizont
+Name[sl]=Obzorje
+Name[sr]=Хоризонт
+Name[sr@Latn]=Horizont
+Name[sv]=Horisont
+Name[ta]=ஹாரிஸான்
+Name[tg]=Уфуқ
+Name[tr]=Ufuk
+Name[uk]=Обрій
+Name[uz]=Ufq
+Name[uz@cyrillic]=Уфқ
+Name[ven]=Magumoni a shango
+Name[vi]=Chân trời 
+Name[wa]=Roye di cir
+Name[xh]=Ulundi
+Name[zh_CN]=地平线
+Name[zh_TW]=地平線
+Name[zu]=Okusesibhakabhakeni
diff --git a/libtdegames/carddecks/decks/deck19.png b/libtdegames/carddecks/decks/deck19.png
new file mode 100644
index 00000000..1526e0b3
Binary files /dev/null and b/libtdegames/carddecks/decks/deck19.png differ
diff --git a/libtdegames/carddecks/decks/deck2.desktop b/libtdegames/carddecks/decks/deck2.desktop
new file mode 100644
index 00000000..4e3906b2
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck2.desktop
@@ -0,0 +1,49 @@
+[KDE Cards]
+Name=Starrise
+Name[ar]=ظهور النجوم
+Name[be]=Узыход зоркі
+Name[bg]=Звезди
+Name[bn]=তারার উদয়
+Name[ca]=Estrellat
+Name[cs]=Úsvit
+Name[cy]=Codiad y sêr
+Name[de]=Sternenaufgang
+Name[eo]=Stellumo
+Name[et]=Tähetõus
+Name[eu]=Izarrak
+Name[fa]=پدیدار شدن ستاره
+Name[fi]=Tähdennousu
+Name[fr]=Étoiles
+Name[he]=צאת הכוכבים
+Name[hi]=स्टार-राइज़
+Name[hr]=Uspon zvijezda
+Name[hu]=Csillagok
+Name[is]=Ris stjarna
+Name[it]=Alba spaziale
+Name[ko]=별무리
+Name[lv]=Zvaigžņu lēkts
+Name[mk]=Изгрев
+Name[mt]=SemaStilel
+Name[nb]=Stjerner
+Name[nds]=Steernopgang
+Name[ne]=स्टारराइज
+Name[nl]=Sterrijzenis
+Name[nn]=Stjerner
+Name[pa]=ਚੜਦਾ ਤਾਰਾ
+Name[pl]=Wschód gwiazdy
+Name[ro]=Stelar
+Name[ru]=Восход звезды
+Name[se]=Násttit
+Name[sk]=Východ hviezd
+Name[sl]=Vzhod zvezde
+Name[sr]=Сазвежђе
+Name[sr@Latn]=Sazvežđe
+Name[sv]=Stjärnuppgång
+Name[ta]=நட்சத்திர உதயம்
+Name[tg]=Пайдоиши ситора
+Name[uk]=Схід зірки
+Name[ven]=Vhubva naledzi
+Name[xh]=Inkwenkwezi ephumayo
+Name[zh_CN]=星空
+Name[zh_TW]=星空
+Name[zu]=Ukuvuka kwezinkanyezi
diff --git a/libtdegames/carddecks/decks/deck2.png b/libtdegames/carddecks/decks/deck2.png
new file mode 100644
index 00000000..52f1b67a
Binary files /dev/null and b/libtdegames/carddecks/decks/deck2.png differ
diff --git a/libtdegames/carddecks/decks/deck20.desktop b/libtdegames/carddecks/decks/deck20.desktop
new file mode 100644
index 00000000..3403b23f
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck20.desktop
@@ -0,0 +1,71 @@
+[KDE Cards]
+Name=Flowers
+Name[af]=Blomme
+Name[ar]=أزهار
+Name[az]=Çiçəklər
+Name[be]=Кветкі
+Name[bg]=Цветя
+Name[bn]=ফুল
+Name[br]=Bleunioù
+Name[bs]=Cvijeće
+Name[ca]=Flors
+Name[cs]=Květiny
+Name[cy]=Blodau
+Name[da]=Blomster
+Name[de]=Blumen
+Name[el]=Λουλούδια
+Name[eo]=Floroj
+Name[es]=Flores
+Name[et]=Lilled
+Name[eu]=Loreak
+Name[fa]=گلها
+Name[fi]=Kukat
+Name[fo]=Blómur
+Name[fr]=Fleurs
+Name[ga]=Bláthanna
+Name[gl]=Flores
+Name[he]=פרחים
+Name[hi]=पुष्प
+Name[hr]=Cvjetovi
+Name[hu]=Virágok
+Name[is]=Blóm
+Name[it]=Fiori
+Name[ja]=花
+Name[km]=ផ្កា
+Name[ko]=꽃
+Name[lt]=Gėlės
+Name[lv]=Puķes
+Name[mk]=Цвеќиња
+Name[mt]=Fjuri
+Name[nb]=Blomster
+Name[nds]=Blomen
+Name[ne]=फूल
+Name[nl]=Bloemen
+Name[nn]=Blomar
+Name[nso]=Maloba
+Name[pa]=ਫੁੱਲ
+Name[pl]=Kwiaty
+Name[pt]=Flores
+Name[pt_BR]=Flores
+Name[ro]=Flori
+Name[ru]=Цветы
+Name[se]=Lieđit
+Name[sk]=Kvety
+Name[sl]=Rože
+Name[sr]=Цвеће
+Name[sr@Latn]=Cveće
+Name[sv]=Blommor
+Name[ta]=மலர்கள்
+Name[tg]=Гулҳо
+Name[th]=ดอกไม้
+Name[tr]=Çiçekler
+Name[uk]=Квіти
+Name[uz]=Gullar
+Name[uz@cyrillic]=Гуллар
+Name[ven]=Maluvha
+Name[vi]=Hoa 
+Name[wa]=Fleurs
+Name[xh]=Iintyatyambo
+Name[zh_CN]=鲜花
+Name[zh_TW]=鮮花
+Name[zu]=Izimbali
diff --git a/libtdegames/carddecks/decks/deck20.png b/libtdegames/carddecks/decks/deck20.png
new file mode 100644
index 00000000..73d76887
Binary files /dev/null and b/libtdegames/carddecks/decks/deck20.png differ
diff --git a/libtdegames/carddecks/decks/deck21.desktop b/libtdegames/carddecks/decks/deck21.desktop
new file mode 100644
index 00000000..b170ee53
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck21.desktop
@@ -0,0 +1,65 @@
+[KDE Cards]
+Name=Carpet
+Name[af]=Tapyt
+Name[ar]=سجادة
+Name[az]=Xalı
+Name[be]=Дыван
+Name[bg]=Килим
+Name[bn]=গালিচা
+Name[bs]=Ćilim
+Name[ca]=Catifa
+Name[cs]=Koberec
+Name[cy]=Carped
+Name[da]=Tæppe
+Name[de]=Teppich
+Name[el]=Μοκέτα
+Name[eo]=Tapiŝo
+Name[es]=Alfombra
+Name[et]=Vaip
+Name[eu]=Tapiza
+Name[fa]=فرش
+Name[fi]=Matto
+Name[fr]=Tapis
+Name[gl]=Alfombra
+Name[he]=שטיח
+Name[hi]=कालीन
+Name[hr]=Tepih
+Name[hu]=Szőnyeg
+Name[is]=Teppi
+Name[it]=Tappeto
+Name[km]=កម្រាល​ព្រំ
+Name[ko]=양탄자
+Name[lt]=Kilimas
+Name[lv]=Paklājs
+Name[mk]=Килим
+Name[mt]=Tapit
+Name[nb]=Teppe
+Name[nds]=Teppich
+Name[ne]=कार्पेट
+Name[nl]=Tapijt
+Name[nn]=Teppe
+Name[pa]=ਦਰੀ
+Name[pl]=Dywan
+Name[pt]=Carpete
+Name[pt_BR]=Carpete
+Name[ro]=Carpetă
+Name[ru]=Ковёр
+Name[se]=Máhttá
+Name[sl]=Preproga
+Name[sr]=Тепих
+Name[sr@Latn]=Tepih
+Name[sv]=Matta
+Name[ta]=கம்பளம்
+Name[tg]=Гилем
+Name[th]=พรม
+Name[tr]=Halı
+Name[uk]=Килим
+Name[uz]=Gilam
+Name[uz@cyrillic]=Гилам
+Name[ven]=Dzithovho
+Name[vi]=Thảm 
+Name[wa]=Carpete
+Name[xh]=Ikhaphethi
+Name[zh_CN]=地毯
+Name[zh_TW]=地毯
+Name[zu]=UKhaphethi
diff --git a/libtdegames/carddecks/decks/deck21.png b/libtdegames/carddecks/decks/deck21.png
new file mode 100644
index 00000000..204156ba
Binary files /dev/null and b/libtdegames/carddecks/decks/deck21.png differ
diff --git a/libtdegames/carddecks/decks/deck22.desktop b/libtdegames/carddecks/decks/deck22.desktop
new file mode 100644
index 00000000..940b4f53
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck22.desktop
@@ -0,0 +1,58 @@
+[KDE Cards]
+Name=Bathing
+Name[af]=Swem
+Name[ar]=يتحمم
+Name[az]=Çimmə
+Name[be]=Купанне
+Name[bg]=Море
+Name[bn]=গোসল, স্নান
+Name[bs]=Kupanje
+Name[ca]=Balneari
+Name[cs]=Koupel
+Name[cy]=Ymolchi
+Name[da]=Badning
+Name[de]=Baden
+Name[eo]=Banloko
+Name[es]=Balneario
+Name[et]=Suplus
+Name[eu]=Bainua
+Name[fi]=Kylpy
+Name[fr]=Baignade
+Name[gl]=Baño
+Name[he]=מקלחת
+Name[hi]=बाथिंग
+Name[hr]=Kupanje
+Name[hu]=Fürdő
+Name[is]=Í baði
+Name[it]=Balneare
+Name[km]=កំពុង​ងូត​ទឹក
+Name[ko]=목욕
+Name[lt]=Maudynės
+Name[lv]=Peldēšanās
+Name[mk]=Капење
+Name[mt]=Għawm
+Name[nb]=Bading
+Name[nds]=Baden
+Name[ne]=नुहाएको
+Name[nl]=Baden
+Name[nn]=Bad
+Name[pl]=Kąpiel
+Name[pt]=Banho
+Name[pt_BR]=Banho
+Name[ro]=Îmbăiere
+Name[ru]=Купание
+Name[se]=Lávgudeapmi
+Name[sl]=Kopel
+Name[sr]=Купање
+Name[sr@Latn]=Kupanje
+Name[sv]=Bad
+Name[ta]=குளியல்
+Name[tg]=Оббозӣ
+Name[tr]=Yüzme
+Name[uk]=Купання
+Name[ven]=Hu khou tambiwa
+Name[vi]=Tắm 
+Name[xh]=Ukuhlamba
+Name[zh_CN]=游泳
+Name[zh_TW]=游泳
+Name[zu]=Ukugeza
diff --git a/libtdegames/carddecks/decks/deck22.png b/libtdegames/carddecks/decks/deck22.png
new file mode 100644
index 00000000..ff3f9834
Binary files /dev/null and b/libtdegames/carddecks/decks/deck22.png differ
diff --git a/libtdegames/carddecks/decks/deck23.desktop b/libtdegames/carddecks/decks/deck23.desktop
new file mode 100644
index 00000000..ef096f15
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck23.desktop
@@ -0,0 +1,55 @@
+[KDE Cards]
+Name=Oasis
+Name[af]=Oase
+Name[ar]=واحة
+Name[az]=Oazis
+Name[be]=Аазіс
+Name[bg]=Оазис
+Name[bn]=মরুদ্যান
+Name[br]=Oazis
+Name[bs]=Oaza
+Name[cs]=Oáza
+Name[da]=Oase
+Name[de]=Oase
+Name[el]=Όαση
+Name[eo]=Oazo
+Name[et]=Oaas
+Name[eu]=Oasia
+Name[fa]=آبادی
+Name[fo]=Oasa
+Name[hi]=ओएसिस
+Name[hr]=Oaza
+Name[hu]=Oázis
+Name[is]=Vin
+Name[it]=Oasi
+Name[ko]=오아시스
+Name[lt]=Oazė
+Name[lv]=Oāze
+Name[mk]=Оаза
+Name[mt]=Oażi
+Name[nb]=Oase
+Name[nds]=Oaas
+Name[ne]=ओसिस
+Name[nl]=Oase
+Name[nn]=Oase
+Name[pl]=Oaza
+Name[pt]=Oásis
+Name[pt_BR]=Oásis
+Name[ru]=Оазис
+Name[sk]=Oáza
+Name[sl]=Oaza
+Name[sr]=Оаза
+Name[sr@Latn]=Oaza
+Name[sv]=Oas
+Name[ta]=ஒயாஸிஸ்
+Name[tg]=Оазис
+Name[th]=โอเอซิส
+Name[tr]=Vaha
+Name[uk]=Оазис
+Name[uz]=Voha
+Name[uz@cyrillic]=Воҳа
+Name[vi]=Ô'c đảo 
+Name[xh]=Indawo esentlango enamanzi
+Name[zh_CN]=绿洲
+Name[zh_TW]=綠洲
+Name[zu]=Indawo evundileyo
diff --git a/libtdegames/carddecks/decks/deck23.png b/libtdegames/carddecks/decks/deck23.png
new file mode 100644
index 00000000..a3025212
Binary files /dev/null and b/libtdegames/carddecks/decks/deck23.png differ
diff --git a/libtdegames/carddecks/decks/deck24.desktop b/libtdegames/carddecks/decks/deck24.desktop
new file mode 100644
index 00000000..002af784
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck24.desktop
@@ -0,0 +1,60 @@
+[KDE Cards]
+Name=Konqi
+Name[be]=Конкі
+Name[bg]=Конки
+Name[bn]=কনকি
+Name[cs]=Konqui
+Name[eo]=Konĉja
+Name[hi]=के-ऑन्गी
+Name[it]=Konqui
+Name[lv]=Konvi
+Name[ne]=कोन्क्वी
+Name[ru]=Конки
+Name[sr]=Конки
+Name[sr@Latn]=Konki
+Name[ta]=கான்கி
+Name[tg]=Конки
+Name[uk]=Конкі
+Name[zu]=I-Konqi
+Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[bs]=Modern Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n     <l_layland@hotmail.com>\nKonqi per Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Laylanda\n     <l_layland@hotmail.com>\nKonqi von Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n    <l_layland@hotmail.com>\nKonĉjo de Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n     لایلند <l_layland@hotmail.com>\nKonqi توسط استفان اسپاتز\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n <l_layland@hotmail.com>\nKonqi Stefan Spatza\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n     <l_layland@hotmail.com>\nKonqi par Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[he]=קונקי מודרני - חפיסת קלים לכל השפחה\nעיצוב: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n     <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n    <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[it]=Konqui Moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKonqui di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n     <l_layland@hotmail.com>\nKonqi の作者: Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n
+Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Konkvi no Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
+Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi vun Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ne]=आधुनिक क्वोन्की - पारिवारिक कार्डडेक\nडिजाइन प्ले: लाउरा लेल्यान्ड\n     <l_layland@hotmail.com>\nKonqi, स्टेफन स्पार्टजद्वारा\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n     <l_layland@hotmail.com>\nKonqi door Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n     <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerxburg.de>
+Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ru]=Колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Layland\n <l_layland@hotmail.com>\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[ta]=மார்டன் கான்கி - குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லௌரா லேலாண்டு\n      <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n      <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Layland\n     <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n     <l_layland@hotmail.com>\nKonqi pa Stefan Spatz\n     <stefan.spatz@stud-mail.uni-wuerzburg.de>
+Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libtdegames/carddecks/decks/deck24.png b/libtdegames/carddecks/decks/deck24.png
new file mode 100644
index 00000000..0596e919
Binary files /dev/null and b/libtdegames/carddecks/decks/deck24.png differ
diff --git a/libtdegames/carddecks/decks/deck3.desktop b/libtdegames/carddecks/decks/deck3.desktop
new file mode 100644
index 00000000..a383495e
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck3.desktop
@@ -0,0 +1,60 @@
+[KDE Cards]
+Name=Romantic
+Name[af]=Romantiese
+Name[ar]=رومانسي
+Name[az]=Romantik
+Name[be]=Рамантыка
+Name[bg]=Романтика
+Name[bn]=রোমান্টিক
+Name[bs]=Romantika
+Name[ca]=Romàntic
+Name[cs]=Romantika
+Name[cy]=Rhamantus
+Name[da]=Romantisk
+Name[de]=Romantisch
+Name[el]=Ρομαντικό
+Name[eo]=Romantiko
+Name[es]=Romántico
+Name[et]=Romantika
+Name[eu]=Erromantikoa
+Name[fa]=خیال‌انگیز
+Name[fi]=Romanttinen
+Name[fr]=Romantique
+Name[gl]=Romántica
+Name[he]=רומנטי
+Name[hi]=रूमानी
+Name[hr]=Romantika
+Name[hu]=Romantikus
+Name[is]=Rómantískt
+Name[it]=Romantico
+Name[km]=មនោសញ្ចេតនា
+Name[ko]=로맨틱
+Name[lt]=Romantika
+Name[lv]=Romantika
+Name[mk]=Романтика
+Name[mt]=Romantiku
+Name[nb]=Romantisk
+Name[nds]=Romantsch
+Name[ne]=रोमान्टिक
+Name[nl]=Romantisch
+Name[nn]=Romantisk
+Name[pa]=ਰੁਮਾਂਸਵਾਦੀ
+Name[pl]=Romantyczny
+Name[pt]=Romântico
+Name[pt_BR]=Romântico
+Name[ru]=Романтика
+Name[se]=Romántalaš
+Name[sk]=Romantické
+Name[sl]=Romantično
+Name[sr]=Романтичан
+Name[sr@Latn]=Romantičan
+Name[sv]=Romantisk
+Name[ta]=ரொமான்டிக்
+Name[tg]=Хаёлпарастӣ
+Name[th]=โรแมนติก
+Name[uk]=Романтичний
+Name[vi]=Lãng mạn 
+Name[wa]=Romantike
+Name[zh_CN]=浪漫
+Name[zh_TW]=浪漫的
+Name[zu]=I-Romantic
diff --git a/libtdegames/carddecks/decks/deck3.png b/libtdegames/carddecks/decks/deck3.png
new file mode 100644
index 00000000..dced5af7
Binary files /dev/null and b/libtdegames/carddecks/decks/deck3.png differ
diff --git a/libtdegames/carddecks/decks/deck4.desktop b/libtdegames/carddecks/decks/deck4.desktop
new file mode 100644
index 00000000..c23f4963
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck4.desktop
@@ -0,0 +1,93 @@
+[KDE Cards]
+Name=Panda
+Name[ar]=باندا
+Name[be]=Панда
+Name[bg]=Панда
+Name[bn]=পান্ডা
+Name[el]=Πάντα
+Name[eo]=Pando
+Name[fa]=پاندا
+Name[he]=פנדה
+Name[hi]=पाण्डा
+Name[is]=Pandabjörn
+Name[ko]=팬더
+Name[mk]=Панда
+Name[ne]=पान्डा
+Name[pa]=ਪਾਂਡਾ
+Name[ru]=Панда
+Name[sr]=Панда
+Name[ta]=பாண்டா
+Name[tg]=Панда
+Name[th]=แพนด้า
+Name[uk]=Панда
+Name[uz@cyrillic]=Панда
+Name[ven]=Tshivhingwi
+Name[vi]=Gấu mèo 
+Name[xh]=Ibhere
+Name[zh_CN]=熊猫
+Name[zh_TW]=熊貓
+Name[zu]=Ibhele
+Comment=Dedicated to WWF
+Comment[af]=Opgedra  na Wwf
+Comment[ar]=إهداء إلى المؤسسة العالمية للحفاظ على البيئة (WWF) 
+Comment[az]=WWFyə hasr edilib
+Comment[be]=Прысвячаецца WWF
+Comment[bg]=Посвещава се на WWF
+Comment[bn]=WWF-এর প্রতি উত্‍সর্গীকৃত
+Comment[bs]=Posvećen WWFu
+Comment[ca]=Dedicat a WWF
+Comment[cs]=Věnované WWF
+Comment[cy]=Cyflwynedig i\'r WWF
+Comment[da]=Dedikeret til WWF
+Comment[de]=Dem WWF gewidmet
+Comment[el]=Αφιερωμένο στο WWF
+Comment[eo]=Dediĉita al WWF
+Comment[es]=Dedicado a WWF
+Comment[et]=Pühendatud organisatsioonile WWF
+Comment[eu]=WWF-ren ohorean
+Comment[fa]=مختص WWF
+Comment[fi]=Omistettu WWF:lle
+Comment[fr]=Dédicacé au WWF
+Comment[gl]=Adicado a WWF
+Comment[he]=מוקדש לקרן העולמית
+Comment[hi]=डब्लयूडब्लयूएफ को समर्पित
+Comment[hr]=Posvećeno WWF-u
+Comment[hu]=A WWF-nek dedikálva
+Comment[is]=Tileinkað WWF
+Comment[it]=Dedicato al WWF
+Comment[ja]=WWF に捧ぐ
+Comment[km]=ឧទ្ទិស​ជូន WWF
+Comment[ko]=WWF에 바침
+Comment[lt]=Skirta WWF
+Comment[lv]=Veltīts WWF
+Comment[mk]=Посветено на WWF (светска фондација за дивиот свет)
+Comment[mt]=Dedikat lill-WWF
+Comment[nb]=Dedikert til WWF
+Comment[nds]=Den WWF toeegt
+Comment[ne]=डब्लूडब्लूएफ प्रति समर्पित
+Comment[nl]=Opgedragen aan WWF (WereldNatuurFonds)
+Comment[nn]=Tileigna WWF
+Comment[pa]=WWF ਨੂੰ ਸਮਰਪਤ
+Comment[pl]=Przeznaczony do WWF
+Comment[pt]=Dedicado ao WWF
+Comment[pt_BR]=Dedicado ao WWF
+Comment[ro]=Dedicat lui WWF
+Comment[ru]=Посвящается WWF
+Comment[sk]=Venované WWF
+Comment[sl]=Posvečeno WWF
+Comment[sr]=Посвећено WWF-у
+Comment[sr@Latn]=Posvećeno WWF-u
+Comment[sv]=Tillägnad WWF
+Comment[ta]= WWF-க்கு அர்ப்பணிக்கப்பட்டது
+Comment[tg]=Бахшида шудааст ба WWF
+Comment[tr]=WWF'e adanmış
+Comment[uk]=Присвячено WWF
+Comment[uz]=WWF tashkilotiga bagʻishlangan
+Comment[uz@cyrillic]=WWF ташкилотига бағишланган
+Comment[ven]=Yo livhiswa kha WWF
+Comment[vi]=Dâng tặng WWF 
+Comment[wa]=Dicåçté å WWF
+Comment[xh]=Yenzelwe ku WWF
+Comment[zh_CN]=献给 WWF
+Comment[zh_TW]=獻給 WWF
+Comment[zu]=Inikelwe kwi-WWF
diff --git a/libtdegames/carddecks/decks/deck4.png b/libtdegames/carddecks/decks/deck4.png
new file mode 100644
index 00000000..23fa4010
Binary files /dev/null and b/libtdegames/carddecks/decks/deck4.png differ
diff --git a/libtdegames/carddecks/decks/deck5.desktop b/libtdegames/carddecks/decks/deck5.desktop
new file mode 100644
index 00000000..5cbe2d6f
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck5.desktop
@@ -0,0 +1,67 @@
+[KDE Cards]
+Name=Water
+Name[ar]=ماء
+Name[az]=Su
+Name[be]=Вада
+Name[bg]=Вода
+Name[bn]=পানি
+Name[br]=Dou
+Name[bs]=Voda
+Name[ca]=Aigua
+Name[cs]=Voda
+Name[cy]=Dŵr
+Name[da]=Vand
+Name[de]=Wasser
+Name[el]=Νερό
+Name[eo]=Akvo
+Name[es]=Agua
+Name[et]=Vesi
+Name[eu]=Ura
+Name[fa]=آب
+Name[fi]=Vesi
+Name[fo]=Vatn
+Name[fr]=Eau
+Name[ga]=Uisce
+Name[gl]=Auga
+Name[he]=מים
+Name[hi]=पानी
+Name[hr]=Voda
+Name[hu]=Víz
+Name[is]=Vatn
+Name[it]=Acqua
+Name[ja]=水
+Name[km]=ទឹក
+Name[ko]=물
+Name[lt]=Vanduo
+Name[lv]=Ūdens
+Name[mk]=Вода
+Name[mt]=Ilma
+Name[nb]=Vann
+Name[ne]=पानी
+Name[nn]=Vatn
+Name[nso]=Meetse
+Name[pa]=ਪਾਣੀ
+Name[pl]=Woda
+Name[pt]=Água
+Name[pt_BR]=Água
+Name[ro]=Apă
+Name[ru]=Вода
+Name[se]=Čáhci
+Name[sk]=Voda
+Name[sl]=Voda
+Name[sr]=Вода
+Name[sr@Latn]=Voda
+Name[sv]=Vatten
+Name[ta]=தண்ணீர்
+Name[tg]=Об
+Name[th]=น้ำ
+Name[uk]=Вода
+Name[uz]=Suv
+Name[uz@cyrillic]=Сув
+Name[ven]=Madi
+Name[vi]=Nước 
+Name[wa]=Aiwe
+Name[xh]=Amanzi
+Name[zh_CN]=水
+Name[zh_TW]=水
+Name[zu]=Amanzi
diff --git a/libtdegames/carddecks/decks/deck5.png b/libtdegames/carddecks/decks/deck5.png
new file mode 100644
index 00000000..63cb6762
Binary files /dev/null and b/libtdegames/carddecks/decks/deck5.png differ
diff --git a/libtdegames/carddecks/decks/deck6.desktop b/libtdegames/carddecks/decks/deck6.desktop
new file mode 100644
index 00000000..6d84a8ad
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck6.desktop
@@ -0,0 +1,66 @@
+[KDE Cards]
+Name=Beach
+Name[af]=Strand
+Name[ar]=شاطئ
+Name[az]=Çimərlik
+Name[be]=Пляж
+Name[bg]=Плаж
+Name[bn]=সৈকত
+Name[br]=Traezhenn
+Name[bs]=Plaža
+Name[ca]=Platja
+Name[cs]=Pláž
+Name[cy]=Traeth
+Name[da]=Strand
+Name[de]=Strand
+Name[el]=Παραλία
+Name[eo]=Plaĝo
+Name[es]=Playa
+Name[et]=Rand
+Name[eu]=Hondartza
+Name[fa]=ساحل
+Name[fi]=Ranta
+Name[fr]=Plage
+Name[gl]=Praia
+Name[he]=חוף
+Name[hi]=समुद्र तट
+Name[hr]=Plaža
+Name[hu]=Tengerpart
+Name[is]=Strönd
+Name[it]=Spiaggia
+Name[km]=ឆ្នេរ​ខ្សាច់
+Name[ko]=바닷가
+Name[lt]=Paplūdimys
+Name[lv]=Pludmale
+Name[mk]=Плажа
+Name[mt]=Ramla
+Name[nb]=Strand
+Name[nds]=Strand
+Name[ne]=किनारा
+Name[nl]=Strand
+Name[nn]=Strand
+Name[nso]=Lewatle
+Name[pa]=ਬੀਚ
+Name[pl]=Plaża
+Name[pt]=Praia
+Name[pt_BR]=Praia
+Name[ro]=Plajă
+Name[ru]=Пляж
+Name[se]=Fiervá
+Name[sk]=Pláž
+Name[sl]=Obala
+Name[sr]=Плажа
+Name[sr@Latn]=Plaža
+Name[sv]=Strand
+Name[ta]=கடல்
+Name[tg]=Пляж
+Name[th]=อ่าว
+Name[tr]=Sahil
+Name[uk]=Пляж
+Name[ven]=Bitshini
+Name[vi]=Bãi biển 
+Name[wa]=Pladje
+Name[xh]=Ulwande
+Name[zh_CN]=海滩
+Name[zh_TW]=海灘
+Name[zu]=Ulwandle
diff --git a/libtdegames/carddecks/decks/deck6.png b/libtdegames/carddecks/decks/deck6.png
new file mode 100644
index 00000000..1708d784
Binary files /dev/null and b/libtdegames/carddecks/decks/deck6.png differ
diff --git a/libtdegames/carddecks/decks/deck7.desktop b/libtdegames/carddecks/decks/deck7.desktop
new file mode 100644
index 00000000..3590a15e
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck7.desktop
@@ -0,0 +1,67 @@
+[KDE Cards]
+Name=Sunset
+Name[af]=Sonsondergang
+Name[ar]=غروب الشمس
+Name[az]=Gün doğuşu
+Name[be]=Заход
+Name[bg]=Залез
+Name[bn]=সূর্যাস্ত
+Name[br]=Kuzh-heol
+Name[bs]=Zalazak
+Name[ca]=Posta de sol
+Name[cs]=Západ slunce
+Name[cy]=Machlud
+Name[da]=Solnedgang
+Name[de]=Sonnenuntergang
+Name[el]=Ηλιοβασίλεμα
+Name[eo]=Sunsubiro
+Name[es]=Puesta de sol
+Name[et]=Loojang
+Name[eu]=Eguzki-sartzea
+Name[fa]=غروب
+Name[fi]=Auringonlasku
+Name[fo]=Sólsetur
+Name[fr]=Soleil
+Name[gl]=Entre lusco e fusco
+Name[he]=שקיעה
+Name[hi]=सूर्यास्त
+Name[hr]=Zalazak sunca
+Name[hu]=Naplemente
+Name[is]=Sólsetur
+Name[it]=Tramonto
+Name[km]=សុរិយា​អស្ដង្គត
+Name[ko]=저녁놀
+Name[lt]=Saulėlydis
+Name[lv]=Saullēkts
+Name[mk]=Зајдисонце
+Name[mt]=Għabex
+Name[nb]=Solnedgang
+Name[nds]=Sünnünnergang
+Name[ne]=सुर्यास्त
+Name[nl]=Zonsondergang
+Name[nn]=Solrenning
+Name[pa]=ਡੁੱਬਦਾ ਸੂਰਜ
+Name[pl]=Zachód słońca
+Name[pt]=Pôr-do-Sol
+Name[pt_BR]=Pôr-do-sol
+Name[ro]=Asfinţit
+Name[ru]=Закат
+Name[sk]=Západ slnka
+Name[sl]=Sončni zahod
+Name[sr]=Залазак сунца
+Name[sr@Latn]=Zalazak sunca
+Name[sv]=Solnedgång
+Name[ta]=சூரிய அஸ்தமம்
+Name[tg]=Ғуруби Офтоб
+Name[th]=พระอาทิตย์ตก
+Name[tr]=Gündoğumu
+Name[uk]=Захід сонця
+Name[uz]=Oqshom
+Name[uz@cyrillic]=Оқшом
+Name[ven]=Vhukovhela
+Name[vi]=Hoàng hôn 
+Name[wa]=Solea djus
+Name[xh]=Ukutshona kwelanga
+Name[zh_CN]=日落
+Name[zh_TW]=日落
+Name[zu]=Ukushona kwelanga
diff --git a/libtdegames/carddecks/decks/deck7.png b/libtdegames/carddecks/decks/deck7.png
new file mode 100644
index 00000000..c7f043db
Binary files /dev/null and b/libtdegames/carddecks/decks/deck7.png differ
diff --git a/libtdegames/carddecks/decks/deck8.desktop b/libtdegames/carddecks/decks/deck8.desktop
new file mode 100644
index 00000000..0c68bc9f
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck8.desktop
@@ -0,0 +1,67 @@
+[KDE Cards]
+Name=Road
+Name[af]=Pad
+Name[ar]=طريق
+Name[az]=Yol
+Name[be]=Дарога
+Name[bg]=Път
+Name[bn]=পথ
+Name[bs]=Put
+Name[ca]=Carretera
+Name[cs]=Cesta
+Name[cy]=Ffordd
+Name[da]=Vej
+Name[de]=Straße
+Name[el]=Δρόμος
+Name[eo]=Strato
+Name[es]=Carretera
+Name[et]=Maantee
+Name[eu]=Errepidea
+Name[fa]=جاده
+Name[fi]=Tie
+Name[fo]=Vegur
+Name[fr]=Route
+Name[gl]=Estrada
+Name[he]=בדרכים
+Name[hi]=रास्ता
+Name[hr]=Cesta
+Name[hu]=Országút
+Name[is]=Vegur
+Name[it]=Strada
+Name[km]=ផ្លូវ
+Name[ko]=길
+Name[lt]=Kelias
+Name[lv]=Ceļš
+Name[mk]=Пат
+Name[mt]=Triq
+Name[nb]=Vei
+Name[nds]=Straat
+Name[ne]=बाटो
+Name[nl]=Weg
+Name[nn]=Veg
+Name[nso]=Tsela
+Name[pa]=ਰਾਹ
+Name[pl]=Droga
+Name[pt]=Estrada
+Name[pt_BR]=Estrada
+Name[ro]=Şosea
+Name[ru]=Дорога
+Name[se]=Geaidnu
+Name[sk]=Cesta
+Name[sl]=Cesta
+Name[sr]=Пут
+Name[sr@Latn]=Put
+Name[sv]=Väg
+Name[ta]=சாலை
+Name[tg]=Роҳ
+Name[th]=ถนน
+Name[tr]=Yol
+Name[uk]=Дорога
+Name[uz]=Yoʻl
+Name[uz@cyrillic]=Йўл
+Name[ven]=Bada
+Name[vi]=Con đường 
+Name[xh]=Indlela
+Name[zh_CN]=路
+Name[zh_TW]=道路
+Name[zu]=Umgwaqo
diff --git a/libtdegames/carddecks/decks/deck8.png b/libtdegames/carddecks/decks/deck8.png
new file mode 100644
index 00000000..4fed86e6
Binary files /dev/null and b/libtdegames/carddecks/decks/deck8.png differ
diff --git a/libtdegames/carddecks/decks/deck9.desktop b/libtdegames/carddecks/decks/deck9.desktop
new file mode 100644
index 00000000..2541e22a
--- /dev/null
+++ b/libtdegames/carddecks/decks/deck9.desktop
@@ -0,0 +1,7 @@
+[KDE Cards]
+Name=KDE
+Name[af]=Kde
+Name[bn]=কে.ডি.ই.
+Name[hi]=केडीई
+Name[ne]=केडीई
+Name[ta]=கேடிஇ
diff --git a/libtdegames/carddecks/decks/deck9.png b/libtdegames/carddecks/decks/deck9.png
new file mode 100644
index 00000000..35abd0a8
Binary files /dev/null and b/libtdegames/carddecks/decks/deck9.png differ
diff --git a/libtdegames/configure.in.in b/libtdegames/configure.in.in
new file mode 100644
index 00000000..ffcaf9c9
--- /dev/null
+++ b/libtdegames/configure.in.in
@@ -0,0 +1,49 @@
+dnl AB: checking for a system-wide highscore file. If "no" then the default
+dnl (just kapp->config()) is used. See KHighscore for details.
+
+AC_MSG_CHECKING(whether to use system-wide highscores)
+AC_ARG_ENABLE(highscore-dir,
+AC_HELP_STRING([--enable-highscore-dir=DIR], [system-wide highscore table @<:@default=no@:>@]), [use_highscore_dir=yes], [use_highscore_dir=no])
+
+if test "$use_highscore_dir" = "no"; then
+  AC_MSG_RESULT(no)
+  AC_SUBST(HIGHSCORE_DIRECTORY, "")
+else
+  case "${enableval}" in
+    yes) highscore_dir='${localstatedir}/games' ;;
+    no) ;;
+    *) highscore_dir=${enableval} ;;
+  esac
+  AC_DEFINE_UNQUOTED(HIGHSCORE_DIRECTORY, "$highscore_dir", [The system-wide highscore directory])
+  AC_SUBST(HIGHSCORE_DIRECTORY, $highscore_dir)
+  AC_MSG_RESULT($use_highscore_dir)
+fi
+
+AC_MSG_CHECKING(whether to setgid binaries)
+AC_ARG_ENABLE(setgid,
+  [  --enable-setgid           Enable the use of setgid binaries],
+  [case "${enableval}" in
+    yes) 
+        case "$use_highscore_dir" in 
+           yes) setgid=true;; 
+           no) setgid=false;; 
+        esac ;;
+    no)  setgid=false ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for --disable-setgid) ;;
+   esac],[setgid=false])
+AC_SUBST(setgid)
+AC_MSG_RESULT($setgid)
+
+AC_MSG_CHECKING(what group to use for the highscore tables and binaries)
+AC_ARG_WITH(highscore-group,
+[  --with-highscore-group=group    Group for the highscore tables and binaries],
+highscore_group="$withval",highscore_group="games")
+AC_SUBST(highscore_group)
+AC_MSG_RESULT($highscore_group)
+
+AC_MSG_CHECKING(what user to use for the highscore tables and binaries)
+AC_ARG_WITH(highscore-user,
+[  --with-highscore-user=user    User for the highscore tables],
+highscore_user="$withval",highscore_user="games")
+AC_SUBST(highscore_user)
+AC_MSG_RESULT($highscore_user)
diff --git a/libtdegames/highscore/INSTALL b/libtdegames/highscore/INSTALL
new file mode 100644
index 00000000..5f9116cf
--- /dev/null
+++ b/libtdegames/highscore/INSTALL
@@ -0,0 +1,12 @@
+Installation notes for the highscore files ; this is only relevant if you
+configured libtdegames with option --enable-highscore-dir=DIR (usually DIR is
+/var/games) for using system-wide highscore files.
+
+For each game using the highscore system :
+
+- the game executable "mygame" should be installed sgid "games"
+
+- an empty file "mygame.scores" should be created in the directory pointed by
+the configuration option. It should be owned by group "games" with read and
+write permissions and should -not- be world readable (since it can contains
+possibly sensitive information associating username with game usage).
diff --git a/libtdegames/highscore/Makefile.am b/libtdegames/highscore/Makefile.am
new file mode 100644
index 00000000..6fa18cc0
--- /dev/null
+++ b/libtdegames/highscore/Makefile.am
@@ -0,0 +1,19 @@
+noinst_LTLIBRARIES = libkhighscore.la
+
+INCLUDES = $(all_includes)
+
+libkhighscore_la_SOURCES =  kconfigrawbackend.cpp \
+	                    kfilelock.cpp khighscore.cpp kscoredialog.cpp \
+                            kexthighscore_item.cpp kexthighscore_internal.cpp \
+                            kexthighscore_tab.cpp kexthighscore_gui.cpp \
+                            kexthighscore.cpp
+
+include_HEADERS = khighscore.h kscoredialog.h \
+                  kexthighscore_item.h kexthighscore.h
+
+noinst_HEADERS = kconfigrawbackend.h \
+                 kfilelock.h kexthighscore_internal.h kexthighscore_tab.h \
+                 kexthighscore_gui.h
+
+METASOURCES = kconfigrawbackend.moc khighscore.moc kscoredialog.moc \
+              kexthighscore_tab.moc kexthighscore_gui.moc
diff --git a/libtdegames/highscore/kconfigrawbackend.cpp b/libtdegames/highscore/kconfigrawbackend.cpp
new file mode 100644
index 00000000..c2643056
--- /dev/null
+++ b/libtdegames/highscore/kconfigrawbackend.cpp
@@ -0,0 +1,62 @@
+/*
+   This file is part of the KDE games library
+   Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+#include "kconfigrawbackend.h"
+#include "kconfigrawbackend.moc"
+
+#include <unistd.h>
+#include <tqfile.h>
+
+
+KConfigRawBackEnd::KConfigRawBackEnd(KConfigBase *_config, int fd)
+    : KConfigINIBackEnd(_config, TQString(), "config", false),
+      _fd(fd), _stream(0)
+{
+    _file.open(IO_ReadOnly, _fd);
+}
+
+KConfigRawBackEnd::~KConfigRawBackEnd()
+{
+    if (_stream) fclose(_stream);
+}
+
+bool KConfigRawBackEnd::parseConfigFiles()
+{
+    _file.reset();
+    parseSingleConfigFile(_file);
+    return true;
+}
+
+void KConfigRawBackEnd::sync(bool bMerge)
+{
+  // write-sync is only necessary if there are dirty entries
+  if ( !pConfig->isDirty() || pConfig->isReadOnly() ) return;
+
+  _file.reset();
+  KEntryMap aTempMap;
+  getEntryMap(aTempMap, false, bMerge ? &_file : 0);
+
+  if ( _stream==0 ) {
+      _stream = fdopen(_fd, "w");
+      if ( _stream==0 ) return;
+  }
+  ftruncate(_fd, 0);
+  writeEntries(_stream, aTempMap);
+  fflush(_stream);
+}
diff --git a/libtdegames/highscore/kconfigrawbackend.h b/libtdegames/highscore/kconfigrawbackend.h
new file mode 100644
index 00000000..6a1ea4b9
--- /dev/null
+++ b/libtdegames/highscore/kconfigrawbackend.h
@@ -0,0 +1,58 @@
+/*
+   This file is part of the KDE games library
+   Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KCONFIGRAWBACKEND_H
+#define _KCONFIGRAWBACKEND_H
+
+#include <tqfile.h>
+
+#include <kconfigbackend.h>
+#include <ksimpleconfig.h>
+
+
+class KConfigRawBackEnd : public KConfigINIBackEnd
+{
+public:
+    KConfigRawBackEnd(KConfigBase *_config, int fd);
+    ~KConfigRawBackEnd();
+
+    bool parseConfigFiles();
+
+    void sync(bool bMerge = true);
+
+private:
+    int   _fd;
+    FILE *_stream;
+    TQFile _file;
+
+    class KConfigRawBackEndPrivate;
+    KConfigRawBackEndPrivate *d;
+};
+
+class KRawConfig : public KSimpleConfig
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    KRawConfig(int fd, bool readOnly)
+        : KSimpleConfig(new KConfigRawBackEnd(this, fd), readOnly) {}
+};
+
+
+#endif
diff --git a/libtdegames/highscore/kexthighscore.cpp b/libtdegames/highscore/kexthighscore.cpp
new file mode 100644
index 00000000..d352a266
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore.cpp
@@ -0,0 +1,289 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kexthighscore.h"
+
+#include <tqlayout.h>
+
+#include <kdebug.h>
+
+#include "kexthighscore_internal.h"
+#include "kexthighscore_gui.h"
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+ManagerPrivate *internal = 0;
+
+uint gameType()
+{
+    internal->checkFirst();
+    return internal->gameType();
+}
+
+void setGameType(uint type)
+{
+    internal->setGameType(type);
+}
+
+bool configure(TQWidget *parent)
+{
+    internal->checkFirst();
+    ConfigDialog *cd = new ConfigDialog(parent);
+    cd->exec();
+    bool saved = cd->hasBeenSaved();
+    delete cd;
+    return saved;
+}
+
+void show(TQWidget *parent, int rank)
+{
+    HighscoresDialog *hd = new HighscoresDialog(rank, parent);
+    hd->exec();
+    delete hd;
+}
+
+void submitScore(const Score &score, TQWidget *widget)
+{
+    int rank = internal->submitScore(score, widget,
+                                     internal->showMode!=Manager::NeverShow);
+
+    switch (internal->showMode) {
+    case Manager::AlwaysShow:
+        show(widget, -1);
+        break;
+    case Manager::ShowForHigherScore:
+        if ( rank!=-1) show(widget, rank);
+        break;
+    case Manager::ShowForHighestScore:
+        if ( rank==0 ) show(widget, rank);
+        break;
+    case Manager::NeverShow:
+        break;
+    }
+}
+
+void show(TQWidget *widget)
+{
+    internal->checkFirst();
+    show(widget, -1);
+}
+
+Score lastScore()
+{
+    internal->checkFirst();
+    internal->hsConfig().readCurrentConfig();
+    uint nb = internal->scoreInfos().maxNbEntries();
+    return internal->readScore(nb-1);
+}
+
+Score firstScore()
+{
+    internal->checkFirst();
+    internal->hsConfig().readCurrentConfig();
+    return internal->readScore(0);
+}
+
+
+//-----------------------------------------------------------------------------
+Manager::Manager(uint nbGameTypes, uint maxNbEntries)
+{
+    Q_ASSERT(nbGameTypes);
+    Q_ASSERT(maxNbEntries);
+    if (internal)
+        kdFatal(11002) << "A highscore object already exists" << endl;
+    internal = new ManagerPrivate(nbGameTypes, *this);
+    internal->init(maxNbEntries);
+}
+
+Manager::~Manager()
+{
+    delete internal;
+    internal = 0;
+}
+
+void Manager::setTrackLostGames(bool track)
+{
+    internal->trackLostGames = track;
+}
+
+void Manager::setTrackDrawGames(bool track)
+{
+    internal->trackDrawGames = track;
+}
+
+void Manager::setShowStatistics(bool show)
+{
+    internal->showStatistics = show;
+}
+
+void Manager::showStatistics(bool show)
+{
+    internal->showStatistics = show;
+}
+
+void Manager::setShowDrawGamesStatistic(bool show)
+{
+    internal->showDrawGames = show;
+}
+
+void Manager::setWWHighscores(const KURL &url, const TQString &version)
+{
+    Q_ASSERT( url.isValid() );
+    internal->serverURL = url;
+    const char *HS_WW_URL = "ww hs url";
+    ConfigGroup cg;
+    if ( cg.config()->hasKey(HS_WW_URL) )
+        internal->serverURL = cg.config()->readEntry(HS_WW_URL);
+    else cg.config()->writeEntry(HS_WW_URL, url.url());
+    internal->version = version;
+}
+
+void Manager::setScoreHistogram(const TQMemArray<uint> &scores,
+                                ScoreTypeBound type)
+{
+    Q_ASSERT( scores.size()>=2 );
+    for (uint i=0; i<scores.size()-1; i++)
+        Q_ASSERT( scores[i]<scores[i+1] );
+    internal->playerInfos().createHistoItems(scores, type==ScoreBound);
+}
+
+void Manager::setShowMode(ShowMode mode)
+{
+    internal->showMode = mode;
+}
+
+void Manager::setScoreType(ScoreType type)
+{
+    switch (type) {
+    case Normal:
+        return;
+    case MinuteTime: {
+        Item *item = createItem(ScoreDefault);
+        item->setPrettyFormat(Item::MinuteTime);
+        setScoreItem(0, item);
+
+        item = createItem(MeanScoreDefault);
+        item->setPrettyFormat(Item::MinuteTime);
+        setPlayerItem(MeanScore, item);
+
+        item = createItem(BestScoreDefault);
+        item->setPrettyFormat(Item::MinuteTime);
+        setPlayerItem(BestScore, item);
+        return;
+    }
+    }
+}
+
+void Manager::submitLegacyScore(const Score &score) const
+{
+    internal->submitLocal(score);
+}
+
+bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const
+{
+    return s1.score()<s2.score();
+}
+
+Item *Manager::createItem(ItemType type)
+{
+    Item *item = 0;
+    switch (type) {
+    case ScoreDefault:
+        item = new Item((uint)0, i18n("Score"), TQt::AlignRight);
+        break;
+    case MeanScoreDefault:
+        item = new Item((double)0, i18n("Mean Score"), TQt::AlignRight);
+        item->setPrettyFormat(Item::OneDecimal);
+        item->setPrettySpecial(Item::DefaultNotDefined);
+        break;
+    case BestScoreDefault:
+        item = new Item((uint)0, i18n("Best Score"), TQt::AlignRight);
+        item->setPrettySpecial(Item::DefaultNotDefined);
+        break;
+    case ElapsedTime:
+        item = new Item((uint)0, i18n("Elapsed Time"), TQt::AlignRight);
+        item->setPrettyFormat(Item::MinuteTime);
+        item->setPrettySpecial(Item::ZeroNotDefined);
+        break;
+    }
+    return item;
+}
+
+void Manager::setScoreItem(uint worstScore, Item *item)
+{
+    item->setDefaultValue(worstScore);
+    internal->scoreInfos().setItem("score", item);
+    internal->playerInfos().item("mean score")
+        ->item()->setDefaultValue(double(worstScore));
+    internal->playerInfos().item("best score")
+        ->item()->setDefaultValue(worstScore);
+}
+
+void Manager::addScoreItem(const TQString &name, Item *item)
+{
+    internal->scoreInfos().addItem(name, item, true);
+}
+
+void Manager::setPlayerItem(PlayerItemType type, Item *item)
+{
+    const Item *scoreItem = internal->scoreInfos().item("score")->item();
+    uint def = scoreItem->defaultValue().toUInt();
+    TQString name;
+    switch (type) {
+    case MeanScore:
+        name = "mean score";
+        item->setDefaultValue(double(def));
+        break;
+    case BestScore:
+        name = "best score";
+        item->setDefaultValue(def);
+        break;
+    }
+    internal->playerInfos().setItem(name, item);
+}
+
+TQString Manager::gameTypeLabel(uint gameType, LabelType type) const
+{
+    if ( gameType!=0 )
+        kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for "
+                       << "multiple game types" << endl;
+    switch (type) {
+    case Icon:
+    case Standard:
+    case I18N:     break;
+    case WW:       return "normal";
+    }
+    return TQString();
+}
+
+void Manager::addToQueryURL(KURL &url, const TQString &item,
+                               const TQString &content)
+{
+    Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() );
+
+    TQString query = url.query();
+    if ( !query.isEmpty() ) query += '&';
+	query += item + '=' + KURL::encode_string(content);
+	url.setQuery(query);
+}
+
+} // namescape
diff --git a/libtdegames/highscore/kexthighscore.h b/libtdegames/highscore/kexthighscore.h
new file mode 100644
index 00000000..5809a896
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore.h
@@ -0,0 +1,367 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXTHIGHSCORE_H
+#define KEXTHIGHSCORE_H
+
+#include "kexthighscore_item.h"
+
+#include <kurl.h>
+#include <kdemacros.h>
+
+class TQTabWidget;
+
+
+namespace KExtHighscore
+{
+
+class Score;
+class Item;
+
+class ManagerPrivate;
+extern ManagerPrivate *internal;
+
+/**
+ * Get the current game type.
+ */
+KDE_EXPORT uint gameType();
+
+/**
+ * Set the current game type.
+ */
+KDE_EXPORT void setGameType(uint gameType);
+
+/**
+ * Configure the highscores.
+ * @return true if the configuration has been modified and saved
+ */
+KDE_EXPORT bool configure(TQWidget *parent);
+
+/**
+ * Show the highscores lists.
+ */
+KDE_EXPORT void show(TQWidget *parent);
+
+/**
+ * Submit a score. See @ref Manager for usage example.
+ *
+ * @param widget a widget used as parent for error message box.
+ */
+KDE_EXPORT void submitScore(const Score &score, TQWidget *widget);
+
+/**
+ * @return the last score in the local list of highscores. The worst possible
+ * score if there are less items than the maximum number.
+ */
+KDE_EXPORT Score lastScore();
+
+/**
+ * @return the first score in the local list of highscores (the worst possible
+ * score if there is no entry).
+ */
+KDE_EXPORT Score firstScore();
+
+/**
+ * This class manages highscores and players entries (several players can
+ * share the same highscores list if the libkdegame library is built to
+ * support a common highscores file; NOTE that to correctly implement such
+ * feature we probably need a locking mechanism in @ref KHighscore).
+ *
+ * You need one instance of this class during the application lifetime ; in
+ * main() just insert 
+ * \code
+ *   KExtHighscore::Manager highscoresManager;
+ * \endcode
+ * with the needed arguments. Use the derived class if you need to
+ * reimplement some of the default methods.
+ *
+ * This class has three functions :
+ * <ul>
+ * <li> Update the highscores list when new entries are submitted </li>
+ * <li> Display the highscores list and the players list </li>
+ * <li> Send query to an optionnal web server to support world-wide
+ *      highscores </li>
+ * </ul>
+ *
+ * The highscores and the players lists contain several items described by
+ * the @ref Item class.
+ *
+ * The highscores list contains by default :
+ * <ul>
+ * <li> the player name (automatically set from the config value)</li>
+ * <li> the score value </li>
+ * <li> the time and date of the highscore (automatically set) </li>
+ * </ul>
+ * You can replace the score item (for e.g. displaying it differently) with
+ * setScoreItem or add an item with addScoreItem.
+ *
+ * The players list contains :
+ * <ul>
+ * <li> the player name (as defined by the user in the configuration
+ *      dialog) </li>
+ * <li> the number of games played </li>
+ * <li> the mean score </li>
+ * <li> the best score </li>
+ * <li> the best score time and date </li>
+ * <li> the player comment (as defined by the user in the
+ *      configuration dialog) </li>
+ * </ul>
+ * You can replace the best score and the mean score items
+ * by calling setPlayerItem.
+ *
+ * To submit a new score at game end, just construct a Score, set the
+ * score data and then call submitScore().
+ * \code
+ *     KExtHighscore::Score score(KExtHighscore::Won);
+ *     score.setScore(myScore);
+ *     KExtHighscore::submitScore(score, widget);
+ * \endcode
+ * You only need to set the score value with Score::setScore()
+ * and the value of the items that you have optionnally added
+ * with Score::setData() ; player name and date are set automatically.
+ */
+class KDE_EXPORT Manager
+{
+ public:
+    /**
+     * Constructor
+     *
+     * @param nbGameTypes the number of different game types (usually one).
+     *        For example KMines has easy, normal and expert levels.
+     * @param maxNbEntries the maximum numbers of highscores entries (by game
+     *        types)
+     */
+    Manager(uint nbGameTypes = 1, uint maxNbEntries = 10);
+    virtual ~Manager();
+    
+    /**
+     * Set the world-wide highscores.
+     * By default there is no world-wide highscores.
+     *
+     * Note: should be called at construction time.
+     *
+     * @param url the web server url
+     * @param version the game version which is sent to the web server (it can
+     * be useful for backward compatibility on the server side).
+     */
+    void setWWHighscores(const KURL &url, const TQString &version);
+
+    /**
+     * Set if the number of lost games should be track for the world-wide
+     * highscores statistics. By default, there is no tracking.
+     * False by default.
+     *
+     * Note: should be called at construction time.
+     */
+    void setTrackLostGames(bool track);
+    
+    /**
+     * @since 3.3
+     * Set if the number of "draw" games should be track for the world-wide
+     * highscores statistics. By default, there is no tracking.
+     * False by default.
+     *
+     * Note: should be called at construction time.
+     */
+    void setTrackDrawGames(bool track);
+
+    /**
+     * @since 3.3
+     * Set if the statistics tab should be shown in the highscores dialog.
+     * You only want to show this tab if it makes sense to lose or to win the
+     * game (for e.g. it makes no sense for a tetris game but it does for a
+     * minesweeper game).
+     * False by default.
+     *
+     * Note: should be called at construction time.
+     */
+    void setShowStatistics(bool show);
+    
+    /** @obsolete */
+    // KDE4 remove this
+    void showStatistics(bool show) KDE_DEPRECATED;
+    
+    /**
+     * @since 3.3
+     * Set if draw games statistics should be shown (enable this if
+     * draws are possible in your game).
+     * False by default.
+     */
+    void setShowDrawGamesStatistic(bool show);
+
+    enum ScoreTypeBound { ScoreNotBound, ScoreBound };
+    /**
+     * Set the ranges for the score histogram.
+     *
+     * Note: should be called at construction time.
+     */
+    void setScoreHistogram(const TQMemArray<uint> &scores, ScoreTypeBound type);
+
+    /** 
+    * Enumerate different conditions under which to show the
+    * high score dialog.
+    */
+    enum ShowMode { AlwaysShow,          ///< Always show the dialog
+                    NeverShow,           ///< Never show the dialog
+                    ShowForHigherScore,  ///< Show if score has improved
+                    ShowForHighestScore  ///< Only for the top spot
+                  };
+    /**
+     * Set how the highscores dialog is shown at game end.
+     * By default, the mode is ShowForHigherScore.
+     *
+     * Note: should be called at construction time.
+     */
+    void setShowMode(ShowMode mode);
+
+    /**
+     * Score type (@see setScoreType).
+     * @p Normal default score (unsigned integer without upper bound)
+     * @p MinuteTime score by time bound at 3599 seconds (for e.g. kmines)
+     */
+    enum ScoreType { Normal, MinuteTime };
+    /**
+     * Set score type. Helper method to quickly set the type of score.
+     * By default the type is Normal.
+     *
+     * Note: should be called at construction time.
+     */
+    void setScoreType(ScoreType type);
+
+    /**
+     * Some predefined item types.
+     * @p ScoreDefault default item for the score in the highscores list.
+     * @p MeanScoreDefault default item for the mean score (only show one decimal and
+     * 0 is shown as "--".
+     * @p BestScoreDefault default item for the best score (0 is shown as "--").
+     * @p ElapsedTime optionnal item for elapsed time (maximum value is 3599 seconds).
+     */
+    enum ItemType { ScoreDefault, MeanScoreDefault, BestScoreDefault,
+                    ElapsedTime };
+    /**
+     * Create a predefined item.
+     */
+    static Item *createItem(ItemType type);
+
+    /**
+     * Replace the default score item in the highscores list by the given one.
+     * @p worstScore is the worst possible score. By default it is 0.
+     *
+     * Note : This method should be called at construction time.
+     */
+    void setScoreItem(uint worstScore, Item *item);
+
+    /**
+     * Add an item in the highscores list (it will add a column to this list).
+     *
+     * Note : This method should be called at construction time.
+     */
+    void addScoreItem(const TQString &name, Item *item);
+
+    enum PlayerItemType { MeanScore, BestScore };
+    /**
+     * Replace an item in the players list.
+     *
+     * Note : This method should be called at construction time.
+     */
+    void setPlayerItem(PlayerItemType type, Item *item);
+
+    /**
+     * @return true if the first score is strictly worse than the second one.
+     * By default return <pre>s1.score()<s2.score()</pre>. You can reimplement
+     * this method if additional items added to @ref Score can further
+     * differentiate the scores (for e.g. the time spent).
+     *
+     * Note that you do not need to use directly this method, simply write
+     * <pre>s1<s2</pre> since the operator calls this method.
+     */
+    virtual bool isStrictlyLess(const Score &s1, const Score &s2) const;
+
+    /**
+     * Possible type of label (@see gameTypeLabel).
+     * @p Standard label used in config file.
+     * @p I18N label used to display the game type.
+     * @p WW label used when contacting the world-wide highscores server.
+     * @p Icon label used to load the icon corresponding to the game type.
+     */
+    enum LabelType { Standard, I18N, WW, Icon };
+
+    /**
+     * @return the label corresponding to the game type. The default
+     * implementation works only for one game type : you need to reimplement
+     * this method if the number of game types is more than one.
+     */
+    virtual TQString gameTypeLabel(uint gameType, LabelType type) const;
+
+ protected:
+    /**
+     * This method is called once for each player (ie for each user). You
+     * can reimplement it to convert old style highscores to the new mechanism
+     * (@see submitLegacyScore). By default this method does nothing.
+     *
+     * @param gameType the game type
+     */
+    virtual void convertLegacy(uint gameType) { Q_UNUSED(gameType); }
+
+    /**
+     * This method should be called from @ref convertLegacy. It is used
+     * to submit an old highscore (it will not be send over the network).
+     * For each score do something like:
+     * \code
+     * Score score(Won);
+     * score.setScore(oldScore);
+     * score.setData("name", name);
+     * submitLegacyScore(score);
+     * \endcode
+     * Note that here you can set the player "name" and the highscore "date"
+     * if they are known.
+     */
+    void submitLegacyScore(const Score &score) const;
+
+    /**
+     * This method is called before submitting a score to the world-wide
+     * highscores server. You can reimplement this method to add an entry
+     * with @ref addToQueryURL. By default this method does nothing.
+     *
+     * @param url the URL to query
+     * @param score the score to be submitted.
+     */
+    virtual void additionalQueryItems(KURL &url, const Score &score) const
+        { Q_UNUSED(url); Q_UNUSED(score); }
+
+    /**
+     * Add an entry to the url to be submitted (@see additionalQueryItems).
+     *
+     * @param url the URL to query
+     * @param item the item name
+     * @param content the item content
+     */
+    static void addToQueryURL(KURL &url, const TQString &item,
+                              const TQString &content);
+
+    friend class ManagerPrivate;
+
+ private:
+    Manager(const Manager &);
+    Manager &operator =(const Manager &);
+};
+
+} // namespace
+
+#endif
diff --git a/libtdegames/highscore/kexthighscore_gui.cpp b/libtdegames/highscore/kexthighscore_gui.cpp
new file mode 100644
index 00000000..02ea99b6
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_gui.cpp
@@ -0,0 +1,552 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kexthighscore_gui.h"
+#include "kexthighscore_gui.moc"
+
+#include <tqlayout.h>
+#include <tqtextstream.h>
+#include <tqheader.h>
+#include <tqgrid.h>
+#include <tqvgroupbox.h>
+
+#include <kapplication.h>
+#include <kmessagebox.h>
+#include <kurllabel.h>
+#include <kopenwith.h>
+#include <krun.h>
+#include <kfiledialog.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+#include <kiconloader.h>
+
+#include "kexthighscore_internal.h"
+#include "kexthighscore.h"
+#include "kexthighscore_tab.h"
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+ShowItem::ShowItem(TQListView *list, bool highlight)
+    : KListViewItem(list), _highlight(highlight)
+{}
+
+void ShowItem::paintCell(TQPainter *p, const TQColorGroup &cg,
+                         int column, int width, int align)
+{
+    TQColorGroup cgrp(cg);
+    if (_highlight) cgrp.setColor(TQColorGroup::Text, red);
+    KListViewItem::paintCell(p, cgrp, column, width, align);
+}
+
+//-----------------------------------------------------------------------------
+ScoresList::ScoresList(TQWidget *parent)
+    : KListView(parent)
+{
+    setSelectionMode(TQListView::NoSelection);
+    setItemMargin(3);
+    setAllColumnsShowFocus(true);
+    setSorting(-1);
+    header()->setClickEnabled(false);
+    header()->setMovingEnabled(false);
+}
+
+void ScoresList::addHeader(const ItemArray &items)
+{
+    addLineItem(items, 0, 0);
+}
+
+TQListViewItem *ScoresList::addLine(const ItemArray &items,
+                                   uint index, bool highlight)
+{
+    TQListViewItem *item = new ShowItem(this, highlight);
+    addLineItem(items, index, item);
+    return item;
+}
+
+void ScoresList::addLineItem(const ItemArray &items,
+                             uint index, TQListViewItem *line)
+{
+    uint k = 0;
+    for (uint i=0; i<items.size(); i++) {
+        const ItemContainer &container = *items[i];
+        if ( !container.item()->isVisible() ) continue;
+        if (line) line->setText(k, itemText(container, index));
+        else {
+            addColumn( container.item()->label() );
+            setColumnAlignment(k, container.item()->tqalignment());
+        }
+        k++;
+    }
+}
+
+//-----------------------------------------------------------------------------
+HighscoresList::HighscoresList(TQWidget *parent)
+    : ScoresList(parent)
+{}
+
+TQString HighscoresList::itemText(const ItemContainer &item, uint row) const
+{
+    return item.pretty(row);
+}
+
+void HighscoresList::load(const ItemArray &items, int highlight)
+{
+    clear();
+    TQListViewItem *line = 0;
+    for (int j=items.nbEntries()-1; j>=0; j--) {
+        TQListViewItem *item = addLine(items, j, j==highlight);
+        if ( j==highlight ) line = item;
+    }
+    if (line) ensureItemVisible(line);
+}
+
+//-----------------------------------------------------------------------------
+HighscoresWidget::HighscoresWidget(TQWidget *parent)
+    : TQWidget(parent, "show_highscores_widget"),
+      _scoresUrl(0), _playersUrl(0), _statsTab(0), _histoTab(0)
+{
+    const ScoreInfos &s = internal->scoreInfos();
+    const PlayerInfos &p = internal->playerInfos();
+
+    TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialogBase::spacingHint());
+
+    _tw = new TQTabWidget(this);
+    connect(_tw, TQT_SIGNAL(currentChanged(TQWidget *)), TQT_SLOT(tabChanged()));
+    vbox->addWidget(_tw);
+
+    // scores tab
+    _scoresList = new HighscoresList(_tw);
+    _scoresList->addHeader(s);
+    _tw->addTab(_scoresList, i18n("Best &Scores"));
+
+    // players tab
+    _playersList = new HighscoresList(_tw);
+    _playersList->addHeader(p);
+    _tw->addTab(_playersList, i18n("&Players"));
+
+    // statistics tab
+    if ( internal->showStatistics ) {
+        _statsTab = new StatisticsTab(_tw);
+        _tw->addTab(_statsTab, i18n("Statistics"));
+    }
+
+    // histogram tab
+    if ( p.histogram().size()!=0 ) {
+        _histoTab = new HistogramTab(_tw);
+        _tw->addTab(_histoTab, i18n("Histogram"));
+    }
+
+    // url labels
+    if ( internal->isWWHSAvailable() ) {
+        KURL url = internal->queryURL(ManagerPrivate::Scores);
+        _scoresUrl = new KURLLabel(url.url(),
+                                   i18n("View world-wide highscores"), this);
+        connect(_scoresUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
+                TQT_SLOT(showURL(const TQString &)));
+        vbox->addWidget(_scoresUrl);
+
+        url = internal->queryURL(ManagerPrivate::Players);
+        _playersUrl = new KURLLabel(url.url(),
+                                    i18n("View world-wide players"), this);
+        connect(_playersUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
+                TQT_SLOT(showURL(const TQString &)));
+        vbox->addWidget(_playersUrl);
+    }
+}
+
+void HighscoresWidget::changeTab(int i)
+{
+    if ( i!=_tw->currentPageIndex() )
+        _tw->setCurrentPage(i);
+}
+
+void HighscoresWidget::showURL(const TQString &url) const
+{
+    (void)new KRun(KURL(url));
+}
+
+void HighscoresWidget::load(int rank)
+{
+    _scoresList->load(internal->scoreInfos(), rank);
+    _playersList->load(internal->playerInfos(), internal->playerInfos().id());
+    if (_scoresUrl)
+        _scoresUrl->setURL(internal->queryURL(ManagerPrivate::Scores).url());
+    if (_playersUrl)
+        _playersUrl->setURL(internal->queryURL(ManagerPrivate::Players).url());
+    if (_statsTab) _statsTab->load();
+    if (_histoTab) _histoTab->load();
+}
+
+//-----------------------------------------------------------------------------
+HighscoresDialog::HighscoresDialog(int rank, TQWidget *parent)
+    : KDialogBase(internal->nbGameTypes()>1 ? TreeList : Plain,
+                  i18n("Highscores"), Close|User1|User2, Close,
+                  parent, "show_highscores", true, true,
+                  KGuiItem(i18n("Configure..."), "configure"),
+                  KGuiItem(i18n("Export..."))), _rank(rank), _tab(0)
+{
+    _widgets.resize(internal->nbGameTypes(), 0);
+
+    if ( internal->nbGameTypes()>1 ) {
+        for (uint i=0; i<internal->nbGameTypes(); i++) {
+            TQString title = internal->manager.gameTypeLabel(i, Manager::I18N);
+            TQString icon = internal->manager.gameTypeLabel(i, Manager::Icon);
+            TQWidget *w = addVBoxPage(title, TQString(),
+                                     BarIcon(icon, KIcon::SizeLarge));
+            if ( i==internal->gameType() ) createPage(w);
+        }
+
+        connect(this, TQT_SIGNAL(aboutToShowPage(TQWidget *)),
+                TQT_SLOT(createPage(TQWidget *)));
+        showPage(internal->gameType());
+    } else {
+        TQVBoxLayout *vbox = new TQVBoxLayout(plainPage());
+        createPage(plainPage());
+        vbox->addWidget(_widgets[0]);
+        setMainWidget(_widgets[0]);
+    }
+}
+
+void HighscoresDialog::createPage(TQWidget *page)
+{
+    internal->hsConfig().readCurrentConfig();
+    _current = page;
+    bool several = ( internal->nbGameTypes()>1 );
+    int i = (several ? pageIndex(page) : 0);
+    if ( _widgets[i]==0 ) {
+        _widgets[i] = new HighscoresWidget(page);
+        connect(_widgets[i], TQT_SIGNAL(tabChanged(int)), TQT_SLOT(tabChanged(int)));
+    }
+    uint type = internal->gameType();
+    if (several) internal->setGameType(i);
+    _widgets[i]->load(uint(i)==type ? _rank : -1);
+    if (several) setGameType(type);
+    _widgets[i]->changeTab(_tab);
+}
+
+void HighscoresDialog::slotUser1()
+{
+    if ( KExtHighscore::configure(this) )
+        createPage(_current);
+}
+
+void HighscoresDialog::slotUser2()
+{
+    KURL url = KFileDialog::getSaveURL(TQString(), TQString(), this);
+    if ( url.isEmpty() ) return;
+    if ( KIO::NetAccess::exists(url, true, this) ) {
+        KGuiItem gi = KStdGuiItem::save();
+        gi.setText(i18n("Overwrite"));
+        int res = KMessageBox::warningContinueCancel(this,
+                                 i18n("The file already exists. Overwrite?"),
+                                 i18n("Export"), gi);
+        if ( res==KMessageBox::Cancel ) return;
+    }
+    KTempFile tmp;
+    internal->exportHighscores(*tmp.textStream());
+    tmp.close();
+    KIO::NetAccess::upload(tmp.name(), url, this);
+    tmp.unlink();
+}
+
+//-----------------------------------------------------------------------------
+LastMultipleScoresList::LastMultipleScoresList(
+                            const TQValueVector<Score> &scores, TQWidget *parent)
+    : ScoresList(parent), _scores(scores)
+{
+    const ScoreInfos &s = internal->scoreInfos();
+    addHeader(s);
+    for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
+}
+
+void LastMultipleScoresList::addLineItem(const ItemArray &si,
+                                         uint index, TQListViewItem *line)
+{
+    uint k = 1; // skip "id"
+    for (uint i=0; i<si.size()-2; i++) {
+        if ( i==3 ) k = 5; // skip "date"
+        const ItemContainer *container = si[k];
+        k++;
+        if (line) line->setText(i, itemText(*container, index));
+        else {
+            addColumn(  container->item()->label() );
+            setColumnAlignment(i, container->item()->tqalignment());
+        }
+    }
+}
+
+TQString LastMultipleScoresList::itemText(const ItemContainer &item,
+                                         uint row) const
+{
+    TQString name = item.name();
+    if ( name=="rank" )
+        return (_scores[row].type()==Won ? i18n("Winner") : TQString());
+    TQVariant v = _scores[row].data(name);
+    if ( name=="name" ) return v.toString();
+    return item.item()->pretty(row, v);
+}
+
+//-----------------------------------------------------------------------------
+TotalMultipleScoresList::TotalMultipleScoresList(
+                            const TQValueVector<Score> &scores, TQWidget *parent)
+    : ScoresList(parent), _scores(scores)
+{
+    const ScoreInfos &s = internal->scoreInfos();
+    addHeader(s);
+    for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
+}
+
+void TotalMultipleScoresList::addLineItem(const ItemArray &si,
+                                          uint index, TQListViewItem *line)
+{
+    const PlayerInfos &pi = internal->playerInfos();
+    uint k = 1; // skip "id"
+    for (uint i=0; i<4; i++) { // skip additional fields
+        const ItemContainer *container;
+        if ( i==2 ) container = pi.item("nb games");
+        else if ( i==3 ) container = pi.item("mean score");
+        else {
+            container = si[k];
+            k++;
+        }
+        if (line) line->setText(i, itemText(*container, index));
+        else {
+            TQString label =
+                (i==2 ? i18n("Won Games") : container->item()->label());
+            addColumn(label);
+            setColumnAlignment(i, container->item()->tqalignment());
+        }
+    }
+}
+
+TQString TotalMultipleScoresList::itemText(const ItemContainer &item,
+                                          uint row) const
+{
+    TQString name = item.name();
+    if ( name=="rank" ) return TQString::number(_scores.size()-row);
+    if ( name=="nb games" )
+        return TQString::number( _scores[row].data("nb won games").toUInt() );
+    TQVariant v = _scores[row].data(name);
+    if ( name=="name" ) return v.toString();
+    return item.item()->pretty(row, v);
+}
+
+
+//-----------------------------------------------------------------------------
+ConfigDialog::ConfigDialog(TQWidget *parent)
+    : KDialogBase(Swallow, i18n("Configure Highscores"),
+                  Ok|Apply|Cancel, Cancel,
+                  parent, "configure_highscores", true, true),
+      _saved(false), _WWHEnabled(0)
+{
+    TQWidget *page = 0;
+    TQTabWidget *tab = 0;
+    if ( internal->isWWHSAvailable() ) {
+        tab = new TQTabWidget(this);
+        setMainWidget(tab);
+        page = new TQWidget(tab);
+        tab->addTab(page, i18n("Main"));
+    } else {
+        page = new TQWidget(this);
+        setMainWidget(page);
+    }
+
+    TQGridLayout *pageTop =
+        new TQGridLayout(page, 2, 2, spacingHint(), spacingHint());
+
+    TQLabel *label = new TQLabel(i18n("Nickname:"), page);
+    pageTop->addWidget(label, 0, 0);
+    _nickname = new TQLineEdit(page);
+    connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
+            TQT_SLOT(modifiedSlot()));
+    connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
+            TQT_SLOT(nickNameChanged(const TQString &)));
+
+    _nickname->setMaxLength(16);
+    pageTop->addWidget(_nickname, 0, 1);
+
+    label = new TQLabel(i18n("Comment:"), page);
+    pageTop->addWidget(label, 1, 0);
+    _comment = new TQLineEdit(page);
+    connect(_comment, TQT_SIGNAL(textChanged(const TQString &)),
+            TQT_SLOT(modifiedSlot()));
+    _comment->setMaxLength(50);
+    pageTop->addWidget(_comment, 1, 1);
+
+    if (tab) {
+        _WWHEnabled
+            = new TQCheckBox(i18n("World-wide highscores enabled"), page);
+        connect(_WWHEnabled, TQT_SIGNAL(toggled(bool)),
+                TQT_SLOT(modifiedSlot()));
+        pageTop->addMultiCellWidget(_WWHEnabled, 2, 2, 0, 1);
+
+        // advanced tab
+        TQWidget *page = new TQWidget(tab);
+        tab->addTab(page, i18n("Advanced"));
+        TQVBoxLayout *pageTop =
+            new TQVBoxLayout(page, spacingHint(), spacingHint());
+
+        TQVGroupBox *group = new TQVGroupBox(i18n("Registration Data"), page);
+        pageTop->addWidget(group);
+        TQGrid *grid = new TQGrid(2, group);
+        grid->setSpacing(spacingHint());
+
+        label = new TQLabel(i18n("Nickname:"), grid);
+        _registeredName = new KLineEdit(grid);
+        _registeredName->setReadOnly(true);
+
+        label = new TQLabel(i18n("Key:"), grid);
+        _key = new KLineEdit(grid);
+        _key->setReadOnly(true);
+
+        KGuiItem gi = KStdGuiItem::clear();
+        gi.setText(i18n("Remove"));
+        _removeButton = new KPushButton(gi, grid);
+        connect(_removeButton, TQT_SIGNAL(clicked()), TQT_SLOT(removeSlot()));
+    }
+
+    load();
+    enableButtonOK( !_nickname->text().isEmpty() );
+    enableButtonApply(false);
+}
+
+void ConfigDialog::nickNameChanged(const TQString &text)
+{
+    enableButtonOK( !text.isEmpty() );
+}
+
+
+void ConfigDialog::modifiedSlot()
+{
+    enableButtonApply(true && !_nickname->text().isEmpty() );
+}
+
+void ConfigDialog::accept()
+{
+    if ( save() ) {
+        KDialogBase::accept();
+        kapp->config()->sync(); // safer
+    }
+}
+
+void ConfigDialog::removeSlot()
+{
+    KGuiItem gi = KStdGuiItem::clear();
+    gi.setText(i18n("Remove"));
+    int res = KMessageBox::warningContinueCancel(this,
+                               i18n("This will permanently remove your "
+                               "registration key. You will not be able to use "
+                               "the currently registered nickname anymore."),
+                               TQString(), gi);
+    if ( res==KMessageBox::Continue ) {
+        internal->playerInfos().removeKey();
+        _registeredName->clear();
+        _key->clear();
+        _removeButton->setEnabled(false);
+        _WWHEnabled->setChecked(false);
+        modifiedSlot();
+    }
+}
+
+void ConfigDialog::load()
+{
+    internal->hsConfig().readCurrentConfig();
+    const PlayerInfos &infos = internal->playerInfos();
+    _nickname->setText(infos.isAnonymous() ? TQString() : infos.name());
+    _comment->setText(infos.comment());
+    if (_WWHEnabled) {
+        _WWHEnabled->setChecked(infos.isWWEnabled());
+        if ( !infos.key().isEmpty() ) {
+            _registeredName->setText(infos.registeredName());
+            _registeredName->home(false);
+            _key->setText(infos.key());
+            _key->home(false);
+        }
+        _removeButton->setEnabled(!infos.key().isEmpty());
+    }
+}
+
+bool ConfigDialog::save()
+{
+    bool enabled = (_WWHEnabled ? _WWHEnabled->isChecked() : false);
+
+    // do not bother the user with "nickname empty" if he has not
+    // messed with nickname settings ...
+    TQString newName = _nickname->text();
+    if ( newName.isEmpty() && !internal->playerInfos().isAnonymous()
+         && !enabled ) return true;
+
+    if ( newName.isEmpty() ) {
+        KMessageBox::sorry(this, i18n("Please choose a non empty nickname."));
+        return false;
+    }
+    if ( internal->playerInfos().isNameUsed(newName) ) {
+        KMessageBox::sorry(this, i18n("Nickname already in use. Please "
+                                      "choose another one"));
+        return false;
+    }
+
+    int res =
+        internal->modifySettings(newName, _comment->text(), enabled, this);
+    if (res) {
+        load(); // needed to update view when "apply" is clicked
+        enableButtonApply(false);
+    }
+    _saved = true;
+    return res;
+}
+
+//-----------------------------------------------------------------------------
+AskNameDialog::AskNameDialog(TQWidget *parent)
+    : KDialogBase(Plain, i18n("Enter Your Nickname"), Ok | Cancel, Ok,
+                  parent, "ask_name_dialog")
+{
+    internal->hsConfig().readCurrentConfig();
+
+    TQVBoxLayout *top =
+        new TQVBoxLayout(plainPage(), marginHint(), spacingHint());
+    TQLabel *label =
+        new TQLabel(i18n("Congratulations, you have won!"), plainPage());
+    top->addWidget(label);
+
+    TQHBoxLayout *hbox = new TQHBoxLayout(top);
+    label = new TQLabel(i18n("Enter your nickname:"), plainPage());
+    hbox->addWidget(label);
+    _edit = new TQLineEdit(plainPage());
+    _edit->setFocus();
+    connect(_edit, TQT_SIGNAL(textChanged(const TQString &)), TQT_SLOT(nameChanged()));
+    hbox->addWidget(_edit);
+
+    top->addSpacing(spacingHint());
+    _checkbox = new TQCheckBox(i18n("Do not ask again."),  plainPage());
+    top->addWidget(_checkbox);
+
+    nameChanged();
+}
+
+void AskNameDialog::nameChanged()
+{
+    enableButtonOK( !name().isEmpty()
+                    && !internal->playerInfos().isNameUsed(name()) );
+}
+
+} // namespace
diff --git a/libtdegames/highscore/kexthighscore_gui.h b/libtdegames/highscore/kexthighscore_gui.h
new file mode 100644
index 00000000..f6b2336a
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_gui.h
@@ -0,0 +1,215 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXTHIGHSCORE_GUI_H
+#define KEXTHIGHSCORE_GUI_H
+
+#include <tqcheckbox.h>
+#include <tqlabel.h>
+#include <tqvbox.h>
+#include <tqtabwidget.h>
+
+#include <klistview.h>
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <kdialogbase.h>
+
+#include "kexthighscore.h"
+
+
+namespace KExtHighscore
+{
+
+class ItemContainer;
+class ItemArray;
+class Score;
+class AdditionalTab;
+
+//-----------------------------------------------------------------------------
+class ShowItem : public KListViewItem
+{
+ public:
+    ShowItem(TQListView *, bool highlight);
+
+ protected:
+    virtual void paintCell(TQPainter *, const TQColorGroup &, int column,
+						   int width, int align);
+
+ private:
+    bool _highlight;
+};
+
+class ScoresList : public KListView
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    ScoresList(TQWidget *parent);
+
+    void addHeader(const ItemArray &);
+
+ protected:
+    TQListViewItem *addLine(const ItemArray &, uint index, bool highlight);
+    virtual TQString itemText(const ItemContainer &, uint row) const = 0;
+
+ private:
+    virtual void addLineItem(const ItemArray &, uint index,
+                             TQListViewItem *item);
+};
+
+//-----------------------------------------------------------------------------
+class HighscoresList : public ScoresList
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    HighscoresList(TQWidget *parent);
+
+    void load(const ItemArray &, int highlight);
+
+ protected:
+    TQString itemText(const ItemContainer &, uint row) const;
+};
+
+class HighscoresWidget : public TQWidget
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    HighscoresWidget(TQWidget *parent);
+
+    void load(int rank);
+
+ signals:
+    void tabChanged(int i);
+
+ public slots:
+    void changeTab(int i);
+
+ private slots:
+    void showURL(const TQString &) const;
+    void tabChanged() { emit tabChanged(_tw->currentPageIndex()); }
+
+ private:
+    TQTabWidget     *_tw;
+    HighscoresList *_scoresList, *_playersList;
+    KURLLabel      *_scoresUrl, *_playersUrl;
+    AdditionalTab  *_statsTab, *_histoTab;
+};
+
+class HighscoresDialog : public KDialogBase
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    HighscoresDialog(int rank, TQWidget *parent);
+
+ private slots:
+    void slotUser1();
+    void slotUser2();
+    void tabChanged(int i) { _tab = i; }
+    void createPage(TQWidget *);
+
+ private:
+    int _rank, _tab;
+    TQWidget *_current;
+    TQValueVector<HighscoresWidget *> _widgets;
+};
+
+//-----------------------------------------------------------------------------
+class LastMultipleScoresList : public ScoresList
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    LastMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
+
+private:
+    void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
+    TQString itemText(const ItemContainer &, uint row) const;
+
+private:
+    const TQValueVector<Score> &_scores;
+};
+
+class TotalMultipleScoresList : public ScoresList
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    TotalMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
+
+private:
+    void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
+    TQString itemText(const ItemContainer &, uint row) const;
+
+private:
+    const TQValueVector<Score> &_scores;
+};
+
+//-----------------------------------------------------------------------------
+class ConfigDialog : public KDialogBase
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    ConfigDialog(TQWidget *parent);
+
+    bool hasBeenSaved() const { return _saved; }
+
+ private slots:
+    void modifiedSlot();
+    void removeSlot();
+    void accept();
+    void slotApply() { save(); }
+    void nickNameChanged(const TQString &);
+
+ private:
+    bool         _saved;
+    TQCheckBox   *_WWHEnabled;
+    TQLineEdit   *_nickname, *_comment;
+    KLineEdit   *_key, *_registeredName;
+    KPushButton *_removeButton;
+
+    void load();
+    bool save();
+};
+
+//-----------------------------------------------------------------------------
+class AskNameDialog : public KDialogBase
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    AskNameDialog(TQWidget *parent);
+
+    TQString name() const { return _edit->text(); }
+    bool dontAskAgain() const { return _checkbox->isChecked(); }
+
+ private slots:
+    void nameChanged();
+
+ private:
+    TQLineEdit *_edit;
+    TQCheckBox *_checkbox;
+};
+
+} // namespace
+
+#endif
diff --git a/libtdegames/highscore/kexthighscore_internal.cpp b/libtdegames/highscore/kexthighscore_internal.cpp
new file mode 100644
index 00000000..a679002c
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_internal.cpp
@@ -0,0 +1,868 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kexthighscore_internal.h"
+
+#include <pwd.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <tqfile.h>
+#include <tqlayout.h>
+#include <tqdom.h>
+
+#include <kglobal.h>
+#include <kio/netaccess.h>
+#include <kio/job.h>
+#include <kmessagebox.h>
+#include <kmdcodec.h>
+#include <kdebug.h>
+
+#include "config.h"
+#include "kexthighscore.h"
+#include "kexthighscore_gui.h"
+#include "kemailsettings.h"
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+const char ItemContainer::ANONYMOUS[] = "_";
+const char ItemContainer::ANONYMOUS_LABEL[] = I18N_NOOP("anonymous");
+
+ItemContainer::ItemContainer()
+    : _item(0)
+{}
+
+ItemContainer::~ItemContainer()
+{
+    delete _item;
+}
+
+void ItemContainer::setItem(Item *item)
+{
+    delete _item;
+    _item = item;
+}
+
+TQString ItemContainer::entryName() const
+{
+    if ( _subGroup.isEmpty() ) return _name;
+    return _name + "_" + _subGroup;
+}
+
+TQVariant ItemContainer::read(uint i) const
+{
+    Q_ASSERT(_item);
+
+    TQVariant v = _item->defaultValue();
+    if ( isStored() ) {
+        internal->hsConfig().setHighscoreGroup(_group);
+        v = internal->hsConfig().readPropertyEntry(i+1, entryName(), v);
+    }
+    return _item->read(i, v);
+}
+
+TQString ItemContainer::pretty(uint i) const
+{
+    Q_ASSERT(_item);
+    return _item->pretty(i, read(i));
+}
+
+void ItemContainer::write(uint i, const TQVariant &value) const
+{
+    Q_ASSERT( isStored() );
+    Q_ASSERT( internal->hsConfig().isLocked() );
+    internal->hsConfig().setHighscoreGroup(_group);
+    internal->hsConfig().writeEntry(i+1, entryName(), value);
+}
+
+uint ItemContainer::increment(uint i) const
+{
+    uint v = read(i).toUInt() + 1;
+    write(i, v);
+    return v;
+}
+
+//-----------------------------------------------------------------------------
+ItemArray::ItemArray()
+    : _group(""), _subGroup("") // no null groups
+{}
+
+ItemArray::~ItemArray()
+{
+    for (uint i=0; i<size(); i++) delete at(i);
+}
+
+int ItemArray::findIndex(const TQString &name) const
+{
+    for (uint i=0; i<size(); i++)
+        if ( at(i)->name()==name ) return i;
+    return -1;
+}
+
+const ItemContainer *ItemArray::item(const TQString &name) const
+{
+    int i = findIndex(name);
+    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
+                                << "\"" << endl;
+    return at(i);
+}
+
+ItemContainer *ItemArray::item(const TQString &name)
+{
+    int i = findIndex(name);
+    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
+                                << "\"" << endl;
+    return at(i);
+}
+
+void ItemArray::setItem(const TQString &name, Item *item)
+{
+    int i = findIndex(name);
+    if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
+                                << "\"" << endl;
+    bool stored = at(i)->isStored();
+    bool canHaveSubGroup = at(i)->canHaveSubGroup();
+    _setItem(i, name, item, stored, canHaveSubGroup);
+}
+
+void ItemArray::addItem(const TQString &name, Item *item,
+                        bool stored, bool canHaveSubGroup)
+{
+    if ( findIndex(name)!=-1 )
+        kdError(11002) << "item already exists \"" << name << "\"" << endl;
+    uint i = size();
+    resize(i+1);
+    at(i) = new ItemContainer;
+    _setItem(i, name, item, stored, canHaveSubGroup);
+}
+
+void ItemArray::_setItem(uint i, const TQString &name, Item *item,
+                         bool stored, bool canHaveSubGroup)
+{
+    at(i)->setItem(item);
+    at(i)->setName(name);
+    at(i)->setGroup(stored ? _group : TQString());
+    at(i)->setSubGroup(canHaveSubGroup ? _subGroup : TQString());
+}
+
+void ItemArray::setGroup(const TQString &group)
+{
+    Q_ASSERT( !group.isNull() );
+    _group = group;
+    for (uint i=0; i<size(); i++)
+        if ( at(i)->isStored() ) at(i)->setGroup(group);
+}
+
+void ItemArray::setSubGroup(const TQString &subGroup)
+{
+    Q_ASSERT( !subGroup.isNull() );
+    _subGroup = subGroup;
+    for (uint i=0; i<size(); i++)
+        if ( at(i)->canHaveSubGroup() ) at(i)->setSubGroup(subGroup);
+}
+
+void ItemArray::read(uint k, Score &data) const
+{
+    for (uint i=0; i<size(); i++) {
+        if ( !at(i)->isStored() ) continue;
+        data.setData(at(i)->name(), at(i)->read(k));
+    }
+}
+
+void ItemArray::write(uint k, const Score &data, uint nb) const
+{
+    for (uint i=0; i<size(); i++) {
+        if ( !at(i)->isStored() ) continue;
+        for (uint j=nb-1; j>k; j--)  at(i)->write(j, at(i)->read(j-1));
+        at(i)->write(k, data.data(at(i)->name()));
+    }
+}
+
+void ItemArray::exportToText(TQTextStream &s) const
+{
+    for (uint k=0; k<nbEntries()+1; k++) {
+        for (uint i=0; i<size(); i++) {
+            const Item *item = at(i)->item();
+            if ( item->isVisible() ) {
+                if ( i!=0 ) s << '\t';
+                if ( k==0 ) s << item->label();
+                else s << at(i)->pretty(k-1);
+            }
+        }
+        s << endl;
+    }
+}
+
+//-----------------------------------------------------------------------------
+class ScoreNameItem : public NameItem
+{
+ public:
+    ScoreNameItem(const ScoreInfos &score, const PlayerInfos &infos)
+        : _score(score), _infos(infos) {}
+
+    TQString pretty(uint i, const TQVariant &v) const {
+        uint id = _score.item("id")->read(i).toUInt();
+        if ( id==0 ) return NameItem::pretty(i, v);
+        return _infos.prettyName(id-1);
+    }
+
+ private:
+    const ScoreInfos  &_score;
+    const PlayerInfos &_infos;
+};
+
+//-----------------------------------------------------------------------------
+ScoreInfos::ScoreInfos(uint maxNbEntries, const PlayerInfos &infos)
+    : _maxNbEntries(maxNbEntries)
+{
+    addItem("id", new Item((uint)0));
+    addItem("rank", new RankItem, false);
+    addItem("name", new ScoreNameItem(*this, infos));
+    addItem("score", Manager::createItem(Manager::ScoreDefault));
+    addItem("date", new DateItem);
+}
+
+uint ScoreInfos::nbEntries() const
+{
+    uint i = 0;
+    for (; i<_maxNbEntries; i++)
+        if ( item("score")->read(i)==item("score")->item()->defaultValue() )
+            break;
+    return i;
+}
+
+//-----------------------------------------------------------------------------
+const char *HS_ID              = "player id";
+const char *HS_REGISTERED_NAME = "registered name";
+const char *HS_KEY             = "player key";
+const char *HS_WW_ENABLED      = "ww hs enabled";
+
+PlayerInfos::PlayerInfos()
+{
+    setGroup("players");
+
+    // standard items
+    addItem("name", new NameItem);
+    Item *it = new Item((uint)0, i18n("Games Count"),TQt::AlignRight);
+    addItem("nb games", it, true, true);
+    it = Manager::createItem(Manager::MeanScoreDefault);
+    addItem("mean score", it, true, true);
+    it = Manager::createItem(Manager::BestScoreDefault);
+    addItem("best score", it, true, true);
+    addItem("date", new DateItem, true, true);
+    it = new Item(TQString(), i18n("Comment"), TQt::AlignLeft);
+    addItem("comment", it);
+
+    // statistics items
+    addItem("nb black marks", new Item((uint)0), true, true); // legacy
+    addItem("nb lost games", new Item((uint)0), true, true);
+    addItem("nb draw games", new Item((uint)0), true, true);
+    addItem("current trend", new Item((int)0), true, true);
+    addItem("max lost trend", new Item((uint)0), true, true);
+    addItem("max won trend", new Item((uint)0), true, true);
+
+    struct passwd *pwd = getpwuid(getuid());
+    TQString username = pwd->pw_name;
+#ifdef HIGHSCORE_DIRECTORY
+    internal->hsConfig().setHighscoreGroup("players");
+    for (uint i=0; ;i++) {
+        if ( !internal->hsConfig().hasEntry(i+1, "username") ) {
+            _newPlayer = true;
+            _id = i;
+            break;
+        }
+        if ( internal->hsConfig().readEntry(i+1, "username")==username ) {
+            _newPlayer = false;
+            _id = i;
+            return;
+        }
+    }
+#endif
+    internal->hsConfig().lockForWriting();
+	KEMailSettings emailConfig;
+	emailConfig.setProfile(emailConfig.defaultProfileName());
+	TQString name = emailConfig.getSetting(KEMailSettings::RealName);
+	if ( name.isEmpty() || isNameUsed(name) ) name = username;
+	if ( isNameUsed(name) ) name= TQString(ItemContainer::ANONYMOUS);
+#ifdef HIGHSCORE_DIRECTORY
+    internal->hsConfig().writeEntry(_id+1, "username", username);
+    item("name")->write(_id, name);
+#endif
+
+    ConfigGroup cg;
+    _oldLocalPlayer = cg.config()->hasKey(HS_ID);
+    _oldLocalId = cg.config()->readUnsignedNumEntry(HS_ID);
+#ifdef HIGHSCORE_DIRECTORY
+    if (_oldLocalPlayer) { // player already exists in local config file
+        // copy player data
+        TQString prefix = TQString("%1_").tqarg(_oldLocalId+1);
+        TQMap<TQString, TQString> entries =
+            cg.config()->entryMap("KHighscore_players");
+        TQMap<TQString, TQString>::const_iterator it;
+        for (it=entries.begin(); it!=entries.end(); ++it) {
+            TQString key = it.key();
+            if ( key.find(prefix)==0 ) {
+                TQString name = key.right(key.length()-prefix.length());
+                if ( name!="name" || !isNameUsed(it.data()) )
+                    internal->hsConfig().writeEntry(_id+1, name, it.data());
+            }
+        }
+    }
+#else
+    _newPlayer = !_oldLocalPlayer;
+    if (_oldLocalPlayer) _id = _oldLocalId;
+    else {
+        _id = nbEntries();
+        cg.config()->writeEntry(HS_ID, _id);
+        item("name")->write(_id, name);
+    }
+#endif
+    _bound = true;
+    internal->hsConfig().writeAndUnlock();
+}
+
+void PlayerInfos::createHistoItems(const TQMemArray<uint> &scores, bool bound)
+{
+    Q_ASSERT( _histogram.size()==0 );
+    _bound = bound;
+    _histogram = scores;
+    for (uint i=1; i<histoSize(); i++)
+        addItem(histoName(i), new Item((uint)0), true, true);
+}
+
+bool PlayerInfos::isAnonymous() const
+{
+    return ( name()==ItemContainer::ANONYMOUS );
+}
+
+uint PlayerInfos::nbEntries() const
+{
+    internal->hsConfig().setHighscoreGroup("players");
+    TQStringList list = internal->hsConfig().readList("name", -1);
+    return list.count();
+}
+
+TQString PlayerInfos::key() const
+{
+    ConfigGroup cg;
+    return cg.config()->readEntry(HS_KEY, TQString());
+}
+
+bool PlayerInfos::isWWEnabled() const
+{
+    ConfigGroup cg;
+    return cg.config()->readBoolEntry(HS_WW_ENABLED, false);
+}
+
+TQString PlayerInfos::histoName(uint i) const
+{
+    const TQMemArray<uint> &sh = _histogram;
+    Q_ASSERT( i<sh.size() || (_bound || i==sh.size()) );
+    if ( i==sh.size() )
+        return TQString("nb scores greater than %1").tqarg(sh[sh.size()-1]);
+    return TQString("nb scores less than %1").tqarg(sh[i]);
+}
+
+uint PlayerInfos::histoSize() const
+{
+     return _histogram.size() + (_bound ? 0 : 1);
+}
+
+void PlayerInfos::submitScore(const Score &score) const
+{
+    // update counts
+    uint nbGames = item("nb games")->increment(_id);
+    switch (score.type()) {
+    case Lost:
+        item("nb lost games")->increment(_id);
+        break;
+    case Won: break;
+    case Draw:
+        item("nb draw games")->increment(_id);
+        break;
+    };
+
+    // update mean
+    if ( score.type()==Won ) {
+        uint nbWonGames = nbGames - item("nb lost games")->read(_id).toUInt()
+                        - item("nb draw games")->read(_id).toUInt()
+                        - item("nb black marks")->read(_id).toUInt(); // legacy
+        double mean = (nbWonGames==1 ? 0.0
+                       : item("mean score")->read(_id).toDouble());
+        mean += (double(score.score()) - mean) / nbWonGames;
+        item("mean score")->write(_id, mean);
+    }
+
+    // update best score
+    Score best = score; // copy optionnal fields (there are not taken into account here)
+    best.setScore( item("best score")->read(_id).toUInt() );
+    if ( best<score ) {
+        item("best score")->write(_id, score.score());
+        item("date")->write(_id, score.data("date").toDateTime());
+    }
+
+    // update trends
+    int current = item("current trend")->read(_id).toInt();
+    switch (score.type()) {
+    case Won: {
+        if ( current<0 ) current = 0;
+        current++;
+        uint won = item("max won trend")->read(_id).toUInt();
+        if ( (uint)current>won ) item("max won trend")->write(_id, current);
+        break;
+    }
+    case Lost: {
+        if ( current>0 ) current = 0;
+        current--;
+        uint lost = item("max lost trend")->read(_id).toUInt();
+        uint clost = -current;
+        if ( clost>lost ) item("max lost trend")->write(_id, clost);
+        break;
+    }
+    case Draw:
+        current = 0;
+        break;
+    }
+    item("current trend")->write(_id, current);
+
+    // update histogram
+    if ( score.type()==Won ) {
+        const TQMemArray<uint> &sh = _histogram;
+        for (uint i=1; i<histoSize(); i++)
+            if ( i==sh.size() || score.score()<sh[i] ) {
+                item(histoName(i))->increment(_id);
+                break;
+            }
+    }
+}
+
+bool PlayerInfos::isNameUsed(const TQString &newName) const
+{
+    if ( newName==name() ) return false; // own name...
+    for (uint i=0; i<nbEntries(); i++)
+        if ( newName.lower()==item("name")->read(i).toString().lower() ) return true;
+    if ( newName==i18n(ItemContainer::ANONYMOUS_LABEL) ) return true;
+    return false;
+}
+
+void PlayerInfos::modifyName(const TQString &newName) const
+{
+    item("name")->write(_id, newName);
+}
+
+void PlayerInfos::modifySettings(const TQString &newName,
+                                 const TQString &comment, bool WWEnabled,
+                                 const TQString &newKey) const
+{
+    modifyName(newName);
+    item("comment")->write(_id, comment);
+    ConfigGroup cg;
+    cg.config()->writeEntry(HS_WW_ENABLED, WWEnabled);
+    if ( !newKey.isEmpty() ) cg.config()->writeEntry(HS_KEY, newKey);
+    if (WWEnabled) cg.config()->writeEntry(HS_REGISTERED_NAME, newName);
+}
+
+TQString PlayerInfos::registeredName() const
+{
+    ConfigGroup cg;
+    return cg.config()->readEntry(HS_REGISTERED_NAME, TQString());
+}
+
+void PlayerInfos::removeKey()
+{
+    ConfigGroup cg;
+
+    // save old key/nickname
+    uint i = 0;
+    TQString str = "%1 old #%2";
+    TQString sk;
+    do {
+        i++;
+        sk = str.tqarg(HS_KEY).tqarg(i);
+    } while ( !cg.config()->readEntry(sk, TQString()).isEmpty() );
+    cg.config()->writeEntry(sk, key());
+    cg.config()->writeEntry(str.tqarg(HS_REGISTERED_NAME).tqarg(i),
+                            registeredName());
+
+    // clear current key/nickname
+    cg.config()->deleteEntry(HS_KEY);
+    cg.config()->deleteEntry(HS_REGISTERED_NAME);
+    cg.config()->writeEntry(HS_WW_ENABLED, false);
+}
+
+//-----------------------------------------------------------------------------
+ManagerPrivate::ManagerPrivate(uint nbGameTypes, Manager &m)
+    : manager(m), showStatistics(false), showDrawGames(false),
+      trackLostGames(false), trackDrawGames(false), 
+      showMode(Manager::ShowForHigherScore),
+      _first(true), _nbGameTypes(nbGameTypes), _gameType(0)
+{}
+
+void ManagerPrivate::init(uint maxNbEntries)
+{
+    _hsConfig = new KHighscore(false, 0);
+    _playerInfos = new PlayerInfos;
+    _scoreInfos = new ScoreInfos(maxNbEntries, *_playerInfos);
+}
+
+ManagerPrivate::~ManagerPrivate()
+{
+    delete _scoreInfos;
+    delete _playerInfos;
+    delete _hsConfig;
+}
+
+KURL ManagerPrivate::queryURL(QueryType type, const TQString &newName) const
+{
+    KURL url = serverURL;
+    TQString nameItem = "nickname";
+    TQString name = _playerInfos->registeredName();
+    bool withVersion = true;
+    bool key = false;
+    bool level = false;
+
+	switch (type) {
+        case Submit:
+            url.addPath("submit.php");
+            level = true;
+            key = true;
+            break;
+        case Register:
+            url.addPath("register.php");
+            name = newName;
+            break;
+        case Change:
+            url.addPath("change.php");
+            key = true;
+            if ( newName!=name )
+                Manager::addToQueryURL(url, "new_nickname", newName);
+            break;
+        case Players:
+            url.addPath("players.php");
+            nameItem = "highlight";
+            withVersion = false;
+            break;
+        case Scores:
+            url.addPath("highscores.php");
+            withVersion = false;
+            if ( _nbGameTypes>1 ) level = true;
+            break;
+	}
+
+    if (withVersion) Manager::addToQueryURL(url, "version", version);
+    if ( !name.isEmpty() ) Manager::addToQueryURL(url, nameItem, name);
+    if (key) Manager::addToQueryURL(url, "key", _playerInfos->key());
+    if (level) {
+        TQString label = manager.gameTypeLabel(_gameType, Manager::WW);
+        if ( !label.isEmpty() ) Manager::addToQueryURL(url, "level", label);
+    }
+
+    return url;
+}
+
+// strings that needs to be translated (coming from the highscores server)
+const char *DUMMY_STRINGS[] = {
+    I18N_NOOP("Undefined error."),
+    I18N_NOOP("Missing argument(s)."),
+    I18N_NOOP("Invalid argument(s)."),
+
+    I18N_NOOP("Unable to connect to MySQL server."),
+    I18N_NOOP("Unable to select database."),
+    I18N_NOOP("Error on database query."),
+    I18N_NOOP("Error on database insert."),
+
+    I18N_NOOP("Nickname already registered."),
+    I18N_NOOP("Nickname not registered."),
+    I18N_NOOP("Invalid key."),
+    I18N_NOOP("Invalid submit key."),
+
+    I18N_NOOP("Invalid level."),
+    I18N_NOOP("Invalid score.")
+};
+
+const char *UNABLE_TO_CONTACT =
+    I18N_NOOP("Unable to contact world-wide highscore server");
+
+bool ManagerPrivate::doQuery(const KURL &url, TQWidget *parent,
+                                TQDomNamedNodeMap *map)
+{
+    KIO::http_update_cache(url, true, 0); // remove cache !
+
+    TQString tmpFile;
+    if ( !KIO::NetAccess::download(url, tmpFile, parent) ) {
+        TQString details = i18n("Server URL: %1").tqarg(url.host());
+        KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
+        return false;
+    }
+
+	TQFile file(tmpFile);
+	if ( !file.open(IO_ReadOnly) ) {
+        KIO::NetAccess::removeTempFile(tmpFile);
+        TQString details = i18n("Unable to open temporary file.");
+        KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
+        return false;
+    }
+
+	TQTextStream t(&file);
+	TQString content = t.read().stripWhiteSpace();
+	file.close();
+    KIO::NetAccess::removeTempFile(tmpFile);
+
+	TQDomDocument doc;
+    if ( doc.setContent(content) ) {
+        TQDomElement root = doc.documentElement();
+        TQDomElement element = root.firstChild().toElement();
+        if ( element.tagName()=="success" ) {
+            if (map) *map = element.attributes();
+            return true;
+        }
+        if ( element.tagName()=="error" ) {
+            TQDomAttr attr = element.attributes().namedItem("label").toAttr();
+            if ( !attr.isNull() ) {
+                TQString msg = i18n(attr.value().latin1());
+                TQString caption = i18n("Message from world-wide highscores "
+                                       "server");
+                KMessageBox::sorry(parent, msg, caption);
+                return false;
+            }
+        }
+    }
+    TQString msg = i18n("Invalid answer from world-wide highscores server.");
+    TQString details = i18n("Raw message: %1").tqarg(content);
+    KMessageBox::detailedSorry(parent, msg, details);
+    return false;
+}
+
+bool ManagerPrivate::getFromQuery(const TQDomNamedNodeMap &map,
+                                  const TQString &name, TQString &value,
+                                  TQWidget *parent)
+{
+    TQDomAttr attr = map.namedItem(name).toAttr();
+    if ( attr.isNull() ) {
+	    KMessageBox::sorry(parent,
+               i18n("Invalid answer from world-wide "
+                    "highscores server (missing item: %1).").tqarg(name));
+		return false;
+    }
+    value = attr.value();
+    return true;
+}
+
+Score ManagerPrivate::readScore(uint i) const
+{
+    Score score(Won);
+    _scoreInfos->read(i, score);
+    return score;
+}
+
+int ManagerPrivate::rank(const Score &score) const
+{
+    uint nb = _scoreInfos->nbEntries();
+    uint i = 0;
+	for (; i<nb; i++)
+        if ( readScore(i)<score ) break;
+	return (i<_scoreInfos->maxNbEntries() ? (int)i : -1);
+}
+
+bool ManagerPrivate::modifySettings(const TQString &newName,
+                                    const TQString &comment, bool WWEnabled,
+                                    TQWidget *widget)
+{
+    TQString newKey;
+    bool newPlayer = false;
+
+    if (WWEnabled) {
+        newPlayer = _playerInfos->key().isEmpty()
+                    || _playerInfos->registeredName().isEmpty();
+        KURL url = queryURL((newPlayer ? Register : Change), newName);
+        Manager::addToQueryURL(url, "comment", comment);
+
+        TQDomNamedNodeMap map;
+        bool ok = doQuery(url, widget, &map);
+        if ( !ok || (newPlayer && !getFromQuery(map, "key", newKey, widget)) )
+            return false;
+    }
+
+    bool ok = _hsConfig->lockForWriting(widget); // no GUI when locking
+    if (ok) {
+        // check again name in case the config file has been changed...
+        // if it has, it is unfortunate because the WWW name is already
+        // committed but should be very rare and not really problematic
+        ok = ( !_playerInfos->isNameUsed(newName) );
+        if (ok)
+            _playerInfos->modifySettings(newName, comment, WWEnabled, newKey);
+        _hsConfig->writeAndUnlock();
+    }
+    return ok;
+}
+
+void ManagerPrivate::convertToGlobal()
+{
+    // read old highscores
+    KHighscore *tmp = _hsConfig;
+    _hsConfig = new KHighscore(true, 0);
+    TQValueVector<Score> scores(_scoreInfos->nbEntries());
+    for (uint i=0; i<scores.count(); i++)
+        scores[i] = readScore(i);
+
+    // commit them
+    delete _hsConfig;
+    _hsConfig = tmp;
+    _hsConfig->lockForWriting();
+    for (uint i=0; i<scores.count(); i++)
+        if ( scores[i].data("id").toUInt()==_playerInfos->oldLocalId()+1 )
+            submitLocal(scores[i]);
+    _hsConfig->writeAndUnlock();
+}
+
+void ManagerPrivate::setGameType(uint type)
+{
+    if (_first) {
+        _first = false;
+        if ( _playerInfos->isNewPlayer() ) {
+            // convert legacy highscores
+            for (uint i=0; i<_nbGameTypes; i++) {
+                setGameType(i);
+                manager.convertLegacy(i);
+            }
+
+#ifdef HIGHSCORE_DIRECTORY
+            if ( _playerInfos->isOldLocalPlayer() ) {
+                // convert local to global highscores
+                for (uint i=0; i<_nbGameTypes; i++) {
+                    setGameType(i);
+                    convertToGlobal();
+                }
+            }
+#endif
+        }
+    }
+
+    Q_ASSERT( type<_nbGameTypes );
+    _gameType = kMin(type, _nbGameTypes-1);
+    TQString str = "scores";
+    TQString lab = manager.gameTypeLabel(_gameType, Manager::Standard);
+    if ( !lab.isEmpty() ) {
+        _playerInfos->setSubGroup(lab);
+        str += "_" + lab;
+    }
+    _scoreInfos->setGroup(str);
+}
+
+void ManagerPrivate::checkFirst()
+{
+    if (_first) setGameType(0);
+}
+
+int ManagerPrivate::submitScore(const Score &ascore,
+                                TQWidget *widget, bool askIfAnonymous)
+{
+    checkFirst();
+
+    Score score = ascore;
+    score.setData("id", _playerInfos->id() + 1);
+    score.setData("date", TQDateTime::tqcurrentDateTime());
+
+    // ask new name if anonymous and winner
+    const char *dontAskAgainName = "highscore_ask_name_dialog";
+    TQString newName;
+    KMessageBox::ButtonCode dummy;
+    if ( score.type()==Won && askIfAnonymous && _playerInfos->isAnonymous()
+     && KMessageBox::shouldBeShownYesNo(dontAskAgainName, dummy) ) {
+         AskNameDialog d(widget);
+         if ( d.exec()==TQDialog::Accepted ) newName = d.name();
+         if ( d.dontAskAgain() )
+             KMessageBox::saveDontShowAgainYesNo(dontAskAgainName,
+                                                 KMessageBox::No);
+    }
+
+    int rank = -1;
+    if ( _hsConfig->lockForWriting(widget) ) { // no GUI when locking
+        // check again new name in case the config file has been changed...
+        if ( !newName.isEmpty() && !_playerInfos->isNameUsed(newName) )
+             _playerInfos->modifyName(newName);
+
+        // commit locally
+        _playerInfos->submitScore(score);
+        if ( score.type()==Won ) rank = submitLocal(score);
+        _hsConfig->writeAndUnlock();
+    }
+
+    if ( _playerInfos->isWWEnabled() )
+        submitWorldWide(score, widget);
+
+    return rank;
+}
+
+int ManagerPrivate::submitLocal(const Score &score)
+{
+    int r = rank(score);
+    if ( r!=-1 ) {
+        uint nb = _scoreInfos->nbEntries();
+        if ( nb<_scoreInfos->maxNbEntries() ) nb++;
+        _scoreInfos->write(r, score, nb);
+    }
+    return r;
+}
+
+bool ManagerPrivate::submitWorldWide(const Score &score,
+                                     TQWidget *widget) const
+{
+    if ( score.type()==Lost && !trackLostGames ) return true;
+    if ( score.type()==Draw && !trackDrawGames ) return true;
+
+    KURL url = queryURL(Submit);
+    manager.additionalQueryItems(url, score);
+    int s = (score.type()==Won ? score.score() : (int)score.type());
+    TQString str =  TQString::number(s);
+    Manager::addToQueryURL(url, "score", str);
+    KMD5 context(TQString(_playerInfos->registeredName() + str).latin1());
+    Manager::addToQueryURL(url, "check", context.hexDigest());
+
+    return doQuery(url, widget);
+}
+
+void ManagerPrivate::exportHighscores(TQTextStream &s)
+{
+    uint tmp = _gameType;
+
+    for (uint i=0; i<_nbGameTypes; i++) {
+        setGameType(i);
+        if ( _nbGameTypes>1 ) {
+            if ( i!=0 ) s << endl;
+            s << "--------------------------------" << endl;
+            s << "Game type: "
+              << manager.gameTypeLabel(_gameType, Manager::I18N)
+              << endl;
+            s << endl;
+        }
+        s << "Players list:" << endl;
+        _playerInfos->exportToText(s);
+        s << endl;
+        s << "Highscores list:" << endl;
+        _scoreInfos->exportToText(s);
+    }
+
+    setGameType(tmp);
+}
+
+} // namespace
diff --git a/libtdegames/highscore/kexthighscore_internal.h b/libtdegames/highscore/kexthighscore_internal.h
new file mode 100644
index 00000000..0bd4f9ef
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_internal.h
@@ -0,0 +1,277 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXTHIGHSCORE_INTERNAL_H
+#define KEXTHIGHSCORE_INTERNAL_H
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kurl.h>
+
+#include "khighscore.h"
+#include "kexthighscore.h"
+
+class TQTextStream;
+class TQTabWidget;
+class TQDomNamedNodeMap;
+
+
+namespace KExtHighscore
+{
+
+class PlayerInfos;
+class Score;
+class Manager;
+
+
+//-----------------------------------------------------------------------------
+class RankItem : public Item
+{
+ public:
+    RankItem()
+        : Item((uint)0, i18n("Rank"), TQt::AlignRight) {}
+
+    TQVariant read(uint rank, const TQVariant &) const  { return rank; }
+    TQString pretty(uint rank, const TQVariant &) const
+        { return TQString::number(rank+1); }
+};
+
+class NameItem : public Item
+{
+ public:
+    NameItem()
+        : Item(TQString(), i18n("Name"), TQt::AlignLeft) {
+            setPrettySpecial(Anonymous);
+    }
+};
+
+class DateItem : public Item
+{
+ public:
+    DateItem()
+        : Item(TQDateTime(), i18n("Date"), TQt::AlignRight) {
+            setPrettyFormat(DateTime);
+    }
+};
+
+class SuccessPercentageItem : public Item
+{
+ public:
+    SuccessPercentageItem()
+        : Item((double)-1, i18n("Success"), TQt::AlignRight) {
+            setPrettyFormat(Percentage);
+            setPrettySpecial(NegativeNotDefined);
+    }
+};
+
+//-----------------------------------------------------------------------------
+class ItemContainer
+{
+ public:
+    ItemContainer();
+    ~ItemContainer();
+
+    void setItem(Item *item);
+    const Item *item() const { return _item; }
+    Item *item() { return _item; }
+
+    void setName(const TQString &name) { _name = name; }
+    TQString name() const { return _name; }
+
+    void setGroup(const TQString &group) { _group = group; }
+    bool isStored() const { return !_group.isNull(); }
+
+    void setSubGroup(const TQString &subGroup) { _subGroup = subGroup; }
+    bool canHaveSubGroup() const { return !_subGroup.isNull(); }
+
+    static const char ANONYMOUS[]; // name assigned to anonymous players
+    static const char ANONYMOUS_LABEL[];
+
+    TQVariant read(uint i) const;
+    TQString pretty(uint i) const;
+    void write(uint i, const TQVariant &value) const;
+    // for UInt TQVariant (return new value)
+    uint increment(uint i) const;
+
+ private:
+    Item    *_item;
+    TQString  _name, _group, _subGroup;
+
+    TQString entryName() const;
+
+    ItemContainer(const ItemContainer &);
+    ItemContainer &operator =(const ItemContainer &);
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * Manage a bunch of @ref Item which are saved under the same group
+ * in KHighscores config file.
+ */
+class ItemArray : public TQMemArray<ItemContainer *>
+{
+ public:
+    ItemArray();
+    virtual ~ItemArray();
+
+    virtual uint nbEntries() const = 0;
+
+    const ItemContainer *item(const TQString &name) const;
+    ItemContainer *item(const TQString &name);
+
+    void addItem(const TQString &name, Item *, bool stored = true,
+                 bool canHaveSubGroup = false);
+    void setItem(const TQString &name, Item *);
+    int findIndex(const TQString &name) const;
+
+    void setGroup(const TQString &group);
+    void setSubGroup(const TQString &subGroup);
+
+    void read(uint k, Score &data) const;
+    void write(uint k, const Score &data, uint maxNbLines) const;
+
+    void exportToText(TQTextStream &) const;
+
+ private:
+    TQString _group, _subGroup;
+
+    void _setItem(uint i, const TQString &name, Item *, bool stored,
+                  bool canHaveSubGroup);
+
+    ItemArray(const ItemArray &);
+    ItemArray &operator =(const ItemArray &);
+};
+
+//-----------------------------------------------------------------------------
+class ScoreInfos : public ItemArray
+{
+ public:
+    ScoreInfos(uint maxNbEntries, const PlayerInfos &infos);
+
+    uint nbEntries() const;
+    uint maxNbEntries() const { return _maxNbEntries; }
+
+ private:
+    uint _maxNbEntries;
+};
+
+//-----------------------------------------------------------------------------
+class ConfigGroup : public KConfigGroupSaver
+{
+ public:
+    ConfigGroup(const TQString &group = TQString())
+        : KConfigGroupSaver(kapp->config(), group) {}
+};
+
+//-----------------------------------------------------------------------------
+class PlayerInfos : public ItemArray
+{
+ public:
+    PlayerInfos();
+
+    bool isNewPlayer() const { return _newPlayer; }
+    bool isOldLocalPlayer() const { return _oldLocalPlayer; }
+    uint nbEntries() const;
+    TQString name() const { return item("name")->read(_id).toString(); }
+    bool isAnonymous() const;
+    TQString prettyName() const { return prettyName(_id); }
+    TQString prettyName(uint id) const { return item("name")->pretty(id); }
+    TQString registeredName() const;
+    TQString comment() const { return item("comment")->pretty(_id); }
+    bool isWWEnabled() const;
+    TQString key() const;
+    uint id() const { return _id; }
+    uint oldLocalId() const { return _oldLocalId; }
+
+    void createHistoItems(const TQMemArray<uint> &scores, bool bound);
+    TQString histoName(uint i) const;
+    uint histoSize() const;
+    const TQMemArray<uint> &histogram() const { return _histogram; }
+
+    void submitScore(const Score &) const;
+    // return true if the nickname is already used locally
+    bool isNameUsed(const TQString &name) const;
+    void modifyName(const TQString &newName) const;
+    void modifySettings(const TQString &newName, const TQString &comment,
+                        bool WWEnabled, const TQString &newKey) const;
+    void removeKey();
+
+ private:
+    bool _newPlayer, _bound, _oldLocalPlayer;
+    uint _id, _oldLocalId;
+    TQMemArray<uint> _histogram;
+};
+
+//-----------------------------------------------------------------------------
+class ManagerPrivate
+{
+ public:
+    ManagerPrivate(uint nbGameTypes, Manager &manager);
+    void init(uint maxNbentries);
+    ~ManagerPrivate();
+
+    bool modifySettings(const TQString &newName, const TQString &comment,
+                        bool WWEnabled, TQWidget *widget);
+
+    void setGameType(uint type);
+    void checkFirst();
+    int submitLocal(const Score &score);
+    int submitScore(const Score &score, TQWidget *widget, bool askIfAnonymous);
+    Score readScore(uint i) const;
+
+    uint gameType() const        { return _gameType; }
+    uint nbGameTypes() const     { return _nbGameTypes; }
+    bool isWWHSAvailable() const { return !serverURL.isEmpty(); }
+    ScoreInfos &scoreInfos()     { return *_scoreInfos; }
+    PlayerInfos &playerInfos()   { return *_playerInfos; }
+    KHighscore &hsConfig()       { return *_hsConfig; }
+    enum QueryType { Submit, Register, Change, Players, Scores };
+    KURL queryURL(QueryType type, const TQString &newName=TQString()) const;
+
+    void exportHighscores(TQTextStream &);
+
+    Manager &manager;
+    KURL     serverURL;
+    TQString  version;
+    bool     showStatistics, showDrawGames, trackLostGames, trackDrawGames;
+    Manager::ShowMode showMode;
+
+ private:
+    KHighscore   *_hsConfig;
+    PlayerInfos  *_playerInfos;
+    ScoreInfos   *_scoreInfos;
+    bool          _first;
+    const uint    _nbGameTypes;
+    uint          _gameType;
+
+    // return -1 if not a local best score
+    int rank(const Score &score) const;
+
+    bool submitWorldWide(const Score &score, TQWidget *parent) const;
+    static bool doQuery(const KURL &url, TQWidget *parent,
+                        TQDomNamedNodeMap *map = 0);
+    static bool getFromQuery(const TQDomNamedNodeMap &map, const TQString &name,
+                             TQString &value, TQWidget *parent);
+    void convertToGlobal();
+};
+
+} // namespace
+
+#endif
diff --git a/libtdegames/highscore/kexthighscore_item.cpp b/libtdegames/highscore/kexthighscore_item.cpp
new file mode 100644
index 00000000..4b48a0ee
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_item.cpp
@@ -0,0 +1,312 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kexthighscore_item.h"
+
+#include <tqlayout.h>
+#include <kglobal.h>
+#include <kdialogbase.h>
+#include <kdebug.h>
+
+#include "khighscore.h"
+#include "kexthighscore_internal.h"
+#include "kexthighscore_gui.h"
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+Item::Item(const TQVariant &def, const TQString &label, int tqalignment)
+    : _default(def), _label(label), _tqalignment(tqalignment),
+      _format(NoFormat), _special(NoSpecial)
+{}
+
+Item::~Item()
+{}
+
+TQVariant Item::read(uint, const TQVariant &value) const
+{
+    return value;
+}
+
+void Item::setPrettyFormat(Format format)
+{
+    bool buint = ( _default.type()==TQVariant::UInt );
+    bool bdouble = ( _default.type()==TQVariant::Double );
+    bool bnum = ( buint || bdouble || _default.type()==TQVariant::Int );
+
+    switch (format) {
+    case OneDecimal:
+    case Percentage:
+        Q_ASSERT(bdouble);
+        break;
+    case MinuteTime:
+        Q_ASSERT(bnum);
+        break;
+    case DateTime:
+    	Q_ASSERT( _default.type()==TQVariant::DateTime );
+	break;
+    case NoFormat:
+        break;
+    }
+
+    _format = format;
+}
+
+void Item::setPrettySpecial(Special special)
+{
+    bool buint = ( _default.type()==TQVariant::UInt );
+    bool bnum = ( buint || _default.type()==TQVariant::Double
+                  || _default.type()==TQVariant::Int );
+
+    switch (special) {
+    case ZeroNotDefined:
+        Q_ASSERT(bnum);
+        break;
+    case NegativeNotDefined:
+        Q_ASSERT(bnum && !buint);
+        break;
+    case DefaultNotDefined:
+        break;
+    case Anonymous:
+        Q_ASSERT( _default.type()==TQVariant::String );
+        break;
+    case NoSpecial:
+        break;
+    }
+
+     _special = special;
+}
+
+TQString Item::timeFormat(uint n)
+{
+    Q_ASSERT( n<=3600 && n!=0 );
+    n = 3600 - n;
+    return TQString::number(n / 60).rightJustify(2, '0') + ':'
+        + TQString::number(n % 60).rightJustify(2, '0');
+}
+
+TQString Item::pretty(uint, const TQVariant &value) const
+{
+    switch (_special) {
+    case ZeroNotDefined:
+        if ( value.toUInt()==0 ) return "--";
+        break;
+    case NegativeNotDefined:
+        if ( value.toInt()<0 ) return "--";
+        break;
+    case DefaultNotDefined:
+        if ( value==_default ) return "--";
+        break;
+    case Anonymous:
+        if ( value.toString()==ItemContainer::ANONYMOUS )
+            return i18n(ItemContainer::ANONYMOUS_LABEL);
+        break;
+    case NoFormat:
+        break;
+    }
+
+    switch (_format) {
+    case OneDecimal:
+        return TQString::number(value.toDouble(), 'f', 1);
+    case Percentage:
+        return TQString::number(value.toDouble(), 'f', 1) + "%";
+    case MinuteTime:
+        return timeFormat(value.toUInt());
+    case DateTime:
+        if ( value.toDateTime().isNull() ) return "--";
+        return KGlobal::locale()->formatDateTime(value.toDateTime());
+    case NoSpecial:
+        break;
+    }
+
+    return value.toString();
+}
+
+//-----------------------------------------------------------------------------
+Score::Score(ScoreType type)
+    : _type(type)
+{
+    const ItemArray &items = internal->scoreInfos();
+    for (uint i=0; i<items.size(); i++)
+        _data[items[i]->name()] = items[i]->item()->defaultValue();
+}
+
+Score::~Score()
+{}
+
+const TQVariant &Score::data(const TQString &name) const
+{
+    Q_ASSERT( _data.contains(name) );
+    return _data[name];
+}
+
+void Score::setData(const TQString &name, const TQVariant &value)
+{
+    Q_ASSERT( _data.contains(name) );
+    Q_ASSERT( _data[name].type()==value.type() );
+    _data[name] = value;
+}
+
+bool Score::isTheWorst() const
+{
+    Score s;
+    return score()==s.score();
+}
+
+bool Score::operator <(const Score &score)
+{
+    return internal->manager.isStrictlyLess(*this, score);
+}
+
+TQDataStream &operator <<(TQDataStream &s, const Score &score)
+{
+    s << (TQ_UINT8)score.type();
+    s << score._data;
+    return s;
+}
+
+TQDataStream &operator >>(TQDataStream &s, Score &score)
+{
+    TQ_UINT8 type;
+    s >> type;
+    score._type = (ScoreType)type;
+    s >> score._data;
+    return s;
+}
+
+//-----------------------------------------------------------------------------
+MultiplayerScores::MultiplayerScores()
+{}
+
+MultiplayerScores::~MultiplayerScores()
+{}
+
+void MultiplayerScores::clear()
+{
+    Score score;
+    for (uint i=0; i<_scores.size(); i++) {
+        _nbGames[i] = 0;
+        TQVariant name = _scores[i].data("name");
+        _scores[i] = score;
+        _scores[i].setData("name", name);
+        _scores[i]._data["mean score"] = double(0);
+        _scores[i]._data["nb won games"] = uint(0);
+    }
+}
+
+void MultiplayerScores::setPlayerCount(uint nb)
+{
+    _nbGames.resize(nb);
+    _scores.resize(nb);
+    clear();
+}
+
+void MultiplayerScores::setName(uint i, const TQString &name)
+{
+    _scores[i].setData("name", name);
+}
+
+void MultiplayerScores::addScore(uint i, const Score &score)
+{
+    TQVariant name = _scores[i].data("name");
+    double mean = _scores[i].data("mean score").toDouble();
+    uint won = _scores[i].data("nb won games").toUInt();
+    _scores[i] = score;
+    _scores[i].setData("name", name);
+    _nbGames[i]++;
+    mean += (double(score.score()) - mean) / _nbGames[i];
+    _scores[i]._data["mean score"] = mean;
+    if ( score.type()==Won ) won++;
+    _scores[i]._data["nb won games"] = won;
+}
+
+void MultiplayerScores::show(TQWidget *parent)
+{
+    // check consistency
+    if ( _nbGames.size()<2 ) kdWarning(11002) << "less than 2 players" << endl;
+    else {
+        bool ok = true;
+        uint nb = _nbGames[0];
+        for (uint i=1; i<_nbGames.size(); i++)
+            if ( _nbGames[i]!=nb ) ok = false;
+        if (!ok)
+           kdWarning(11002) << "players have not same number of games" << endl;
+    }
+
+    // order the players according to the number of won games
+    TQValueVector<Score> ordered;
+    for (uint i=0; i<_scores.size(); i++) {
+        uint won = _scores[i].data("nb won games").toUInt();
+        double mean = _scores[i].data("mean score").toDouble();
+        TQValueVector<Score>::iterator it;
+        for(it = ordered.begin(); it!=ordered.end(); ++it) {
+            uint cwon = (*it).data("nb won games").toUInt();
+            double cmean = (*it).data("mean score").toDouble();
+            if ( won<cwon || (won==cwon && mean<cmean) ) {
+                ordered.insert(it, _scores[i]);
+                break;
+            }
+        }
+        if ( it==ordered.end() ) ordered.push_back(_scores[i]);
+    }
+
+    // show the scores
+    KDialogBase dialog(KDialogBase::Plain, i18n("Multiplayers Scores"),
+                       KDialogBase::Close, KDialogBase::Close,
+                       parent, "show_multiplayers_score", true, true);
+    TQHBoxLayout *hbox = new TQHBoxLayout(dialog.plainPage(),
+                                KDialog::marginHint(), KDialog::spacingHint());
+
+    TQVBox *vbox = new TQVBox(dialog.plainPage());
+    hbox->addWidget(vbox);
+    if ( _nbGames[0]==0 ) (void)new TQLabel(i18n("No game played."), vbox);
+    else {
+        (void)new TQLabel(i18n("Scores for last game:"), vbox);
+        (void)new LastMultipleScoresList(ordered, vbox);
+    }
+
+    if ( _nbGames[0]>1 ) {
+        vbox = new TQVBox(dialog.plainPage());
+        hbox->addWidget(vbox);
+        (void)new TQLabel(i18n("Scores for the last %1 games:")
+                         .tqarg(_nbGames[0]), vbox);
+        (void)new TotalMultipleScoresList(ordered, vbox);
+    }
+
+    dialog.enableButtonSeparator(false);
+    dialog.exec();
+}
+
+TQDataStream &operator <<(TQDataStream &s, const MultiplayerScores &score)
+{
+    s << score._scores;
+    s << score._nbGames;
+    return s;
+}
+
+TQDataStream &operator >>(TQDataStream &s, MultiplayerScores &score)
+{
+    s >> score._scores;
+    s >> score._nbGames;
+    return s;
+}
+
+} // namespace
diff --git a/libtdegames/highscore/kexthighscore_item.h b/libtdegames/highscore/kexthighscore_item.h
new file mode 100644
index 00000000..b32f32e7
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_item.h
@@ -0,0 +1,317 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXTHIGHSCORE_ITEM_H
+#define KEXTHIGHSCORE_ITEM_H
+
+#include <tqvariant.h>
+#include <tqnamespace.h>
+#include <tqmap.h>
+#include <tqvaluevector.h>
+#include <kdemacros.h>
+class TQWidget;
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+/**
+ * This class defines how to convert and how to display
+ * a highscore element (such as the score, the date, ...) or a player
+ * info (such as the player name, the best score, ...).
+ */
+class KDE_EXPORT Item
+{
+ public:
+    /**
+     * Possible display format.
+     * <ul>
+     * <li> @p NoFormat : no formatting (default) </li>
+     * <li> @p OneDecimal : with one decimal (only for Double) </li>
+     * <li> @p Percentage : with one decimal + % (only for Double) </li>
+     * <li> @p MinuteTime : MM:SS ie 3600 is 00:00, 1 is 59:59 and 0 is
+     *      undefined (only for UInt, Int and Double) </li>
+     * <li> @p DateTime : date and time according to locale (only for
+     *      DateTime) </li>
+     * </ul>
+     */
+    enum Format { NoFormat, OneDecimal, Percentage, MinuteTime,
+		          DateTime };
+
+    /**
+     * Possible special value for display format.
+     * <ul>
+     * <li> @p NoSpecial : no special value ; a null DateTime is replaced by
+     *      "--" (default) </li>
+     * <li> ZeroNotDefined : 0 is replaced by "--" (only for UInt, Int and
+     *      Double) </li>
+     * <li> @p NegativeNotDefined : negative values are replaced by "--" (only
+     *      for Int and Double) </li>
+     * <li> @p DefaultNotDefined : default value is replaced by "--" </li>
+     * <li> @p Anonymous : replace the special value ItemBase::ANONYMOUS
+     *      by i18n("anonymous") (only for String) </li>
+     * </ul>
+     */
+    enum Special { NoSpecial, ZeroNotDefined, NegativeNotDefined,
+                   DefaultNotDefined, Anonymous };
+
+    /**
+     * Constructor.
+     *
+     * @param def default value ; the TQVariant also gives the type of data.
+     * Be sure to cast the value to the required type (for e.g. with uint).
+     * @param label the label corresponding to the item. If empty, the item
+     *              is not shown.
+     * @param tqalignment the tqalignment of the item.
+     */
+    Item(const TQVariant &def = TQVariant::Invalid,
+         const TQString &label = TQString(), int tqalignment = TQt::AlignRight);
+
+    virtual ~Item();
+
+    /**
+     * Set the display format.
+     * @see Format
+     */
+    void setPrettyFormat(Format format);
+
+    /**
+     * Set the special value for display.
+     * @see Special
+     */
+    void setPrettySpecial(Special special);
+
+    /**
+     * @return if the item is shown.
+     */
+    bool isVisible() const    { return !_label.isEmpty(); }
+
+    /**
+     * Set the label.
+     */
+    void setLabel(const TQString &label) { _label = label; }
+
+    /**
+     * @return the label.
+     */
+    TQString label() const { return _label; }
+
+    /**
+     * @return the tqalignment.
+     */
+    int tqalignment() const { return _tqalignment; }
+
+    /**
+     * Set default value.
+     */
+    void setDefaultValue(const TQVariant &value) { _default = value; }
+
+    /**
+     * @return the default value.
+     */
+    const TQVariant &defaultValue() const { return _default; }
+
+    /**
+     * @return the converted value (by default the value is left
+     * unchanged). Most of the time you don't need to reimplement this method.
+     *
+     * @param i the element index ("rank" for score / "id" for player)
+     * @param value the value to convert
+     */
+    virtual TQVariant read(uint i, const TQVariant &value) const;
+
+    /**
+     * @return the string to be displayed. You may need to reimplement this
+     * method for special formatting (different from the standard ones).
+     *
+     * @param i the element index ("rank" for score / "id" for player)
+     * @param value the value to convert
+     */
+    virtual TQString pretty(uint i, const TQVariant &value) const;
+
+ private:
+    TQVariant _default;
+    TQString  _label;
+    int      _tqalignment;
+    Format   _format;
+    Special  _special;
+
+    class ItemPrivate;
+    ItemPrivate *d;
+
+    static TQString timeFormat(uint);
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * Possible score type.
+ * @p Won the game has been won.
+ * @p Lost the game has been lost or has been aborted.
+ * @p Draw the game is a draw.
+ */
+enum ScoreType { Won = 0, Lost = -1, Draw = -2 };
+
+/**
+ * This class contains data for a score. You should not inherit from
+ * this class but reimplement the methods in Highscores.
+ */
+class KDE_EXPORT Score
+{
+ public:
+    Score(ScoreType type = Won);
+
+    ~Score();
+
+    /**
+     * @return the game type.
+     */
+    ScoreType type() const { return _type; }
+
+    /**
+     * Set the game type.
+     */
+    void setType(ScoreType type) { _type = type; }
+
+    /**
+     * @return the data associated with the named Item.
+     */
+    const TQVariant &data(const TQString &name) const;
+
+    /**
+     * Set the data associated with the named Item. Note that the
+     * value should have the type of the default value of the
+     * Item.
+     */
+    void setData(const TQString &name, const TQVariant &value);
+
+    /**
+     * @return the score value.
+     *
+     * Equivalent to <pre>data("score").toUInt()</pre>.
+     */
+    uint score() const { return data("score").toUInt(); }
+
+    /**
+     * Set the score value.
+     *
+     * Equivalent to <pre>setData("score", score)</pre>.
+     */
+    void setScore(uint score) { setData("score", score); }
+
+    /**
+     * @return true if this is the worst possible score (ie the default
+     * argument of ScoreItem).
+     */
+    bool isTheWorst() const;
+
+    /**
+     * Comparison operator.
+     *
+     * @see Manager::isStrictlyLess
+     */
+    bool operator <(const Score &score);
+
+ private:
+    ScoreType  _type;
+    TQMap<TQString, TQVariant> _data;
+
+    class ScorePrivate;
+    ScorePrivate *d;
+
+    friend class MultiplayerScores;
+
+    friend TQDataStream &operator <<(TQDataStream &stream, const Score &score);
+    friend TQDataStream &operator >>(TQDataStream &stream, Score &score);
+};
+
+KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const Score &score);
+KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, Score &score);
+
+/**
+ * This class is used to store and show scores for multiplayer games.
+ *
+ * Example of use:
+ * Initialize the class:
+ * <pre>
+ * KExtHighscore::MultiScore ms(2);
+ * ms.setPlayerName(0, "player 1");
+ * ms.setPlayerName(1, "player 2");
+ * </pre>
+ * At the end of each game, add the score of each players:
+ * <pre>
+ * KExtHighscore::Score score(KExtHighscore::Won);
+ * score.setScore(100);
+ * ms.addScore(0, score);
+ * score.setType(KExtHighscore::Lost);
+ * score.setScore(20);
+ * ms.addScore(1, score);
+ * </pre>
+ */
+class KDE_EXPORT MultiplayerScores
+{
+ public:
+    MultiplayerScores();
+
+    ~MultiplayerScores();
+
+    /**
+     * Set the number of players and clear the scores.
+     */
+    void setPlayerCount(uint nb);
+
+    /**
+     * Set the name of player.
+     */
+    void setName(uint player, const TQString &name);
+
+    /**
+     * Add the score of player.
+     */
+    void addScore(uint player, const Score &score);
+
+    /**
+     * Clear all scores.
+     */
+    void clear();
+
+    /**
+     * Show scores.
+     */
+    void show(TQWidget *parent);
+
+ private:
+    TQValueVector<uint>  _nbGames;
+    TQValueVector<Score> _scores;
+
+    class MultiplayerScoresPrivate;
+    MultiplayerScoresPrivate *d;
+
+    friend TQDataStream &operator <<(TQDataStream &stream,
+                                    const MultiplayerScores &score);
+    friend TQDataStream &operator >>(TQDataStream &stream,
+                                    MultiplayerScores &score);
+};
+
+KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const MultiplayerScores &score);
+KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, MultiplayerScores &score);
+
+} // namespace
+
+#endif
diff --git a/libtdegames/highscore/kexthighscore_tab.cpp b/libtdegames/highscore/kexthighscore_tab.cpp
new file mode 100644
index 00000000..d47b35a6
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_tab.cpp
@@ -0,0 +1,281 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kexthighscore_tab.h"
+#include "kexthighscore_tab.moc"
+
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqvgroupbox.h>
+#include <tqgrid.h>
+#include <tqheader.h>
+
+#include <kdialogbase.h>
+#include <klistview.h>
+#include <kdebug.h>
+#include <kglobal.h>
+
+#include "kexthighscore.h"
+#include "kexthighscore_internal.h"
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+PlayersCombo::PlayersCombo(TQWidget *parent, const char *name)
+    : TQComboBox(parent, name)
+{
+    const PlayerInfos &p = internal->playerInfos();
+    for (uint i = 0; i<p.nbEntries(); i++)
+        insertItem(p.prettyName(i));
+    insertItem(TQString("<") + i18n("all") + '>');
+    connect(this, TQT_SIGNAL(activated(int)), TQT_SLOT(activatedSlot(int)));
+}
+
+void PlayersCombo::activatedSlot(int i)
+{
+    const PlayerInfos &p = internal->playerInfos();
+    if ( i==(int)p.nbEntries() ) emit allSelected();
+    else if ( i==(int)p.nbEntries()+1 ) emit noneSelected();
+    else emit playerSelected(i);
+}
+
+void PlayersCombo::load()
+{
+    const PlayerInfos &p = internal->playerInfos();
+    for (uint i = 0; i<p.nbEntries(); i++)
+        changeItem(p.prettyName(i), i);
+}
+
+//-----------------------------------------------------------------------------
+AdditionalTab::AdditionalTab(TQWidget *parent, const char *name)
+    : TQWidget(parent, name)
+{
+    TQVBoxLayout *top = new TQVBoxLayout(this, KDialogBase::marginHint(),
+                                       KDialogBase::spacingHint());
+
+    TQHBoxLayout *hbox = new TQHBoxLayout(top);
+    TQLabel *label = new TQLabel(i18n("Select player:"), this);
+    hbox->addWidget(label);
+    _combo = new PlayersCombo(this);
+    connect(_combo, TQT_SIGNAL(playerSelected(uint)),
+            TQT_SLOT(playerSelected(uint)));
+    connect(_combo, TQT_SIGNAL(allSelected()), TQT_SLOT(allSelected()));
+    hbox->addWidget(_combo);
+    hbox->addStretch(1);
+}
+
+void AdditionalTab::init()
+{
+    uint id = internal->playerInfos().id();
+    _combo->setCurrentItem(id);
+    playerSelected(id);
+}
+
+void AdditionalTab::allSelected()
+{
+    display(internal->playerInfos().nbEntries());
+}
+
+TQString AdditionalTab::percent(uint n, uint total, bool withBraces)
+{
+    if ( n==0 || total==0 ) return TQString();
+    TQString s =  TQString("%1%").tqarg(100.0 * n / total, 0, 'f', 1);
+    return (withBraces ? TQString("(") + s + ")" : s);
+}
+
+void AdditionalTab::load()
+{
+    _combo->load();
+}
+
+
+//-----------------------------------------------------------------------------
+const char *StatisticsTab::COUNT_LABELS[Nb_Counts] = {
+    I18N_NOOP("Total:"), I18N_NOOP("Won:"), I18N_NOOP("Lost:"),
+    I18N_NOOP("Draw:")
+};
+const char *StatisticsTab::TREND_LABELS[Nb_Trends] = {
+    I18N_NOOP("Current:"), I18N_NOOP("Max won:"), I18N_NOOP("Max lost:")
+};
+
+StatisticsTab::StatisticsTab(TQWidget *parent)
+    : AdditionalTab(parent, "statistics_tab")
+{
+    // construct GUI
+    TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
+
+    TQHBoxLayout *hbox = new TQHBoxLayout(top);
+    TQVBoxLayout *vbox = new TQVBoxLayout(hbox);
+    TQVGroupBox *group = new TQVGroupBox(i18n("Game Counts"), this);
+    vbox->addWidget(group);
+    TQGrid *grid = new TQGrid(3, group);
+    grid->setSpacing(KDialogBase::spacingHint());
+    for (uint k=0; k<Nb_Counts; k++) {
+        if ( Count(k)==Draw && !internal->showDrawGames ) continue;
+        (void)new TQLabel(i18n(COUNT_LABELS[k]), grid);
+        _nbs[k] = new TQLabel(grid);
+        _percents[k] = new TQLabel(grid);
+    }
+
+    group = new TQVGroupBox(i18n("Trends"), this);
+    vbox->addWidget(group);
+    grid = new TQGrid(2, group);
+    grid->setSpacing(KDialogBase::spacingHint());
+    for (uint k=0; k<Nb_Trends; k++) {
+        (void)new TQLabel(i18n(TREND_LABELS[k]), grid);
+        _trends[k] = new TQLabel(grid);
+    }
+
+    hbox->addStretch(1);
+    top->addStretch(1);
+}
+
+void StatisticsTab::load()
+{
+    AdditionalTab::load();
+    const PlayerInfos &pi = internal->playerInfos();
+    uint nb = pi.nbEntries();
+    _data.resize(nb+1);
+    for (uint i=0; i<_data.size()-1; i++) {
+        _data[i].count[Total] = pi.item("nb games")->read(i).toUInt();
+        _data[i].count[Lost] = pi.item("nb lost games")->read(i).toUInt()
+                       + pi.item("nb black marks")->read(i).toUInt(); // legacy
+        _data[i].count[Draw] = pi.item("nb draw games")->read(i).toUInt();
+        _data[i].count[Won] = _data[i].count[Total] - _data[i].count[Lost]
+                              - _data[i].count[Draw];
+        _data[i].trend[CurrentTrend] =
+            pi.item("current trend")->read(i).toInt();
+        _data[i].trend[WonTrend] = pi.item("max won trend")->read(i).toUInt();
+        _data[i].trend[LostTrend] =
+            -(int)pi.item("max lost trend")->read(i).toUInt();
+    }
+
+    for (uint k=0; k<Nb_Counts; k++) _data[nb].count[k] = 0;
+    for (uint k=0; k<Nb_Trends; k++) _data[nb].trend[k] = 0;
+    for (uint i=0; i<_data.size()-1; i++) {
+        for (uint k=0; k<Nb_Counts; k++)
+            _data[nb].count[k] += _data[i].count[k];
+        for (uint k=0; k<Nb_Trends; k++)
+            _data[nb].trend[k] += _data[i].trend[k];
+    }
+    for (uint k=0; k<Nb_Trends; k++)
+        _data[nb].trend[k] /= (_data.size()-1);
+
+    init();
+}
+
+TQString StatisticsTab::percent(const Data &d, Count count) const
+{
+    if ( count==Total ) return TQString();
+    return AdditionalTab::percent(d.count[count], d.count[Total], true);
+}
+
+void StatisticsTab::display(uint i)
+{
+    const Data &d = _data[i];
+    for (uint k=0; k<Nb_Counts; k++) {
+        if ( Count(k) && !internal->showDrawGames ) continue;
+        _nbs[k]->setText(TQString::number(d.count[k]));
+        _percents[k]->setText(percent(d, Count(k)));
+    }
+    for (uint k=0; k<Nb_Trends; k++) {
+        TQString s;
+        if ( d.trend[k]>0 ) s = '+';
+        int prec = (i==internal->playerInfos().nbEntries() ? 1 : 0);
+        _trends[k]->setText(s + TQString::number(d.trend[k], 'f', prec));
+    }
+}
+
+//-----------------------------------------------------------------------------
+HistogramTab::HistogramTab(TQWidget *parent)
+    : AdditionalTab(parent, "histogram_tab")
+{
+    // construct GUI
+    TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
+
+    _list = new KListView(this);
+    _list->setSelectionMode(TQListView::NoSelection);
+    _list->setItemMargin(3);
+    _list->setAllColumnsShowFocus(true);
+    _list->setSorting(-1);
+    _list->header()->setClickEnabled(false);
+    _list->header()->setMovingEnabled(false);
+    top->addWidget(_list);
+
+    _list->addColumn(i18n("From"));
+    _list->addColumn(i18n("To"));
+    _list->addColumn(i18n("Count"));
+    _list->addColumn(i18n("Percent"));
+    for (uint i=0; i<4; i++) _list->setColumnAlignment(i, AlignRight);
+    _list->addColumn(TQString());
+
+    const Item *sitem = internal->scoreInfos().item("score")->item();
+    const PlayerInfos &pi = internal->playerInfos();
+    const TQMemArray<uint> &sh = pi.histogram();
+    for (uint k=1; k<pi.histoSize(); k++) {
+        TQString s1 = sitem->pretty(0, sh[k-1]);
+        TQString s2;
+        if ( k==sh.size() ) s2 = "...";
+        else if ( sh[k]!=sh[k-1]+1 ) s2 = sitem->pretty(0, sh[k]);
+        (void)new KListViewItem(_list, s1, s2);
+    }
+}
+
+void HistogramTab::load()
+{
+    AdditionalTab::load();
+    const PlayerInfos &pi = internal->playerInfos();
+    uint n = pi.nbEntries();
+    uint s = pi.histoSize() - 1;
+    _counts.resize((n+1) * s);
+    _data.fill(0, n+1);
+    for (uint k=0; k<s; k++) {
+        _counts[n*s + k] = 0;
+        for (uint i=0; i<n; i++) {
+            uint nb = pi.item(pi.histoName(k+1))->read(i).toUInt();
+            _counts[i*s + k] = nb;
+            _counts[n*s + k] += nb;
+            _data[i] += nb;
+            _data[n] += nb;
+        }
+    }
+
+    init();
+}
+
+void HistogramTab::display(uint i)
+{
+    const PlayerInfos &pi = internal->playerInfos();
+    TQListViewItem *item = _list->firstChild();
+    uint s = pi.histoSize() - 1;
+    for (int k=s-1; k>=0; k--) {
+        uint nb = _counts[i*s + k];
+        item->setText(2, TQString::number(nb));
+        item->setText(3, percent(nb, _data[i]));
+        uint width = (_data[i]==0 ? 0 : tqRound(150.0 * nb / _data[i]));
+        TQPixmap pixmap(width, 10);
+        pixmap.fill(blue);
+        item->setPixmap(4, pixmap);
+        item = item->nextSibling();
+    }
+}
+
+} // namespace
diff --git a/libtdegames/highscore/kexthighscore_tab.h b/libtdegames/highscore/kexthighscore_tab.h
new file mode 100644
index 00000000..d59afeb5
--- /dev/null
+++ b/libtdegames/highscore/kexthighscore_tab.h
@@ -0,0 +1,121 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXTHIGHSCORE_TAB_H
+#define KEXTHIGHSCORE_TAB_H
+
+#include <tqcombobox.h>
+#include <tqmemarray.h>
+
+class TQLabel;
+class KListView;
+
+
+namespace KExtHighscore
+{
+
+//-----------------------------------------------------------------------------
+class PlayersCombo : public TQComboBox
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    PlayersCombo(TQWidget *parent = 0, const char *name = 0);
+
+    void load();
+
+ signals:
+    void playerSelected(uint i);
+    void allSelected();
+    void noneSelected();
+
+ private slots:
+    void activatedSlot(int i);
+};
+
+//-----------------------------------------------------------------------------
+class AdditionalTab : public TQWidget
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    AdditionalTab(TQWidget *parent, const char *name);
+
+    virtual void load();
+
+ private slots:
+    void playerSelected(uint i) { display(i) ; }
+    void allSelected();
+
+ protected:
+    void init();
+    static TQString percent(uint n, uint total, bool withBraces = false);
+    virtual void display(uint i) = 0;
+
+ private:
+    PlayersCombo *_combo;
+};
+
+//-----------------------------------------------------------------------------
+class StatisticsTab : public AdditionalTab
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    StatisticsTab(TQWidget *parent);
+
+    void load();
+
+ private:
+    enum Count { Total = 0, Won, Lost, Draw, Nb_Counts };
+    static const char *COUNT_LABELS[Nb_Counts];
+    enum Trend { CurrentTrend = 0, WonTrend, LostTrend, Nb_Trends };
+    static const char *TREND_LABELS[Nb_Trends];
+    struct Data {
+        uint count[Nb_Counts];
+        double trend[Nb_Trends];
+    };
+    TQMemArray<Data> _data;
+    TQLabel *_nbs[Nb_Counts], *_percents[Nb_Counts], *_trends[Nb_Trends];
+
+    TQString percent(const Data &, Count) const;
+    void display(uint i);
+};
+
+//-----------------------------------------------------------------------------
+class HistogramTab : public AdditionalTab
+{
+ Q_OBJECT
+  TQ_OBJECT
+ public:
+    HistogramTab(TQWidget *parent);
+
+    void load();
+
+ private:
+    TQMemArray<uint> _counts;
+    TQMemArray<uint> _data;
+    KListView       *_list;
+
+    void display(uint i);
+};
+
+} // namespace
+
+#endif
diff --git a/libtdegames/highscore/kfilelock.cpp b/libtdegames/highscore/kfilelock.cpp
new file mode 100644
index 00000000..7dc83b96
--- /dev/null
+++ b/libtdegames/highscore/kfilelock.cpp
@@ -0,0 +1,88 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kfilelock.h"
+
+#include <unistd.h>
+#include <sys/file.h>
+#include <errno.h>
+
+#include <kdebug.h>
+
+
+KFileLock::KFileLock(int fd)
+    : _fd(fd), _locked(false)
+{}
+
+int KFileLock::lock()
+{
+    kdDebug(11002) << "lock fd=" << _fd << endl;
+#ifdef F_SETLK
+# ifndef SEEK_SET
+#  define SEEK_SET 0
+# endif
+    struct flock lock_data;
+    lock_data.l_type = F_WRLCK;
+    lock_data.l_whence = SEEK_SET;
+    lock_data.l_start = lock_data.l_len = 0;
+    if ( fcntl(_fd, F_SETLK, &lock_data)==-1 ) {
+        if ( errno==EAGAIN ) return -2;
+        return -1;
+    }
+#else
+# ifdef LOCK_EX
+    if ( flock (_fd, LOCK_EX|LOCK_NB)==-1 ) {
+        if ( errno==EWOULDBLOCK ) return -2;
+        return -1;
+    }
+# else
+    if ( lockf(_fd, F_TLOCK, 0)==-1 ) {
+        if ( errno==EACCES ) return -2;
+        return -1;
+    }
+# endif
+#endif
+    _locked = true;
+    return 0;
+}
+
+KFileLock::~KFileLock()
+{
+    unlock();
+}
+
+void KFileLock::unlock()
+{
+    if ( !_locked ) return;
+    kdDebug(11002) << "unlock" << endl;
+# ifdef F_SETLK
+    struct flock lock_data;
+    lock_data.l_type = F_UNLCK;
+    lock_data.l_whence = SEEK_SET;
+    lock_data.l_start = lock_data.l_len = 0;
+    (void)fcntl(_fd, F_SETLK, &lock_data);
+# else
+#  ifdef F_ULOCK
+    lockf(_fd, F_ULOCK, 0);
+#  else
+    flock(_fd, LOCK_UN);
+#  endif
+# endif
+    _locked = false;
+}
diff --git a/libtdegames/highscore/kfilelock.h b/libtdegames/highscore/kfilelock.h
new file mode 100644
index 00000000..2e1841ba
--- /dev/null
+++ b/libtdegames/highscore/kfilelock.h
@@ -0,0 +1,53 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+#ifndef KFILELOCK_H
+#define KFILELOCK_H
+
+
+class KFileLock
+{
+public:
+    KFileLock(int fd);
+
+    /** Call unlock(). */
+    ~KFileLock();
+
+    /** @return the file descriptor. */
+    int fd() const { return _fd; }
+
+    /*
+     * Lock the file.
+     * @return 0 on success, -1 on failure (no permission) and -2 if another
+     * process is currently locking the file.
+     */
+    int lock();
+
+    /** Unlock the file. */
+    void unlock();
+
+    /** @return true if we currently lock the file. */
+    bool isLocked() const { return _locked; }
+
+private:
+    int   _fd;
+    bool  _locked;
+};
+
+
+#endif
diff --git a/libtdegames/highscore/khighscore.cpp b/libtdegames/highscore/khighscore.cpp
new file mode 100644
index 00000000..6d696020
--- /dev/null
+++ b/libtdegames/highscore/khighscore.cpp
@@ -0,0 +1,262 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include <config.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/file.h>
+
+#include <kapplication.h>
+#include <ksimpleconfig.h>
+#include <kglobal.h>
+#include <kstdguiitem.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kstaticdeleter.h>
+
+#include "khighscore.h"
+#include "kconfigrawbackend.h"
+#include "kfilelock.h"
+
+#define GROUP "KHighscore"
+
+class KHighscorePrivate
+{
+public:
+    KHighscorePrivate() {}
+
+    TQString  group;
+    bool     global;
+};
+
+KFileLock *KHighscore::_lock = 0;
+KRawConfig *KHighscore::_config = 0;
+static KStaticDeleter<KFileLock> lockSD;
+static KStaticDeleter<KRawConfig> configSD;
+
+
+KHighscore::KHighscore(TQObject* parent)
+    : TQObject(parent)
+{
+    init(true);
+}
+
+KHighscore::KHighscore(bool forceLocal, TQObject* parent)
+    : TQObject(parent)
+{
+    init(forceLocal);
+}
+
+void KHighscore::init(bool forceLocal)
+{
+    d = new KHighscorePrivate;
+#ifdef HIGHSCORE_DIRECTORY
+    d->global = !forceLocal;
+    if ( d->global && _lock==0 )
+        kdFatal(11002) << "KHighscore::init should be called before!!" << endl;
+#else
+    d->global = false;
+    Q_UNUSED(forceLocal);
+#endif
+    readCurrentConfig();
+}
+
+bool KHighscore::isLocked() const
+{
+    return (d->global ? _lock->isLocked() : true);
+}
+
+void KHighscore::readCurrentConfig()
+{
+    if ( d->global ) _config->reparseConfiguration();
+}
+
+void KHighscore::init(const char *appname)
+{
+#ifdef HIGHSCORE_DIRECTORY
+    const TQString filename =  TQString::fromLocal8Bit("%1/%2.scores")
+                              .tqarg(HIGHSCORE_DIRECTORY).tqarg(appname);
+    int fd = open(filename.local8Bit(), O_RDWR);
+    if ( fd<0 ) kdFatal(11002) << "cannot open global highscore file \""
+                               << filename << "\"" << endl;
+    lockSD.setObject(_lock, new KFileLock(fd));
+    configSD.setObject(_config, new KRawConfig(fd, true)); // read-only
+
+    // drop the effective gid
+    int gid = getgid();
+    setregid(gid, gid);
+#else
+    Q_UNUSED(appname);
+#endif
+}
+
+bool KHighscore::lockForWriting(TQWidget *widget)
+{
+    if ( isLocked() ) return true;
+
+    bool first = true;
+    for (;;) {
+        kdDebug(11002) << "try locking" << endl;
+        // lock the highscore file (it should exist)
+        int result = _lock->lock();
+        bool ok = ( result==0 );
+        kdDebug(11002) << "locking system-wide highscore file res="
+                       <<  result << " (ok=" << ok << ")" << endl;
+        if (ok) {
+            readCurrentConfig();
+            _config->setReadOnly(false);
+            return true;
+        }
+
+        if ( !first ) {
+            KGuiItem item = KStdGuiItem::cont();
+            item.setText(i18n("Retry"));
+            int res = KMessageBox::warningContinueCancel(widget, i18n("Cannot access the highscore file. Another user is probably currently writing to it."), TQString(), item, "ask_lock_global_highscore_file");
+            if ( res==KMessageBox::Cancel ) break;
+        } else sleep(1);
+        first = false;
+    }
+    return false;
+}
+
+void KHighscore::writeAndUnlock()
+{
+    if ( !d->global ) {
+        kapp->config()->sync();
+        return;
+    }
+    if ( !isLocked() ) return;
+
+    kdDebug(11002) << "unlocking" << endl;
+    _config->sync(); // write config
+    _lock->unlock();
+    _config->setReadOnly(true);
+}
+
+KHighscore::~KHighscore()
+{
+    writeAndUnlock();
+    delete d;
+}
+
+KConfig* KHighscore::config() const
+{
+    return (d->global ? _config : kapp->config());
+}
+
+void KHighscore::writeEntry(int entry, const TQString& key, const TQVariant& value)
+{
+ Q_ASSERT( isLocked() );
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ cg.config()->writeEntry(confKey, value);
+}
+
+void KHighscore::writeEntry(int entry, const TQString& key, int value)
+{
+ Q_ASSERT( isLocked() );
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ cg.config()->writeEntry(confKey, value);
+}
+
+void KHighscore::writeEntry(int entry, const TQString& key, const TQString &value)
+{
+ Q_ASSERT (isLocked() );
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ cg.config()->writeEntry(confKey, value);
+}
+
+TQVariant KHighscore::readPropertyEntry(int entry, const TQString& key, const TQVariant& pDefault) const
+{
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ return cg.config()->readPropertyEntry(confKey, pDefault);
+}
+
+TQString KHighscore::readEntry(int entry, const TQString& key, const TQString& pDefault) const
+{
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ return cg.config()->readEntry(confKey, pDefault);
+}
+
+int KHighscore::readNumEntry(int entry, const TQString& key, int pDefault) const
+{
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ return cg.config()->readNumEntry(confKey, pDefault);
+}
+
+bool KHighscore::hasEntry(int entry, const TQString& key) const
+{
+ KConfigGroupSaver cg(config(), group());
+ TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
+ return cg.config()->hasKey(confKey);
+}
+
+TQStringList KHighscore::readList(const TQString& key, int lastEntry) const
+{
+ TQStringList list;
+ for (int i = 1; hasEntry(i, key) && ((lastEntry > 0) ? (i <= lastEntry) : true); i++) {
+	list.append(readEntry(i, key));
+ }
+ return list;
+}
+
+void KHighscore::writeList(const TQString& key, const TQStringList& list)
+{
+ for (int unsigned i = 1; i <= list.count(); i++) {
+	writeEntry(i, key, list[i - 1]);
+ }
+}
+
+void KHighscore::setHighscoreGroup(const TQString& group)
+{
+ d->group = group;
+}
+
+const TQString& KHighscore::highscoreGroup() const
+{
+ return d->group;
+}
+
+TQString KHighscore::group() const
+{
+    if ( highscoreGroup().isNull() )
+        return (d->global ? TQString() : GROUP);
+    return (d->global ? highscoreGroup()
+            : TQString("%1_%2").tqarg(GROUP).tqarg(highscoreGroup()));
+}
+
+bool KHighscore::hasTable() const
+{ return config()->hasGroup(group()); }
+
+void KHighscore::sync()
+{
+    writeAndUnlock();
+}
+
+#include "khighscore.moc"
diff --git a/libtdegames/highscore/khighscore.h b/libtdegames/highscore/khighscore.h
new file mode 100644
index 00000000..b7b6fb5e
--- /dev/null
+++ b/libtdegames/highscore/khighscore.h
@@ -0,0 +1,312 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KHIGHSCORE_H__
+#define __KHIGHSCORE_H__
+
+#include <tqstring.h>
+#include <tqobject.h>
+#include <kdemacros.h>
+class KConfig;
+class KFileLock;
+class KRawConfig;
+class KHighscorePrivate;
+
+/**
+ * @short Class for managing highscore tables
+ *
+ * This is the KDE class for saving and reading highscore tables. It offers the
+ * possibility for system-wide highscore tables (configure with e.g.
+ * --enable-highscore-dir=/var/games) and a theoretically unlimited number of
+ * entries.
+ *
+ * You can specify different "keys" for an entry - just like the KConfig
+ * keys. But it will be prefixed with the number of the entry. For example you
+ * will probably use something like this to save the name of the player on the
+ * top of the list (ie the winner):
+ * \code
+ * highscore->writeEntry(1, "name", myPlayer->name());
+ * \endcode
+ * Note that it doesn't really matter if you use "0" or "1" as the first entry
+ * of the list as long as your program always uses the same for the first
+ * entry. I recommend to use "1", as several convenience methods use this.
+ *
+ * You can also specify different groups using setHighscoreGroup. Just
+ * like the keys mentioned above the groups behave like groups in KConfig
+ * but are prefixed with "KHighscore_". The default group is just "KHighscore".
+ * You might use this e.g. to create different highscore tables like
+ * \code
+ * table->setHighscoreGroup("Easy");
+ * // write the highscores for level "easy" to the table
+ * writeEasyHighscores(table);
+ *
+ * table->setHighscore("Player_1");
+ * // write player specific highscores to the table
+ * writePlayerHighscores(table);
+ * \endcode
+ * As you can see above you can also use this to write the highscores of a
+ * single player, so the "best times" of a player. To write highscores for a
+ * specific player in a specific level you will have to use a more complex way:
+ * \code
+ * TQString group = TQString("%1_%2").tqarg(player).tqarg(level);
+ * table->setGroup(group);
+ * writeHighscore(table, player, level);
+ * \endcode
+ *
+ * Also note that you MUST NOT mark the key or the group for translation! I.e.
+ * don't use i18n() for the keys or groups! Here is the code to read the above
+ * written entry:
+ * \code
+ * TQString firstName = highscore->readEntry(0, "name");
+ * \endcode
+ * Easy, what?
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KHighscore : public TQObject
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+        /** @obsolete
+         * Constructor. The highscore file is forced to be local to support
+         * games using the old behaviour.
+         */
+	KHighscore(TQObject* parent = 0);
+
+        /**
+         * Constructor.
+         *
+         * @param forceLocal if true, the local highscore file is used even
+         * when the configuration has been set to use a system-wide file. This
+         * is convenient for converting highscores from legacy applications.
+	 * @param parent parent widget for this widget
+	 * @since 3.2
+         */
+        KHighscore(bool forceLocal, TQObject *parent);
+
+        /**
+         * Read the current state of the highscore file. Remember that when
+         * it's not locked for writing, this file can change at any time.
+         * (This method is only useful for a system-wide highscore file).
+	 * @since 3.2
+         */
+        void readCurrentConfig();
+
+        /** @since 3.2
+         * This method open the system-wide highscore file using the effective
+         * group id of the game executable (which should be "games"). The
+         * effective group id is completely dropped afterwards.
+         *
+         * Note: this method should be called in main() before creating a
+         * KApplication and doing anything else (KApplication checks that the
+         * program is not suid/sgid and will exit the program for security
+         * reason if it is the case).
+         */
+        static void init(const char *appname);
+
+        /** @since 3.2
+         * Lock the system-wide highscore file for writing (does nothing and
+         * return true if the local file is used).
+         * You should perform writing without GUI interaction to avoid
+         * blocking and don't forget to unlock the file as soon as possible
+         * with writeAndUnlock().
+         *
+         * If the config file cannot be locked,
+         * the method waits for 1 second and, if it failed again, displays
+         * a message box asking for retry or cancel.
+         * @param widget used as the parent of the message box.
+         *
+         * @return false on error or if the config file is locked by another
+         * process. In such case, the config stays read-only.
+         */
+        bool lockForWriting(TQWidget *widget = 0);
+
+        /**
+         * Effectively write and unlock the system-wide highscore file
+         * (@see lockForWriting).
+         * If using a local highscore file, it will sync the config.
+	 * @since 3.2
+         */
+        void writeAndUnlock();
+
+        /**
+         * @return true if the highscore file is locked or if a local
+         * file is used.
+	 *  @since 3.2
+         */
+        bool isLocked() const;
+
+        /**
+         * Destructor.
+         * If necessary, write and unlock the highscore file.
+         */
+	~KHighscore();
+
+	/**
+	 * @param entry The number of the entry / the placing of the player
+	 * @param key A key for this entry. E.g. "name" for the name of the
+	 * player. Nearly the same as the usual keys in KConfig - but they
+	 * are prefixed with the entry number
+	 * @param value The value of this entry
+	 **/
+	void writeEntry(int entry, const TQString& key, const TQString& value);
+
+	/**
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 **/
+	void writeEntry(int entry, const TQString& key, int value);
+
+	/**
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 * See KConfigBase documentation for allowed TQVariant::Type.
+	 **/
+	void writeEntry(int entry, const TQString& key, const TQVariant &value);
+
+	/**
+	 * Reads an entry from the highscore table.
+	 * @param entry The number of the entry / the placing to be read
+	 * @param key The key of the entry. E.g. "name" for the name of the
+	 * player. Nearly the same as the usual keys in KConfig - but they
+	 * are prefixed with the entry number
+	 * @param pDefault This will be used as default value if the key+pair
+	 * entry can't be found.
+	 * @return The value of this entry+key pair or pDefault if the entry+key
+	 * pair doesn't exist
+	 **/
+	TQString readEntry(int entry, const TQString& key, const TQString& pDefault = TQString()) const;
+
+	/**
+	 * Read a numeric value.
+	 * @param entry The number of the entry / the placing to be read
+	 * @param key The key of the entry. E.g. "name" for the name of the
+	 * player. Nearly the same as the usual keys in KConfig - but they
+	 * are prefixed with the entry number
+	 * @param pDefault This will be used as default value if the key+pair
+	 * entry can't be found.
+	 * @return The value of this entry+key pair or pDefault if the entry+key
+	 * pair doesn't exist
+	 **/
+	int readNumEntry(int entry, const TQString& key, int pDefault = -1) const;
+
+    /**
+     * Read a TQVariant entry.
+     * See KConfigBase documentation for allowed TQVariant::Type.
+     *
+     * @return the value of this entry+key pair or pDefault if the entry+key
+     * pair doesn't exist or
+     */
+    TQVariant readPropertyEntry(int entry, const TQString &key, const TQVariant &pDefault) const;
+
+	/**
+	 * @return True if the highscore table conatins the entry/key pair,
+	 * otherwise false
+	 **/
+	bool hasEntry(int entry, const TQString& key) const;
+
+	/**
+	 * Reads a list of entries from the highscore table starting at 1 until
+	 * lastEntry. If an entry between those numbers doesn't exist the
+	 * function aborts reading even if after the missing entry is an
+	 * existing one. The first entry of the list is the first placing, the
+	 * last on is the last placing.
+	 * @return A list of the entries of this key. You could also call
+	 * readEntry(i, key) where i is from 1 to 20. Note that this function
+	 * depends on "1" as the first entry!
+	 * @param key The key of the entry. E.g. "name" for the name of the
+	 * player. Nearly the same as the usual keys in KConfig - but they
+	 * are prefixed with the entry number
+	 * @param lastEntry the last entry which will be includes into the list.
+	 * 1 will include a list with maximal 1 entry - 20 a list with maximal
+	 * 20 entries. If lastEntry is <= 0 then rading is only stopped when when an
+	 * entry does not exist.
+	 **/
+	TQStringList readList(const TQString& key, int lastEntry = 20) const;
+
+	/**
+	 * Writes a list of entries to the highscore table.
+	 *
+	 * The first entry is prefixed with "1". Using this method is a short
+	 * way of calling writeEntry(i, key, list[i]) from i = 1 to
+	 * list.count()
+	 * @param key A key for the entry. E.g. "name" for the name of the
+	 * player. Nearly the same as the usual keys in KConfig - but they
+	 * are prefixed with the entry number
+	 * @param list The list of values
+	 **/
+	void writeList(const TQString& key, const TQStringList& list);
+
+	/**
+	 * @return Whether a highscore table exists. You can use this
+	 * function to indicate whether KHighscore created a highscore table
+	 * before and - if not - read your old (non-KHighscore) table instead.
+	 * This way you can safely read an old table and save it using
+	 * KHighscore without losing any data
+	 **/
+	bool hasTable() const;
+
+        /** @obsolete
+         * This does the same as writeAndUnlock().
+         */
+	void sync();
+
+	/**
+	 * Set the new highscore group. The group is being prefixed with
+	 * "KHighscore_" in the table.
+	 * @param groupname The new groupname. E.g. use "easy" for the easy
+	 * level of your game. If you use TQString() (the default) the
+	 * default group is used.
+	 **/
+	void setHighscoreGroup(const TQString& groupname = TQString());
+
+	/**
+	 * @return The currently used group. This doesn't contain the prefix
+	 * ("KHighscore_") but the same as setHighscoreGroup uses. The
+         * default is TQString()
+	 **/
+	const TQString& highscoreGroup() const;
+
+protected:
+	/**
+	 * @return A groupname to be used in KConfig. Used internally to
+	 * prefix the value from highscoreGroup() with "KHighscore_"
+	 **/
+	TQString group() const;
+
+	/**
+	 * @return A pointer to the KConfig object to be used. This is
+	 * either kapp->config() (default) or a KSimpleConfig object for
+         * a system-wide highscore file.
+	 **/
+	KConfig* config() const;
+
+        void init(bool forceLocal);
+
+private:
+	KHighscorePrivate* d;
+
+        static KFileLock *_lock; // lock on system-wide highscore file
+        static KRawConfig *_config; // config for system-wide highscore file
+};
+
+#endif
diff --git a/libtdegames/highscore/kscoredialog.cpp b/libtdegames/highscore/kscoredialog.cpp
new file mode 100644
index 00000000..e799883b
--- /dev/null
+++ b/libtdegames/highscore/kscoredialog.cpp
@@ -0,0 +1,411 @@
+/****************************************************************
+Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
+Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software
+and its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of the author not be used in
+advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+The author disclaim all warranties with regard to this
+software, including all implied warranties of merchantability
+and fitness.  In no event shall the author be liable for any
+special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether
+in an action of contract, negligence or other tortious action,
+arising out of or in connection with the use or performance of
+this software.
+****************************************************************/
+
+#include "config.h"
+
+#include <tqlabel.h>
+#include <tqlayout.h>
+#include <tqlineedit.h>
+#include <tqwidgetstack.h>
+#include <tqtimer.h>
+#include <tqevent.h>
+#include <tqptrvector.h>
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kseparator.h>
+
+#include "kscoredialog.h"
+
+class KScoreDialog::KScoreDialogPrivate
+{ 
+public:  
+   TQPtrList<FieldInfo> scores;
+   TQWidget *page;
+   TQGridLayout *tqlayout;
+   TQLineEdit *edit;
+   TQPtrVector<TQWidgetStack> stack;
+   TQPtrVector<TQLabel> labels;
+   TQLabel *commentLabel;
+   TQString comment;
+   int fields;
+   int newName;
+   int latest;
+   int nrCols;
+   bool loaded;
+   TQString configGroup;
+   
+   TQMap<int, int> col;
+   TQMap<int, TQString> header;
+   TQMap<int, TQString> key;
+   TQString player;
+};
+
+
+KScoreDialog::KScoreDialog(int fields, TQWidget *parent, const char *oname)
+        : KDialogBase(parent, oname, true, i18n("High Scores"), Ok, Ok, true)
+{
+   d = new KScoreDialogPrivate();
+   d->edit = 0;
+   d->fields = fields;
+   d->newName = -1;
+   d->latest = -1;
+   d->loaded = false;
+   d->nrCols = 0;
+   d->configGroup = "High Score";
+   
+   d->scores.setAutoDelete(true);
+   d->header[Name] = i18n("Name");
+   d->key[Name] = "Name";
+   
+   d->header[Date] = i18n("Date");
+   d->key[Date] = "Date";
+   
+   d->header[Level] = i18n("Level");
+   d->key[Level] = "Level";
+   
+   d->header[Score] = i18n("Score");
+   d->key[Score] = "Score";
+   d->page = makeMainWidget();
+   
+   connect(this, TQT_SIGNAL(okClicked()), TQT_SLOT(slotGotName()));
+}
+
+KScoreDialog::~KScoreDialog()
+{
+   delete d;
+}
+
+void KScoreDialog::setConfigGroup(const TQString &group)
+{
+   d->configGroup = group;
+   d->loaded = false;
+}
+
+void KScoreDialog::setComment(const TQString &comment)
+{
+   d->comment = comment;
+}
+
+void KScoreDialog::addField(int field, const TQString &header, const TQString &key)
+{
+   d->fields |= field;
+   d->header[field] = header;
+   d->key[field] = key;
+}
+
+void KScoreDialog::setupDialog()
+{
+   d->nrCols = 1;
+   
+   for(int field = 1; field < d->fields; field = field * 2)
+   {
+      if (d->fields & field)
+         d->col[field] = d->nrCols++;
+   }
+      
+   d->tqlayout = new TQGridLayout(d->page, 15, d->nrCols, marginHint() + 20, spacingHint());
+   d->tqlayout->addRowSpacing(4, 15);
+
+   d->commentLabel = new TQLabel(d->page);
+   d->commentLabel->tqsetAlignment(AlignVCenter | AlignHCenter);
+   d->tqlayout->addMultiCellWidget(d->commentLabel, 1, 1, 0, d->nrCols-1);
+
+   TQFont bold = font();
+   bold.setBold(true);
+
+   TQLabel *label;
+   d->tqlayout->addColSpacing(0, 50);
+   label = new TQLabel(i18n("Rank"), d->page);
+   d->tqlayout->addWidget(label, 3, 0);
+   label->setFont(bold);
+
+   for(int field = 1; field < d->fields; field = field * 2)
+   {
+      if (d->fields & field)
+      {
+         d->tqlayout->addColSpacing(d->col[field], 50);
+
+         label = new TQLabel(d->header[field], d->page);
+         d->tqlayout->addWidget(label, 3, d->col[field], field <= Name ? AlignLeft : AlignRight);
+         label->setFont(bold);
+      }
+   }
+
+   KSeparator *sep = new KSeparator(Qt::Horizontal, d->page);
+   d->tqlayout->addMultiCellWidget(sep, 4, 4, 0, d->nrCols-1);
+
+   d->labels.resize(d->nrCols * 10);
+   d->stack.resize(10);
+
+   TQString num;
+   for (int i = 1; i <= 10; ++i) {
+      TQLabel *label;
+      num.setNum(i);
+      label = new TQLabel(i18n("#%1").tqarg(num), d->page);
+      d->labels.insert((i-1)*d->nrCols + 0, label);
+      d->tqlayout->addWidget(label, i+4, 0);
+      if (d->fields & Name)
+      {
+         TQWidgetStack *stack = new TQWidgetStack(d->page);
+         d->stack.insert(i-1, stack);
+         d->tqlayout->addWidget(stack, i+4, d->col[Name]);
+         label = new TQLabel(d->page);
+         d->labels.insert((i-1)*d->nrCols + d->col[Name], label);
+         stack->addWidget(label);
+         stack->raiseWidget(label);
+      }
+      for(int field = Name * 2; field < d->fields; field = field * 2)
+      {
+         if (d->fields & field)
+         {
+           label = new TQLabel(d->page);
+           d->labels.insert((i-1)*d->nrCols + d->col[field], label);
+           d->tqlayout->addWidget(label, i+4, d->col[field], AlignRight);
+         }
+      }
+   }
+}
+
+void KScoreDialog::aboutToShow()
+{
+   if (!d->loaded)
+      loadScores();
+      
+   if (!d->nrCols)
+      setupDialog();
+
+   d->commentLabel->setText(d->comment);
+   if (d->comment.isEmpty())
+   {
+      d->commentLabel->setMinimumSize(TQSize(1,1));
+      d->commentLabel->hide();    
+      d->tqlayout->addRowSpacing(0, -15);
+      d->tqlayout->addRowSpacing(2, -15);
+   } 
+   else
+   {
+      d->commentLabel->setMinimumSize(d->commentLabel->tqsizeHint());
+      d->commentLabel->show();
+      d->tqlayout->addRowSpacing(0, -10);
+      d->tqlayout->addRowSpacing(2, 10);
+   }
+   d->comment = TQString();
+
+   TQFont normal = font();
+   TQFont bold = normal;
+   bold.setBold(true);
+
+   TQString num;
+   for (int i = 1; i <= 10; ++i) {
+      TQLabel *label;
+      num.setNum(i);
+      FieldInfo *score = d->scores.at(i-1);
+      label = d->labels[(i-1)*d->nrCols + 0];
+      if (i == d->latest) 
+         label->setFont(bold);
+      else
+         label->setFont(normal);
+
+      if (d->fields & Name)
+      {
+         if (d->newName == i)
+         {
+           TQWidgetStack *stack = d->stack[i-1];
+           d->edit = new TQLineEdit(d->player, stack);
+           d->edit->setMinimumWidth(40);
+           stack->addWidget(d->edit);
+           stack->raiseWidget(d->edit);
+           d->edit->setFocus();
+           connect(d->edit, TQT_SIGNAL(returnPressed()), 
+                 this, TQT_SLOT(slotGotReturn()));
+         }
+         else
+         {
+           label = d->labels[(i-1)*d->nrCols + d->col[Name]];
+           if (i == d->latest) 
+             label->setFont(bold);
+           else
+             label->setFont(normal);
+           label->setText((*score)[Name]);
+         }
+         
+      }
+      for(int field = Name * 2; field < d->fields; field = field * 2)
+      {
+         if (d->fields & field)
+         {
+           label = d->labels[(i-1)*d->nrCols + d->col[field]];
+           if (i == d->latest) 
+             label->setFont(bold);
+           else
+             label->setFont(normal);
+           label->setText((*score)[field]);
+         }
+      }
+   }
+   d->latest = -1;
+   setFixedSize(tqminimumSizeHint());
+}
+
+void KScoreDialog::loadScores()
+{
+   TQString key, value;
+   d->loaded = true;
+   d->scores.clear();
+   KConfigGroup config(kapp->config(), d->configGroup.utf8());
+
+   d->player = config.readEntry("LastPlayer");
+
+   TQString num;
+   for (int i = 1; i <= 10; ++i) {
+      num.setNum(i);
+      FieldInfo *score = new FieldInfo();
+      for(int field = 1; field < d->fields; field = field * 2)
+      {
+         if (d->fields & field)
+         {
+            key = "Pos" + num + d->key[field];
+            (*score)[field] = config.readEntry(key, "-");
+         }
+      }
+      d->scores.append(score);
+   }
+}
+
+void KScoreDialog::saveScores()
+{
+   TQString key, value;
+   KConfigGroup config(kapp->config(), d->configGroup.utf8());
+
+   config.writeEntry("LastPlayer", d->player);
+
+   TQString num;
+   for (int i = 1; i <= 10; ++i) {
+      num.setNum(i);
+      FieldInfo *score = d->scores.at(i-1);
+      for(int field = 1; field < d->fields; field = field * 2)
+      {
+         if (d->fields & field)
+         {
+            key = "Pos" + num + d->key[field];
+            config.writeEntry(key, (*score)[field]);
+         }
+      }
+   }
+   kapp->config()->sync();
+}
+
+int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName)
+{
+   return addScore(newScore, newInfo, askName, false);
+}
+
+int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore)
+{
+   if (!d->loaded)
+      loadScores();
+   FieldInfo *score = d->scores.first();
+   int i = 1;
+   for(; score; score = d->scores.next(), i++)
+   {
+      bool ok;
+      int num_score = (*score)[Score].toLong(&ok);
+      if (lessIsMore && !ok)
+         num_score = 1 << 30;
+      if (((newScore > num_score) && !lessIsMore) ||
+          ((newScore < num_score) && lessIsMore))
+      {
+        score = new FieldInfo(newInfo);
+        (*score)[Score].setNum(newScore);
+        d->scores.insert(i-1, score);
+        d->scores.remove(10);
+        d->latest = i;
+        if (askName)
+          d->newName = i;
+        else
+          saveScores();
+        if (i == 1)
+          d->comment = i18n("Excellent!\nYou have a new high score!");
+        else
+          d->comment = i18n("Well done!\nYou made it to the high score list!");
+        return i;
+      }
+   }
+   return 0;
+}
+
+void KScoreDialog::show()
+{
+   aboutToShow();
+   KDialogBase::show();
+}
+
+void KScoreDialog::slotGotReturn()
+{
+   TQTimer::singleShot(0, this, TQT_SLOT(slotGotName()));
+}
+
+void KScoreDialog::slotGotName()
+{
+   if (d->newName == -1) return;
+   
+   d->player = d->edit->text();
+   
+   (*d->scores.at(d->newName-1))[Name] = d->player;
+   saveScores();
+
+   TQFont bold = font();
+   bold.setBold(true);
+   
+   TQLabel *label = d->labels[(d->newName-1)*d->nrCols + d->col[Name]];
+   label->setFont(bold);
+   label->setText(d->player);
+   d->stack[(d->newName-1)]->raiseWidget(label);
+   delete d->edit;
+   d->edit = 0;
+   d->newName = -1;
+}
+
+int KScoreDialog::highScore()
+{
+   if (!d->loaded)
+      loadScores();
+
+   return (*d->scores.first())[Score].toInt();
+}
+
+void KScoreDialog::keyPressEvent( TQKeyEvent *ev)
+{
+   if ((d->newName != -1) && (ev->key() == Key_Return))
+   {
+       ev->ignore();
+       return;
+   }
+   KDialogBase::keyPressEvent(ev);
+}
+
+
+#include "kscoredialog.moc"
diff --git a/libtdegames/highscore/kscoredialog.h b/libtdegames/highscore/kscoredialog.h
new file mode 100644
index 00000000..99a9f70b
--- /dev/null
+++ b/libtdegames/highscore/kscoredialog.h
@@ -0,0 +1,126 @@
+/****************************************************************
+Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
+Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software
+and its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of the author not be used in
+advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+The author disclaim all warranties with regard to this
+software, including all implied warranties of merchantability
+and fitness.  In no event shall the author be liable for any
+special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether
+in an action of contract, negligence or other tortious action,
+arising out of or in connection with the use or performance of
+this software.
+****************************************************************/
+
+#ifndef KSCOREDIALOG_H
+#define KSCOREDIALOG_H
+
+#include <tqmap.h>
+#include <tqptrlist.h>
+
+#include <kdialogbase.h>
+#include <kdemacros.h>
+class TQGridLayout;
+class TQLineEdit;
+class TQWidgetStack;
+
+/**
+ * A simple high score dialog.
+ */
+class KDE_EXPORT KScoreDialog : public KDialogBase {
+   Q_OBJECT
+  TQ_OBJECT
+   
+public:
+   enum Fields { Name = 1 << 0, 
+                 Level = 1 << 1, 
+                 
+                 Custom1 = 1 << 10,
+                 Custom2 = 1 << 11,
+                 Custom3 = 1 << 12,   	
+                 
+                 Date = 1 << 27, 
+                 Time = 1 << 28, 
+                 Score = 1 << 29 };
+        
+   typedef TQMap<int, TQString> FieldInfo;
+
+   /**
+    * @param fields Which fields should be listed.
+    * @param parent passed to parent TQWidget constructor
+    * @param name passed to parent TQWidget constructor
+    */
+   KScoreDialog(int fields, TQWidget *parent=0, const char *name=0);
+
+   ~KScoreDialog();
+
+   /**
+    * @param group to use for reading/writing highscores from/to. By default
+    * the class will use "High Score"
+    */
+   void setConfigGroup(const TQString &group);
+
+   /**
+    * @param comment to add when showing high-scores.
+    * The comment is only used once.  
+    */
+   void setComment(const TQString &comment);
+
+   /**
+    * Define an extra FieldInfo entry.
+    * @param field Id of this field
+    * @param header Header shown in the dialog for this field
+    * @param key used to store this field with.
+    */
+   void addField(int field, const TQString &header, const TQString &key); 
+
+   /**
+    * Adds a new score to the list.
+    *
+    * @param newScore the score of this game.
+    * @param newInfo additional info about the score.
+    * @param askName Whether to prompt for the players name.
+    * @param lessIsMore If true, the lowest score is the best score.
+    *
+    * @returns The highscore position if the score was good enough to 
+    * make it into the list (1 being topscore) or 0 otherwise.
+    */   
+   int addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore);
+   int addScore(int newScore, const FieldInfo &newInfo, bool askName=true);
+
+   /**
+    * Returns the current best score.
+    */
+   int highScore();
+
+   virtual void show();
+
+private slots:
+   void slotGotReturn();
+   void slotGotName();
+
+private:
+   /* read scores */
+   void loadScores();   
+   void saveScores();
+   
+   void aboutToShow();
+   void setupDialog();
+   void keyPressEvent( TQKeyEvent *ev);
+
+private:           
+   class KScoreDialogPrivate;
+   KScoreDialogPrivate *d;
+};
+
+#endif // !KSCOREDIALOG_H
diff --git a/libtdegames/kcanvasrootpixmap.cpp b/libtdegames/kcanvasrootpixmap.cpp
new file mode 100644
index 00000000..20440458
--- /dev/null
+++ b/libtdegames/kcanvasrootpixmap.cpp
@@ -0,0 +1,39 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kcanvasrootpixmap.h"
+
+#include <tqcanvas.h>
+
+
+KCanvasRootPixmap::KCanvasRootPixmap(TQCanvasView *view, const char *name)
+    : KRootPixmap(view, name), _view(view)
+{
+    setCustomPainting(true);
+    connect(this, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)),
+            TQT_SLOT(backgroundUpdatedSlot(const TQPixmap &)));
+}
+
+void KCanvasRootPixmap::backgroundUpdatedSlot(const TQPixmap &pixmap)
+{
+    if ( _view && _view->canvas() )
+        _view->canvas()->tqsetBackgroundPixmap(pixmap);
+}
+
+#include "kcanvasrootpixmap.moc"
diff --git a/libtdegames/kcanvasrootpixmap.h b/libtdegames/kcanvasrootpixmap.h
new file mode 100644
index 00000000..91dfa8bd
--- /dev/null
+++ b/libtdegames/kcanvasrootpixmap.h
@@ -0,0 +1,62 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KCANVASROOTPIXMAP_H
+#define KCANVASROOTPIXMAP_H
+
+#include <krootpixmap.h>
+#include <kdemacros.h>
+
+class TQCanvasView;
+
+/**
+ * Implement KRootPixmap for a TQCanvasView.
+ *
+ * The pixmap will be set as the background of the
+ * TQCanvas associated with the view :
+ * <ul>
+ * <li>for correct positioning of the background pixmap, the given
+ * TQCanvasView should be positioned at the origin of the canvas.</li>
+ * <li>no other view of the same canvas should use KCanvasRootPixmap.</li>
+ * <li>other views of the canvas will have the same background pixmap.</li>
+ * </ul>
+ */
+class KDE_EXPORT KCanvasRootPixmap : public KRootPixmap
+{
+ Q_OBJECT
+  TQ_OBJECT
+
+ public:
+    /**
+     * Constructor.
+     */
+    KCanvasRootPixmap(TQCanvasView *view, const char *name = 0);
+
+ private slots:
+    void backgroundUpdatedSlot(const TQPixmap &);
+
+ private:
+    TQCanvasView *_view;
+
+    class KCanvasRootPixmapPrivate;
+    KCanvasRootPixmapPrivate *d;
+};
+
+#endif
+
diff --git a/libtdegames/kcarddialog.cpp b/libtdegames/kcarddialog.cpp
new file mode 100644
index 00000000..fc73de22
--- /dev/null
+++ b/libtdegames/kcarddialog.cpp
@@ -0,0 +1,808 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2000 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include <stdio.h>
+#include <assert.h>
+
+#include <tqgroupbox.h>
+#include <tqlabel.h>
+#include <tqcheckbox.h>
+#include <tqlayout.h>
+#include <tqtooltip.h>
+#include <tqslider.h>
+#include <tqwmatrix.h>
+
+#include <kapplication.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kiconview.h>
+#include <ksimpleconfig.h>
+
+#include "kcarddialog.h"
+#include <tqpushbutton.h>
+#include <kdebug.h>
+
+#define KCARD_DEFAULTDECK TQString::tqfromLatin1("deck0.png")
+#define KCARD_DEFAULTCARD TQString::tqfromLatin1("11.png")
+#define KCARD_DEFAULTCARDDIR TQString::tqfromLatin1("cards-default/")
+
+// values for the resize slider
+#define SLIDER_MIN 400
+#define SLIDER_MAX 3000
+
+// KConfig entries
+#define CONF_GROUP "KCardDialog"
+#define CONF_RANDOMDECK TQString::tqfromLatin1("RandomDeck")
+#define CONF_DECK TQString::tqfromLatin1("Deck")
+#define CONF_CARDDIR TQString::tqfromLatin1("CardDir")
+#define CONF_RANDOMCARDDIR TQString::tqfromLatin1("RandomCardDir")
+#define CONF_USEGLOBALDECK TQString::tqfromLatin1("GlobalDeck")
+#define CONF_USEGLOBALCARDDIR TQString::tqfromLatin1("GlobalCardDir")
+#define CONF_SCALE TQString::tqfromLatin1("Scale")
+
+#define CONF_GLOBAL_GROUP TQString::tqfromLatin1("KCardDialog Settings")
+#define CONF_GLOBAL_DECK TQString::tqfromLatin1("GlobalDeck")
+#define CONF_GLOBAL_CARDDIR TQString::tqfromLatin1("GlobalCardDir")
+#define CONF_GLOBAL_RANDOMDECK TQString::tqfromLatin1("GlobalRandomDeck")
+#define CONF_GLOBAL_RANDOMCARDDIR TQString::tqfromLatin1("GlobalRandomCardDir")
+
+
+class KCardDialogPrivate
+{
+public:
+    KCardDialogPrivate()
+    {
+       deckLabel = 0;
+       cardLabel = 0;
+       deckIconView = 0;
+       cardIconView = 0;
+       randomDeck = 0;
+       randomCardDir = 0;
+       cPreview = 0;
+       scaleSlider = 0;
+       globalDeck = 0;
+       globalCardDir = 0;
+
+       cScale = 1;
+    }
+
+    TQLabel* deckLabel;
+    TQLabel* cardLabel;
+    KIconView* deckIconView;
+    KIconView* cardIconView;
+    TQCheckBox* randomDeck;
+    TQCheckBox* randomCardDir;
+    TQCheckBox* globalDeck;
+    TQCheckBox* globalCardDir;
+
+    TQSlider* scaleSlider;
+    TQPixmap cPreviewPix;
+    TQLabel* cPreview;
+
+    TQMap<TQIconViewItem*, TQString> deckMap;
+    TQMap<TQIconViewItem*, TQString> cardMap;
+    TQMap<TQString, TQString> helpMap;
+
+    //set query variables
+    KCardDialog::CardFlags cFlags;
+    TQString cDeck;
+    TQString cCardDir;
+    double cScale;
+};
+
+int KCardDialog::getCardDeck(TQString &pDeck, TQString &pCardDir, TQWidget *pParent,
+                             CardFlags pFlags, bool* pRandomDeck, bool* pRandomCardDir,
+			     double* pScale, KConfig* pConf)
+{
+    KCardDialog dlg(pParent, "dlg", pFlags);
+
+    dlg.setDeck(pDeck);
+    dlg.setCardDir(pCardDir);
+
+    dlg.setupDialog(pScale != 0);
+    dlg.loadConfig(pConf);
+    dlg.showRandomDeckBox(pRandomDeck != 0);
+    dlg.showRandomCardDirBox(pRandomCardDir != 0);
+    int result=dlg.exec();
+    if (result==TQDialog::Accepted)
+    {
+    // TODO check for global cards/decks!!!!
+        pDeck=dlg.deck();
+        pCardDir=dlg.cardDir();
+        if (!pCardDir.isNull() && pCardDir.right(1)!=TQString::tqfromLatin1("/"))
+        {
+            pCardDir+=TQString::tqfromLatin1("/");
+        }
+        if (pRandomDeck)
+        {
+            *pRandomDeck = dlg.isRandomDeck();
+        }
+        if (pRandomCardDir)
+        {
+            *pRandomCardDir = dlg.isRandomCardDir();
+        }
+	if (pScale)
+	{
+            *pScale = dlg.cardScale();
+	}
+
+        if (dlg.isGlobalDeck())
+	{
+	    kdDebug(11000) << "use global deck" << endl;
+	    bool random;
+	    getGlobalDeck(pDeck, random);
+	    kdDebug(11000) << "use: " << pDeck<< endl;
+	    if (pRandomDeck)
+	    {
+	        *pRandomDeck=random;
+		if (random)
+	        kdDebug(11000) << "use random deck" << endl;
+	    }
+	}
+        if (dlg.isGlobalCardDir())
+	{
+	    kdDebug(11000) << "use global carddir" << endl;
+	    bool random;
+	    getGlobalCardDir(pCardDir, random);
+	    kdDebug(11000) << "use: " << pCardDir << endl;
+	    if (pRandomCardDir)
+	    {
+	        *pRandomCardDir=random;
+		if (random)
+	        kdDebug(11000) << "use random carddir" << endl;
+	    }
+	}
+    }
+    dlg.saveConfig(pConf);
+    return result;
+}
+
+void KCardDialog::getConfigCardDeck(KConfig* conf, TQString &pDeck, TQString &pCardDir, double& pScale)
+{
+// TODO check for global cards/decks!!!!
+ if (!conf) {
+	return;
+ }
+ TQString origGroup = conf->group();
+
+ conf->setGroup(CONF_GROUP);
+ if (conf->readBoolEntry(CONF_RANDOMDECK) || !conf->hasKey(CONF_DECK)) {
+	pDeck = getRandomDeck();
+ } else {
+	pDeck = conf->readEntry(CONF_DECK);
+ }
+ if (conf->readBoolEntry(CONF_RANDOMCARDDIR) || !conf->hasKey(CONF_CARDDIR)) {
+	pCardDir = getRandomCardDir();
+ } else {
+	pCardDir = conf->readPathEntry(CONF_CARDDIR);
+ }
+ pScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
+
+ if (conf->readBoolEntry(CONF_USEGLOBALDECK, false)) {
+	bool random;
+	getGlobalDeck(pCardDir, random);
+	if (random || pDeck.isNull() ) {
+		pDeck = getRandomDeck();
+	}
+ }
+ if (conf->readBoolEntry(CONF_USEGLOBALCARDDIR, false)) {
+	bool random;
+	getGlobalCardDir(pCardDir, random);
+	if (random || pCardDir.isNull() ) {
+		pCardDir = getRandomCardDir();
+	}
+ }
+
+ conf->setGroup(origGroup);
+}
+
+TQString KCardDialog::getDefaultDeck()
+{
+    KCardDialog::init();
+    return locate("cards", TQString::tqfromLatin1("decks/") + KCARD_DEFAULTDECK);
+}
+
+TQString KCardDialog::getDefaultCardDir()
+{
+    KCardDialog::init();
+
+    TQString file = KCARD_DEFAULTCARDDIR + KCARD_DEFAULTCARD;
+    return KGlobal::dirs()->findResourceDir("cards",file) + KCARD_DEFAULTCARDDIR;
+}
+
+TQString KCardDialog::getCardPath(const TQString &carddir, int index)
+{
+    KCardDialog::init();
+
+    TQString entry = carddir + TQString::number(index);
+    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
+        return entry + TQString::tqfromLatin1(".png");
+
+    // rather theoretical
+    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
+        return entry + TQString::tqfromLatin1(".xpm");
+
+    return TQString();
+}
+
+const TQString& KCardDialog::deck() const { return d->cDeck; }
+void KCardDialog::setDeck(const TQString& file) { d->cDeck=file; }
+const TQString& KCardDialog::cardDir() const { return d->cCardDir; }
+void KCardDialog::setCardDir(const TQString& dir) { d->cCardDir=dir; }
+KCardDialog::CardFlags KCardDialog::flags() const { return d->cFlags; }
+double KCardDialog::cardScale() const { return d->cScale; }
+bool KCardDialog::isRandomDeck() const
+{ return (d->randomDeck ? d->randomDeck->isChecked() : false); }
+bool KCardDialog::isRandomCardDir() const
+{ return (d->randomCardDir ? d->randomCardDir->isChecked() : false); }
+bool KCardDialog::isGlobalDeck() const
+{ return (d->globalDeck ? d->globalDeck->isChecked() : false); }
+bool KCardDialog::isGlobalCardDir() const
+{ return (d->globalCardDir ? d->globalCardDir->isChecked() : false); }
+
+void KCardDialog::setupDialog(bool showResizeBox)
+{
+  TQHBoxLayout* topLayout = new TQHBoxLayout(plainPage(), spacingHint());
+  TQVBoxLayout* cardLayout = new TQVBoxLayout(topLayout);
+  TQString path, file;
+  TQWMatrix m;
+  m.scale(0.8,0.8);
+
+  setInitialSize(TQSize(600,400));
+
+  if (! (flags() & NoDeck))
+  {
+    TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
+
+    // Deck iconview
+    TQGroupBox* grp1 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Backside"), plainPage());
+    tqlayout->addWidget(grp1);
+
+    d->deckIconView = new KIconView(grp1,"decks");
+    d->deckIconView->setSpacing(8);
+    /*
+    deckIconView->setGridX(-1);
+    deckIconView->setGridY(50);
+    */
+    d->deckIconView->setGridX(82);
+    d->deckIconView->setGridY(106);
+    d->deckIconView->setSelectionMode(TQIconView::Single);
+    d->deckIconView->setResizeMode(TQIconView::Adjust);
+    d->deckIconView->setMinimumWidth(360);
+    d->deckIconView->setMinimumHeight(170);
+    d->deckIconView->setWordWrapIconText(false);
+    d->deckIconView->showToolTips();
+
+    // deck select
+    TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
+    TQGroupBox* grp3 = new TQGroupBox(i18n("Backside"), plainPage());
+    grp3->setFixedSize(100, 130);
+    l->addWidget(grp3, 0, AlignTop|AlignHCenter);
+    d->deckLabel = new TQLabel(grp3);
+    d->deckLabel->setText(i18n("empty"));
+    d->deckLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
+    d->deckLabel->setGeometry(10, 20, 80, 90);
+
+    d->randomDeck = new TQCheckBox(plainPage());
+    d->randomDeck->setChecked(false);
+    connect(d->randomDeck, TQT_SIGNAL(toggled(bool)), this,
+            TQT_SLOT(slotRandomDeckToggled(bool)));
+    d->randomDeck->setText(i18n("Random backside"));
+    l->addWidget(d->randomDeck, 0, AlignTop|AlignHCenter);
+
+    d->globalDeck = new TQCheckBox(plainPage());
+    d->globalDeck->setChecked(false);
+    d->globalDeck->setText(i18n("Use global backside"));
+    l->addWidget(d->globalDeck, 0, AlignTop|AlignHCenter);
+
+    TQPushButton* b = new TQPushButton(i18n("Make Backside Global"), plainPage());
+    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalDeck()));
+    l->addWidget(b, 0, AlignTop|AlignHCenter);
+
+    connect(d->deckIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
+            this,TQT_SLOT(slotDeckClicked(TQIconViewItem *)));
+  }
+
+  if (! (flags() & NoCards))
+  {
+    // Cards iconview
+    TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
+    TQGroupBox* grp2 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Frontside"), plainPage());
+    tqlayout->addWidget(grp2);
+
+    d->cardIconView =new KIconView(grp2,"cards");
+    /*
+    cardIconView->setGridX(36);
+    cardIconView->setGridY(50);
+    */
+    d->cardIconView->setGridX(82);
+    d->cardIconView->setGridY(106);
+    d->cardIconView->setResizeMode(TQIconView::Adjust);
+    d->cardIconView->setMinimumWidth(360);
+    d->cardIconView->setMinimumHeight(170);
+    d->cardIconView->setWordWrapIconText(false);
+    d->cardIconView->showToolTips();
+
+    // Card select
+    TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
+    TQGroupBox* grp4 = new TQGroupBox(i18n("Frontside"), plainPage());
+    grp4->setFixedSize(100, 130);
+    l->addWidget(grp4, 0, AlignTop|AlignHCenter);
+    d->cardLabel = new TQLabel(grp4);
+    d->cardLabel->setText(i18n("empty"));
+    d->cardLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
+    d->cardLabel->setGeometry(10, 20, 80, 90 );
+
+    d->randomCardDir = new TQCheckBox(plainPage());
+    d->randomCardDir->setChecked(false);
+    connect(d->randomCardDir, TQT_SIGNAL(toggled(bool)), this,
+            TQT_SLOT(slotRandomCardDirToggled(bool)));
+    d->randomCardDir->setText(i18n("Random frontside"));
+    l->addWidget(d->randomCardDir, 0, AlignTop|AlignHCenter);
+
+    d->globalCardDir = new TQCheckBox(plainPage());
+    d->globalCardDir->setChecked(false);
+    d->globalCardDir->setText(i18n("Use global frontside"));
+    l->addWidget(d->globalCardDir, 0, AlignTop|AlignHCenter);
+
+    TQPushButton* b = new TQPushButton(i18n("Make Frontside Global"), plainPage());
+    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalCardDir()));
+    l->addWidget(b, 0, AlignTop|AlignHCenter);
+
+    connect(d->cardIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
+            this,TQT_SLOT(slotCardClicked(TQIconViewItem *)));
+  }
+
+  // Insert deck icons
+  // First find the default or alternate path
+  if (! (flags() & NoDeck))
+  {
+      insertDeckIcons();
+      d->deckIconView->arrangeItemsInGrid();
+
+      // Set default icons if given
+      if (!deck().isNull())
+      {
+          file=deck();
+          TQPixmap pixmap(file);
+          pixmap=pixmap.xForm(m);
+          d->deckLabel->setPixmap(pixmap);
+          TQToolTip::add(d->deckLabel,d->helpMap[file]);
+      }
+  }
+
+  // Insert card icons
+  if (! (flags() & NoCards))
+  {
+      insertCardIcons();
+      d->cardIconView->arrangeItemsInGrid();
+
+    // Set default icons if given
+    if (!cardDir().isNull())
+    {
+        file = cardDir() + KCARD_DEFAULTCARD;
+        TQPixmap pixmap(file);
+        pixmap = pixmap.xForm(m);
+        d->cardLabel->setPixmap(pixmap);
+        TQToolTip::add(d->cardLabel,d->helpMap[cardDir()]);
+    }
+  }
+
+  // insert resize box
+  if (showResizeBox)
+  {
+    // this part is a little bit...tricky.
+    // i'm sure there is a cleaner way but i cannot find it.
+    // whenever the pixmap is resized (aka scaled) the box is resized, too. This
+    // leads to an always resizing dialog which is *very* ugly. i worked around
+    // this by using a TQWidget which is the only child widget of the group box.
+    // The other widget are managed inside this TQWidget - a stretch area on the
+    // right ensures that the KIconViews are not resized...
+
+    // note that the dialog is still resized if you you scale the pixmap very
+    // large. This is desired behaviour as i don't want to make the box even
+    // larger but i want the complete pixmap to be displayed. the dialog is not
+    // resized if you make the pixmap smaller again.
+    TQVBoxLayout* tqlayout = new TQVBoxLayout(topLayout);
+    TQGroupBox* grp = new TQGroupBox(1,Qt::Horizontal, i18n("Resize Cards"), plainPage());
+    tqlayout->setResizeMode(TQLayout::Fixed);
+    tqlayout->addWidget(grp);
+    TQWidget* box = new TQWidget(grp);
+    TQHBoxLayout* hbox = new TQHBoxLayout(box, 0, spacingHint());
+    TQVBoxLayout* boxLayout = new TQVBoxLayout(hbox);
+    hbox->addStretch(0);
+
+    d->scaleSlider = new TQSlider(1, SLIDER_MAX, 1, (-1000+SLIDER_MIN+SLIDER_MAX),Qt::Horizontal, box);
+    d->scaleSlider->setMinValue(SLIDER_MIN);
+    connect(d->scaleSlider, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotCardResized(int)));
+    boxLayout->addWidget(d->scaleSlider, 0, AlignLeft);
+
+    TQPushButton* b = new TQPushButton(i18n("Default Size"), box);
+    connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotDefaultSize()));
+    boxLayout->addWidget(b, 0, AlignLeft);
+
+    TQLabel* l = new TQLabel(i18n("Preview:"), box);
+    boxLayout->addWidget(l);
+    d->cPreviewPix.load(getDefaultDeck());
+    d->cPreview = new TQLabel(box);
+    boxLayout->addWidget(d->cPreview, 0, AlignCenter|AlignVCenter);
+
+    slotCardResized(d->scaleSlider->value());
+  }
+}
+
+void KCardDialog::insertCardIcons()
+{
+    TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop", false, true);
+    // kdDebug(11000) << "insert " << list.count() << endl;
+    if (list.isEmpty())
+        return;
+
+    // We shrink the icons a little
+    //
+    TQWMatrix m;
+    m.scale(0.8,0.8);
+
+    for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
+    {
+        KSimpleConfig cfg(*it);
+        cfg.setGroup(TQString::tqfromLatin1("KDE Backdeck"));
+        TQString path = (*it).left((*it).findRev('/') + 1);
+        assert(path[path.length() - 1] == '/');
+        TQPixmap pixmap(path + cfg.readEntry("Preview", "12c.png"));
+
+        if (pixmap.isNull())
+            continue;
+
+        TQString name=cfg.readEntry("Name", i18n("unnamed"));
+        TQIconViewItem *item= new TQIconViewItem(d->cardIconView, name, pixmap);
+
+        item->setDragEnabled(false);
+        item->setDropEnabled(false);
+        item->setRenameEnabled(false);
+        item->setSelectable(true);
+
+        d->cardMap[item] = path;
+        d->helpMap[path] = cfg.readEntry("Comment",name);
+    }
+}
+
+void KCardDialog::insertDeckIcons()
+{
+    TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop", false, true);
+    if (list.isEmpty())
+        return;
+
+    TQString label;
+
+    // We shrink the icons a little
+    TQWMatrix m;
+    m.scale(0.8,0.8);
+
+    for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
+    {
+        KSimpleConfig cfg(*it);
+        TQPixmap pixmap(getDeckName(*it));
+        if (pixmap.isNull())
+            continue;
+
+        // pixmap=pixmap.xForm(m);
+
+        cfg.setGroup(TQString::tqfromLatin1("KDE Cards"));
+        TQString name=cfg.readEntry("Name", i18n("unnamed"));
+        TQIconViewItem *item= new TQIconViewItem(d->deckIconView,name, pixmap);
+
+        item->setDragEnabled(false);
+        item->setDropEnabled(false);
+        item->setRenameEnabled(false);
+
+        d->deckMap[item] = getDeckName(*it);
+        d->helpMap[d->deckMap[item]] = cfg.readEntry("Comment",name);
+    }
+}
+
+
+KCardDialog::~KCardDialog()
+{
+ delete d;
+}
+
+
+// Create the dialog
+KCardDialog::KCardDialog( TQWidget *parent, const char *name, CardFlags mFlags)
+    : KDialogBase( Plain, i18n("Carddeck Selection"), Ok|Cancel, Ok, parent, name, true, true)
+{
+    KCardDialog::init();
+
+    d = new KCardDialogPrivate;
+    d->cFlags = mFlags;
+}
+
+void KCardDialog::slotDeckClicked(TQIconViewItem *item)
+{
+    if (item && item->pixmap())
+    {
+        d->deckLabel->setPixmap(* (item->pixmap()));
+        TQToolTip::remove( d->deckLabel );
+        TQToolTip::add(d->deckLabel,d->helpMap[d->deckMap[item]]);
+        setDeck(d->deckMap[item]);
+    }
+}
+void KCardDialog::slotCardClicked(TQIconViewItem *item)
+{
+    if (item && item->pixmap())
+    {
+        d->cardLabel->setPixmap(* (item->pixmap()));
+        TQString path = d->cardMap[item];
+        TQToolTip::remove( d->deckLabel );
+        TQToolTip::add(d->cardLabel,d->helpMap[path]);
+        setCardDir(path);
+    }
+}
+
+TQString KCardDialog::getDeckName(const TQString &desktop)
+{
+    TQString entry = desktop.left(desktop.length() - strlen(".desktop"));
+    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
+        return entry + TQString::tqfromLatin1(".png");
+
+    // rather theoretical
+    if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
+        return entry + TQString::tqfromLatin1(".xpm");
+    return TQString();
+}
+
+TQString KCardDialog::getRandomDeck()
+{
+    KCardDialog::init();
+
+    TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop");
+    if (list.isEmpty())
+        return TQString();
+
+    int d = KApplication::random() % list.count();
+    return getDeckName(*list.at(d));
+}
+
+TQString KCardDialog::getRandomCardDir()
+{
+    KCardDialog::init();
+
+    TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop");
+    if (list.isEmpty())
+        return TQString();
+
+    int d = KApplication::random() % list.count();
+    TQString entry = *list.at(d);
+    return entry.left(entry.length() - strlen("index.desktop"));
+}
+
+void KCardDialog::showRandomDeckBox(bool s)
+{
+    if (!d->randomDeck)
+	return;
+
+    if (s)
+        d->randomDeck->show();
+    else
+        d->randomDeck->hide();
+}
+
+void KCardDialog::showRandomCardDirBox(bool s)
+{
+    if (!d->randomCardDir)
+	return;
+
+    if (s)
+        d->randomCardDir->show();
+    else
+        d->randomCardDir->hide();
+}
+
+void KCardDialog::slotRandomDeckToggled(bool on)
+{
+  if (on) {
+    d->deckLabel->setText("random");
+    setDeck(getRandomDeck());
+  } else {
+    d->deckLabel->setText("empty");
+    setDeck(0);
+  }
+}
+
+void KCardDialog::slotRandomCardDirToggled(bool on)
+{
+  if (on) {
+      d->cardLabel->setText("random");
+      setCardDir(getRandomCardDir());
+      if (cardDir().length()>0 && cardDir().right(1)!=TQString::tqfromLatin1("/"))  {
+          setCardDir(cardDir() + TQString::tqfromLatin1("/"));
+      }
+  } else {
+      d->cardLabel->setText("empty");
+      setCardDir(0);
+  }
+}
+
+void KCardDialog::loadConfig(KConfig* conf)
+{
+ if (!conf) {
+	return;
+ }
+
+ TQString origGroup = conf->group();
+
+ conf->setGroup(CONF_GROUP);
+ if (! (flags() & NoDeck)) {
+	if (conf->hasKey(CONF_DECK)) {
+		setDeck(conf->readEntry(CONF_DECK));
+	}
+
+	bool random = conf->readBoolEntry(CONF_RANDOMDECK, false);
+	d->randomDeck->setChecked(random);
+	slotRandomDeckToggled(random);
+
+	if (conf->hasKey(CONF_USEGLOBALDECK) && conf->readBoolEntry(CONF_USEGLOBALDECK)) {
+		d->globalDeck->setChecked(true);
+	} else {
+		d->globalDeck->setChecked(false);
+	}
+ }
+ if (! (flags() & NoCards)) {
+	if (conf->hasKey(CONF_CARDDIR)) {
+		setCardDir(conf->readPathEntry(CONF_CARDDIR));
+	}
+
+	bool random = conf->readBoolEntry(CONF_RANDOMCARDDIR, false);
+	d->randomCardDir->setChecked(random);
+	slotRandomCardDirToggled(random);
+
+	if (conf->hasKey(CONF_USEGLOBALCARDDIR) && conf->readBoolEntry(CONF_USEGLOBALCARDDIR)) {
+		d->globalCardDir->setChecked(true);
+	} else {
+		d->globalCardDir->setChecked(false);
+	}
+ }
+
+ d->cScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
+
+ conf->setGroup(origGroup);
+}
+
+void KCardDialog::slotCardResized(int s)
+{
+ if (!d->cPreview) {
+	return;
+ }
+ if (s < SLIDER_MIN || s > SLIDER_MAX) {
+	kdError(11000) << "invalid scaling value!" << endl;
+	return;
+ }
+
+ s *= -1;
+ s += (SLIDER_MIN + SLIDER_MAX);
+
+ TQWMatrix m;
+ double scale = (double)1000/s;
+ m.scale(scale, scale);
+ TQPixmap pix = d->cPreviewPix.xForm(m);
+ d->cPreview->setPixmap(pix);
+ d->cScale = scale;
+}
+
+void KCardDialog::slotDefaultSize()
+{
+ if (!d->scaleSlider) {
+	return;
+ }
+ d->scaleSlider->setValue(-1000 + SLIDER_MIN + SLIDER_MAX);
+}
+
+void KCardDialog::saveConfig(KConfig* conf)
+{
+ if (!conf) {
+	return;
+ }
+ TQString origGroup = conf->group();
+
+ conf->setGroup(CONF_GROUP);
+ if (! (flags() & NoDeck)) {
+	conf->writeEntry(CONF_DECK, deck());
+	conf->writeEntry(CONF_RANDOMDECK, isRandomDeck());
+	conf->writeEntry(CONF_USEGLOBALDECK, d->globalDeck->isChecked());
+ }
+ if (! (flags() & NoCards)) {
+	conf->writePathEntry(CONF_CARDDIR, cardDir());
+	conf->writeEntry(CONF_RANDOMCARDDIR, isRandomCardDir());
+	conf->writeEntry(CONF_USEGLOBALCARDDIR, d->globalCardDir->isChecked());
+ }
+ conf->writeEntry(CONF_SCALE, d->cScale);
+
+ conf->setGroup(origGroup);
+}
+
+void KCardDialog::slotSetGlobalDeck()
+{
+ KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
+ conf->setGroup(CONF_GLOBAL_GROUP);
+
+ conf->writeEntry(CONF_GLOBAL_DECK, deck());
+ conf->writeEntry(CONF_GLOBAL_RANDOMDECK, isRandomDeck());
+
+ delete conf;
+}
+
+void KCardDialog::slotSetGlobalCardDir()
+{
+ KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
+ conf->setGroup(CONF_GLOBAL_GROUP);
+
+ conf->writePathEntry(CONF_GLOBAL_CARDDIR, cardDir());
+ conf->writeEntry(CONF_GLOBAL_RANDOMCARDDIR, isRandomCardDir());
+
+ delete conf;
+}
+
+void KCardDialog::getGlobalDeck(TQString& deck, bool& random)
+{
+ KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
+ conf->setGroup(CONF_GLOBAL_GROUP);
+
+ if (!conf->hasKey(CONF_GLOBAL_DECK) || conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false)) {
+	deck = getRandomDeck();
+	random = true;
+ } else {
+	deck = conf->readEntry(CONF_GLOBAL_DECK);
+	random = conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false);
+ }
+
+ delete conf;
+}
+
+void KCardDialog::getGlobalCardDir(TQString& dir, bool& random)
+{
+ KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
+ conf->setGroup(CONF_GLOBAL_GROUP);
+
+ if (!conf->hasKey(CONF_GLOBAL_CARDDIR) || conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false)) {
+	dir = getRandomCardDir();
+	random = true;
+ } else {
+	dir = conf->readPathEntry(CONF_GLOBAL_CARDDIR);
+	random = conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false);
+ }
+
+ delete conf;
+}
+
+void KCardDialog::init()
+{
+    static bool _inited = false;
+    if (_inited)
+        return;
+    KGlobal::dirs()->addResourceType("cards", KStandardDirs::kde_default("data") + TQString::tqfromLatin1("carddecks/"));
+
+    KGlobal::locale()->insertCatalogue("libtdegames");
+    _inited = true;
+}
+
+#include "kcarddialog.moc"
diff --git a/libtdegames/kcarddialog.h b/libtdegames/kcarddialog.h
new file mode 100644
index 00000000..c3a0f018
--- /dev/null
+++ b/libtdegames/kcarddialog.h
@@ -0,0 +1,346 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2000 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+#ifndef __KCARDDIALOG_H_
+#define __KCARDDIALOG_H_
+
+#include <tqstring.h>
+#include <kdialogbase.h>
+#include <tqmap.h> // TODO: remove - it is in kcarddialog.cpp now; left here for source compatibility
+
+#include <kdemacros.h>
+class TQIconViewItem;
+
+class KConfig;
+
+class KCardDialogPrivate;
+
+/**
+ * @short A carddeck selection dialog for card games.
+ *
+ * The KCardDialog provides a dialog for interactive carddeck selection.
+ * It gives cardgames an easy to use interface to select front and
+ * back of the card sets. As card sets the KDE default cardsets are
+ * offered as well as used specified ones.
+ *
+ * In most cases, the simplest
+ * use of this class is the static method KCardDialog::getCardDeck,
+ * which pops up the dialog, allows the user to select a carddeck, and
+ * returns when the dialog is closed. Only if you really need some specific
+ * behaviour or if you overwrite the dialog you need all the other access
+ * functions.
+ *
+ * Example:
+ *
+ * \code
+ *      TQString deck,card;
+ *      int result = KCardDialog::getCardDeck(deck,card );
+ *      if ( result == KCardDialog::Accepted )
+ *            ...
+ * \endcode
+ *
+ * Here you can see a card dialog in action
+ * @image html "kcarddialog.png" KCarddialog
+ *
+ * KCardDialog::getCardDeck takes a lot of different parameters which are
+ * probably very useful. You can e.g. use the parameters randomDeck and
+ * randomCardDir to give the end-user the ability to choose a random
+ * deck/carddir. You have to save the value of those parameters in your config
+ * file - that's why the parameters are needed. 
+ *
+ * You can also provide a KConfig pointer (usually kapp->config()). This
+ * pointer is used to store information about the dialog in an own group
+ * ("KCardDailog"). 
+ * So you can just ignore the randomCardDir and randomDeck
+ * values and call KCardDialog::getConfigCardDeck instead. The only reson
+ * for this function is to read a previously written configuration and give you
+ * the information about it. This way you don't have to save any configuration
+ * on your own - KCardDialog does this for you.
+ *
+ * Another Parameter for KCardDialog::getCardDeck is scale. This pointer
+ * to a double variable contains the scaling factor the user has chosen in the
+ * dialog (the scale box won't be shown if you don't provide this parameter).
+ * You might want to check out TQPixmap::xFrom which gives you access to
+ * scaling. You can e.g. use
+ * \code
+ * TQWMatrix m;
+ * m.scale(s,s);
+ * pixmap.xForm(m);
+ * \endcode
+ * to scale your pixmap.
+ *
+ * @author Martin Heni <martin@heni-online.de>
+ * @version $Id$
+ */
+class KDE_EXPORT KCardDialog : public KDialogBase
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+
+  /**
+   *  @li @p Both - both are shown
+   *  @li @p NoDeck - The deck (back) selection is not shown
+   *  @li @p NoCards - The cards (front) selection is not shown
+   */
+   enum CardFlags { Both=0, NoDeck=0x01, NoCards=0x02 };
+
+   /**
+   * Constructs a card deck selection dialog.
+   *
+   * @param parent The parent widget of the dialog, if any.
+   * @param name The name of the dialog.
+   * @param flags Specifies whether the dialog is modal or not.
+   */
+   KCardDialog (TQWidget* parent = NULL,const char* name = NULL,
+                CardFlags flags = Both);
+   /**
+   * Destructs a card deck selection dialog.
+   */
+   ~KCardDialog();
+
+   /**
+   * Creates a modal carddeck dialog, lets the user choose a deck,
+   * and returns when the dialog is closed.
+   *
+   * @param deck a reference to the filename used as backside of the
+   *        cards. It is an absolute path and can directly be loaded as
+   *        pixmap.
+   *
+   * @param carddir a reference to the directory name used as front of the
+   *        cards. The directory contains the card images as 1.png to 52.png
+   *
+   * @param parent an optional pointer to the parent window of the dialog
+   *
+   * @param flags what to show
+   *
+   * @param randomDeck if this pointer is non-zero, *ok is set to TRUE if
+   *        the user wants a random deck otherwise to FALSE. Use this in the
+   *        config file of your game to load a random deck on startup.
+   *        See @ref getRandomDeck()
+   *
+   * @param randomCardDir if this pointer is non-zero, *ok is set to TRUE if
+   *        the user wants a random card otherwise to FALSE.
+   *        Use this in the config file of your game to load a random card
+   *        foregrounds on startup.
+   *        See @ref getRandomCardDir()
+   *
+   * @param scale If non-zero a box is shown which provides the possibility to
+   *        change the size of the cards. The desired scaling factor is returned to the
+   *        game in this variable.
+   *
+   * @param conf If non-zero KCardDialog reads the initial settings for 
+   *        this dialog from the applications config file and stores them there
+   *        when the dialog is closed. You can just use getConfigCardDeck
+   *        to get the deck/carddir the user selected before. Note that the 
+   *        parameters randomDeck and randomCardDir overwrite the initial settings from the
+   *        config file.
+   *
+   * @return TQDialog::result().
+   */
+   static int getCardDeck(TQString &deck,TQString &carddir, TQWidget *parent=0,
+                          CardFlags flags=Both, bool* randomDeck=0,
+                          bool* randomCardDir=0, double* scale=0, KConfig* conf=0);
+
+   /**
+    * Read the configuration from the applications rc file and put the
+    * previously chosen deck/frontside in the parameter deck and carddir.
+    *
+    * You probably want to use this function on startup of your program so that
+    * the user gets exactly the card/frontside he/she chose before. Note that
+    * you don't have to care whether the user wants to get a random carddeck or
+    * not as this function takes care of this.
+    * @param conf The config file to read from
+    * @param deck This will contain the chosen deck from the config file (or a
+    * random deck if this is desired according to the config)
+    * @param cardDir This will contain the chosen cardDir from the config file (or a
+    * random cardDir if this is desired according to the config)
+    * @param scale The scaling factor (usually 1)
+    **/
+   static void getConfigCardDeck(KConfig* conf, TQString& deck, TQString& cardDir, double& scale);
+
+   /**
+   * Returns the default path to the card deck backsides. You want
+   * to use this usually before the user used the card dialog the first
+   * time to get a default deck. You can assume that
+   * \code
+   *   getDefaultDeckPath()
+   * \endcode
+   * is a valid deck.
+   *
+   * @return The default path
+   */
+   static TQString getDefaultDeck();
+
+   /**
+   * Returns the default path to the card frontsides. You want
+   * to use this usually before the user used the card dialog the first
+   * time to get an default deck. You can assume that
+   * \code
+   *   getCardPath(getDefaultCardPath(), *)
+   * \endcode
+   * are valid cards for * from 1 to 52.
+   *
+   * @return returns the path to the card directory
+   */
+   static TQString getDefaultCardDir();
+
+    /**
+    * Returns the path to the card frontside specified in dir carddir
+    *
+    * @param index the card to open
+    * @param carddir The carddir which's path shall be searched for
+    * @return returns the path to the card
+    */
+    static TQString getCardPath(const TQString &carddir, int index);
+
+   /**
+    * Returns a random deck in deckPath()
+    * @return A random deck
+    **/
+    static TQString getRandomDeck();
+
+   /**
+    * Returns a random directory of cards
+    * @return A random card dir
+    **/
+    static TQString getRandomCardDir();
+
+   /**
+    * Show or hides the "random backside" checkbox
+    * @param s Shows the checkbox if true otherwise hides it
+    **/
+   void showRandomDeckBox(bool s);
+
+   /**
+    * Show or hides the "random foreside" checkbox
+    * @param s Shows the checkbox if true otherwise hides it
+    **/
+   void showRandomCardDirBox(bool s);
+
+   /**
+   * Returns the chosen deck, which is a valid path to a imagefile.
+   *
+   * @return The deck
+   */
+   const TQString& deck() const;
+
+   /**
+   * Sets the default deck.
+   * @param file The full path to an image file
+   */
+   void setDeck(const TQString& file);
+
+   /**
+   * @return The chosen card directory
+   */
+   const TQString& cardDir() const;
+
+   /**
+   * Sets the default card directory.
+   * @param dir The full path to an card directory
+   */
+   void setCardDir(const TQString& dir);
+
+   /**
+   * @return the flags set to the dialog
+   */
+   CardFlags flags() const;
+
+   /**
+   * Creates the default widgets in the dialog. Must be called after
+   * all flags are set. This is only needed if you do NOT use the
+   * getCardDeck static function which provides all calls for you.
+   */
+   void setupDialog(bool showResizeBox = false);
+
+   /**
+    * @return TRUE if the selected deck is a random deck (i.e. the user checked
+    * the random checkbox) otherwise FALSE
+    **/
+   bool isRandomDeck() const;
+
+   /**
+    * @return TRUE if the selected carddir is a random dir (i.e. the user
+    * checked the random checkbox) otherwise FALSE
+    **/
+   bool isRandomCardDir() const;
+
+   /**
+    * @return TRUE if the global checkbox was selected
+    **/
+   bool isGlobalDeck() const;
+
+   /**
+    * @return TRUE if the global checkbox was selected
+    **/
+   bool isGlobalCardDir() const;
+
+   /**
+    * @return The scaling factor of the card pixmap
+    **/
+   double cardScale() const;
+
+   /**
+    * Load the default settings into the dialog (e.g. whether the "use random
+    * deck" checkbox is checked or not).
+    **/
+   void loadConfig(KConfig* conf);
+
+   /**
+    * Saves the KCardDialog config into a config file. This should be the
+    * applications config file - KCardDialog creates an own group
+    * ("KCardDialog"). These settings are used by @ref loadConfig and @ref
+    * getConfigCardDeck.
+    **/
+   void saveConfig(KConfig* conf);
+
+
+protected:
+    void insertCardIcons();
+    void insertDeckIcons();
+
+    static void getGlobalDeck(TQString& cardDir, bool& random);
+    static void getGlobalCardDir(TQString& deck, bool& random);
+
+    static TQString getDeckName(const TQString& desktop);
+
+    /**
+     * @return the groupname used by functions like @ref saveConfig and @ref
+     * loadConfig.
+     **/
+    static TQString group();
+
+protected slots:
+   void slotDeckClicked(TQIconViewItem *);
+   void slotCardClicked(TQIconViewItem *);
+   void slotRandomCardDirToggled(bool on);
+   void slotRandomDeckToggled(bool on);
+   void slotCardResized(int);
+   void slotDefaultSize();
+   void slotSetGlobalDeck();
+   void slotSetGlobalCardDir();
+
+private:
+   static void init();
+
+   KCardDialogPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kcarddialog.png b/libtdegames/kcarddialog.png
new file mode 100644
index 00000000..3446c461
Binary files /dev/null and b/libtdegames/kcarddialog.png differ
diff --git a/libtdegames/kchat.cpp b/libtdegames/kchat.cpp
new file mode 100644
index 00000000..2a9c3913
--- /dev/null
+++ b/libtdegames/kchat.cpp
@@ -0,0 +1,115 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kchat.h"
+
+class KChatPrivate
+{
+public:
+	KChatPrivate()
+	{
+	}
+
+	bool mAutoAddMessages;
+
+	TQMap<int, TQString> mPlayerMap;
+	int mPlayerId;
+	int mFromId;
+};
+
+KChat::KChat(TQWidget* parent, bool twoPlayerGame) : KChatBase(parent, twoPlayerGame)
+{
+ init(); 
+}
+
+KChat::~KChat()
+{
+ kdDebug(11000) << "DESTRUCT KChat " << this << endl;
+ delete d;
+}
+
+void KChat::init()
+{
+ kdDebug(11001) << "INIT KChat " << this << endl;
+ d = new KChatPrivate;
+ d->mAutoAddMessages = true;
+ d->mPlayerId = 1;
+ d->mFromId = 1;
+}
+
+void KChat::setFromNickname(const TQString& n)
+{ d->mFromId = addPlayer(n); }
+const TQString& KChat::fromName() const
+{ return player(fromId()); }
+void KChat::setAutoAddMessages(bool add) 
+{ d->mAutoAddMessages = add; }
+bool KChat::autoAddMessages() const 
+{ return d->mAutoAddMessages; }
+int KChat::uniqueId()
+{ return d->mPlayerId++; }
+int KChat::fromId() const
+{ return d->mFromId; }
+const TQString& KChat::player(int id) const
+{ return d->mPlayerMap[id]; }
+
+void KChat::returnPressed(const TQString& text)
+{
+ int id = fromId();
+ if (id < 0) {
+	// don't return - just display "unknown" as name
+	kdWarning(11000) << "KChat: no fromNickname has been set!" << endl;
+ }
+ emit signalSendMessage(id, text);
+ if (autoAddMessages()) {
+	TQString p = player(id);
+	if (p.isNull()) {
+		p = i18n("Unknown");
+	}
+	kdDebug(11000) << "auto adding message from player " << p << " ;id=" << id << endl;
+	addMessage(p, text);
+ }
+}
+
+int KChat::addPlayer(const TQString& nickname)
+{
+ int id = uniqueId();
+ d->mPlayerMap.insert(id, nickname);
+ return id;
+}
+
+void KChat::removePlayer(int id)
+{
+ d->mPlayerMap.remove(id);
+}
+
+void KChat::removePlayer(const TQString& nickname)
+{
+ TQMap<int, TQString>::Iterator it;
+ for (it = d->mPlayerMap.begin(); it != d->mPlayerMap.end(); ++it) {
+	if (it.data() == nickname) {
+		d->mPlayerMap.remove(it);
+	}
+ }
+}
+
+
+#include "kchat.moc"
diff --git a/libtdegames/kchat.h b/libtdegames/kchat.h
new file mode 100644
index 00000000..f6867c68
--- /dev/null
+++ b/libtdegames/kchat.h
@@ -0,0 +1,148 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+#ifndef __KCHAT_H__
+#define __KCHAT_H__
+
+#include <tqstring.h>
+
+#include "kchatbase.h"
+#include <kdemacros.h>
+
+class KChatPrivate;
+
+/**
+ * @short A chat widget for non-KGame games
+ *
+ * Docu is TODO
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KChat : public KChatBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	/**
+	 * @param parent The parent widget for this widget.
+	 * @param twoPlayerGame If true the combo box where the player can
+	 * choose to send to a single player or to all players will not be added
+	 * as you will hardly need it in 2-player games.
+	 **/
+	KChat(TQWidget* parent, bool twoPlayerGame = false);
+
+	virtual ~KChat();
+
+	/**
+	 * Equivalent to player(fromId())
+	 * @return The name that will be shown for messages from this widget.
+	 * That is the string from @ref setFromNickname
+	 **/
+	virtual const TQString& fromName() const;
+
+	/**
+	 * This sets the name that will be shown on all chat widgets if this
+	 * widget sends a message. See signalSendMessage
+	 * @param name The name of the player owning this widget
+	 **/
+	void setFromNickname(const TQString& name);
+
+//	TODO:
+//	void setPlayerList(TQIntDict<TQString>);// use this for non-KGame use
+
+	/**
+	 * Adds a player nickname.
+	 * @return The unique ID of the player
+	 **/
+	int addPlayer(const TQString& nick);
+
+	/**
+	 * Removes all players with this nickname. Better don't use this as it
+	 * will remove *all* players with this nickname. Save the id instead and
+	 * call removePlayer(id)
+	 * @param nick The nickname of the removed players
+	 **/
+	void removePlayer(const TQString& nick);
+
+	/**
+	 * Removes the player with this id, as returned by @ref addPlayer
+	 * @param id The id of the player to be removed
+	 **/
+	void removePlayer(int id);
+
+
+	/**
+	 * @return true if the messages which will be sent from here will be
+	 * added automatically using @ref KChatBase::addMessage. See also @ref
+	 * setAutoAddMessages
+	 **/
+	bool autoAddMessages() const;
+
+	/**
+	 * Usually the messages which will be sent from here (see @ref
+	 * signalSendMessage) are added autmatically to this widget. But under
+	 * some circumstances that would be very unhandy. So you can deactivate
+	 * this behaviour here and call @ref KChatBase::addMessage yourself
+	 * @param add If true (default) messages sent from here will be added
+	 * automatically. Otherwise you will have to add them yourself
+	 **/
+	void setAutoAddMessages(bool add);
+
+	/**
+	 * @return The nickname of the player which belongs to this id
+	 **/
+	const TQString& player(int id) const;
+
+	/**
+	 * @return The ID that belongs to the local player. 
+	 * @see setFromNickname
+	 **/
+	int fromId() const;
+	
+
+signals:
+	/**
+	 * This signal is emitted when the player wants to send a message.
+	 *
+	 * The message is added automatically using @ref KChatBase::addMessage if @ref
+	 * autoAddMessages is enabled.
+	 * @param id The id of the player who sends the message - see
+	 * setFromNickname and player
+	 * @param msg The message itself
+	 **/
+	void signalSendMessage(int id, const TQString& msg);
+	
+protected:
+	/**
+	 * This emits @ref signalSendMessage and, if @ref autoAddMessages is
+	 * true, calls @ref KChatBase::addMessage
+	 **/
+	virtual void returnPressed(const TQString&);
+
+	/**
+	 * The Id of the next player. Incremented after every call.
+	 **/
+	int uniqueId();
+
+private:
+	void init();
+
+	KChatPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kchatbase.cpp b/libtdegames/kchatbase.cpp
new file mode 100644
index 00000000..14f74103
--- /dev/null
+++ b/libtdegames/kchatbase.cpp
@@ -0,0 +1,530 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kchatbase.h"
+
+#include <klineedit.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kconfig.h>
+#include <kapplication.h>
+#include <kdebug.h>
+
+#include <tqlayout.h>
+#include <tqcombobox.h>
+#include <tqpainter.h>
+
+class KChatBaseTextPrivate
+{
+public:
+	KChatBaseTextPrivate()
+	{
+		mNameFont = 0;
+		mMessageFont = 0;
+	}
+
+	TQString mName;
+	TQString mMessage;
+
+	const TQFont* mNameFont;
+	const TQFont* mMessageFont;
+};
+
+
+KChatBaseText::KChatBaseText(const TQString& name, const TQString& message) : TQListBoxText()
+{
+ init();
+ setName(name);
+ setMessage(message);
+}
+
+KChatBaseText::KChatBaseText(const TQString& message) : TQListBoxText()
+{
+ init();
+ setMessage(message);
+}
+
+KChatBaseText::~KChatBaseText()
+{ 
+ delete d;
+}
+
+void KChatBaseText::init()
+{
+ d = new KChatBaseTextPrivate;
+}
+
+void KChatBaseText::setName(const TQString& n)
+{
+// d->mName = n;
+ d->mName = TQString("%1: ").tqarg(n);
+ setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
+}
+
+void KChatBaseText::setMessage(const TQString& m)
+{
+ d->mMessage = m;
+ setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
+}
+
+const TQString& KChatBaseText::name() const
+{ return d->mName; }
+
+const TQString& KChatBaseText::message() const
+{ return d->mMessage; }
+
+TQFont KChatBaseText::nameFont() const
+{
+ if (d->mNameFont) {
+	return *d->mNameFont; 
+ } else if (listBox()) {
+	return listBox()->font();
+ } else {
+	return TQFont();
+ }
+}
+
+TQFont KChatBaseText::messageFont() const
+{
+ if (d->mMessageFont) {
+	return *d->mMessageFont; 
+ } else if (listBox()) {
+	return listBox()->font();
+ } else {
+	return TQFont();
+ }
+}
+
+void KChatBaseText::setNameFont(const TQFont* f)
+{ d->mNameFont = f; }
+
+void KChatBaseText::setMessageFont(const TQFont* f)
+{ d->mMessageFont = f; }
+
+void KChatBaseText::paint(TQPainter* painter)
+{
+ TQFontMetrics fm = painter->fontMetrics();
+ painter->setFont(nameFont());
+ painter->drawText(3, fm.ascent() + fm.leading()/2, name());
+ painter->setFont(messageFont());
+ painter->drawText(3 + TQFontMetrics(nameFont()).width(name()), fm.ascent() + fm.leading()/2, message());
+}
+
+int KChatBaseText::width(TQListBox* lb) const
+{
+ int w = 0;
+ if (lb) {
+	w += 6;
+	w += TQFontMetrics(nameFont()).width(name());
+	w += TQFontMetrics(messageFont()).width(message());
+ }
+// int w = lb ? lb->fontMetrics().width( text() ) + 6 : 0; // QT orig
+ return TQMAX(w, TQApplication::globalStrut().width());
+}
+
+int KChatBaseText::height(TQListBox* lb) const
+{
+ int h = 0;
+ if (lb) {
+	h += 2;
+	// AB: is lineSpacing still correct?
+	if (TQFontMetrics(nameFont()).lineSpacing() > TQFontMetrics(messageFont()).lineSpacing()) { 
+		h += TQFontMetrics(nameFont()).lineSpacing();
+	} else {
+		h += TQFontMetrics(messageFont()).lineSpacing();
+	}
+ }
+// int h = lb ? lb->fontMetrics().lineSpacing() + 2 : 0; // QT orig
+ return TQMAX(h, TQApplication::globalStrut().height());
+}
+
+
+
+class KChatBasePrivate
+{
+public:
+	KChatBasePrivate() 
+	{ 
+		mBox = 0;
+		mEdit = 0;
+		mCombo = 0;
+
+		mAcceptMessage = true;
+		mMaxItems = -1;
+	}
+	TQListBox* mBox;
+	KLineEdit* mEdit;
+	TQComboBox* mCombo;
+	bool mAcceptMessage;
+	int mMaxItems;
+
+	TQValueList<int> mIndex2Id;
+
+	TQFont mNameFont;
+	TQFont mMessageFont;
+	TQFont mSystemNameFont;
+	TQFont mSystemMessageFont;
+};
+
+KChatBase::KChatBase(TQWidget* parent, bool noComboBox) : TQFrame(parent)
+{
+ init(noComboBox); 
+}
+
+KChatBase::~KChatBase()
+{
+// kdDebug(11000) << "KChatBase: DESTRUCT (" << this << ")" << endl;
+ saveConfig();
+ delete d;
+}
+
+void KChatBase::init(bool noComboBox)
+{
+// kdDebug(11000) << "KChatBase: INIT (" << this << ")" << endl;
+
+ d = new KChatBasePrivate;
+
+ setMinimumWidth(100);
+ setMinimumHeight(150);
+ 
+ TQVBoxLayout* l = new TQVBoxLayout(this);
+
+ d->mBox = new TQListBox(this);
+ connect(d->mBox, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)), 
+		this, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)));
+ l->addWidget(d->mBox);
+ d->mBox->setVScrollBarMode(TQScrollView::AlwaysOn);
+ d->mBox->setHScrollBarMode(TQScrollView::AlwaysOff);
+ d->mBox->setFocusPolicy(TQ_NoFocus);
+// d->mBox->setSelectionMode(TQListBox::NoSelection);
+ d->mBox->setSelectionMode(TQListBox::Single);
+
+ l->addSpacing(5);
+
+ TQHBoxLayout* h = new TQHBoxLayout(l);
+ d->mEdit = new KLineEdit(this);
+ d->mEdit->setHandleSignals(false);
+ d->mEdit->setTrapReturnKey(true);
+ d->mEdit->completionObject(); // add the completion object
+ d->mEdit->setCompletionMode(KGlobalSettings::CompletionNone);
+ connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), this, TQT_SLOT(slotReturnPressed(const TQString&)));
+ h->addWidget(d->mEdit);
+
+ if (!noComboBox) {
+	d->mCombo = new TQComboBox(this);
+	h->addWidget(d->mCombo);
+	addSendingEntry(i18n("Send to All Players"), SendToAll);//FIXME: where to put the id?
+ }
+
+ d->mAcceptMessage = true; // by default
+ setMaxItems(-1); // unlimited
+
+ if (kapp) {
+	// kapp might be NULL as well - in case we are in TQt designer.
+	readConfig();
+ }
+}
+
+bool KChatBase::acceptMessage() const
+{ return d->mAcceptMessage; }
+
+void KChatBase::setAcceptMessage(bool a)
+{ d->mAcceptMessage = a; }
+
+bool KChatBase::addSendingEntry(const TQString& text, int id)
+{
+//FIXME: is ID used correctly? 
+// do we need ID at all? 
+// what the hell should be here?
+// d->mCombo->insertItem(i18n("Send to All Players"), SendToAll);
+ return insertSendingEntry(text, id);
+}
+
+bool KChatBase::insertSendingEntry(const TQString& text, int id, int index)
+{
+ if (!d->mCombo) {
+	kdWarning(11000) << "KChatBase: Cannot add an entry to the combo box" << endl;
+	return false;
+ }
+ if (d->mIndex2Id.findIndex(id) != -1) {
+	kdError(11000) << "KChatBase: Cannot add more than one entry with the same ID! " << endl;
+	kdError(11000) << "KChatBase: Text="<<text<<endl;
+	return false;
+ }
+ d->mCombo->insertItem(text, index);
+ if (index < 0) {
+	d->mIndex2Id.append(id);
+ } else {
+	d->mIndex2Id.insert(d->mIndex2Id.at(index), id);
+ }
+ if (d->mIndex2Id.count() != (uint)d->mCombo->count()) {
+	kdError(11000) << "KChatBase: internal ERROR - local IDs do not match combo box entries!" << endl;
+ }
+ return true;
+}
+
+int KChatBase::sendingEntry() const
+{
+ if (!d->mCombo) {
+	kdWarning(11001) << "Cannot retrieve index from NULL combo box" << endl;
+	return -1;
+ }
+ int index = d->mCombo->currentItem();
+ if (d->mIndex2Id.at(index) == d->mIndex2Id.end()) {
+	kdWarning(11000) << "could not find the selected sending entry!" << endl;
+	return -1;
+ }
+ return d->mIndex2Id[index];
+}
+
+void KChatBase::removeSendingEntry(int id)
+{
+ if (!d->mCombo) {
+	kdWarning(11000) << "KChatBase: Cannot remove an entry from the combo box" << endl;
+	return;
+ }
+ d->mCombo->removeItem(findIndex(id));
+ d->mIndex2Id.remove(id);
+}
+
+void KChatBase::changeSendingEntry(const TQString& text, int id)
+{
+ if (!d->mCombo) {
+	kdWarning(11000) << "KChatBase: Cannot change an entry in the combo box" << endl;
+	return;
+ }
+ int index = findIndex(id);
+ d->mCombo->changeItem(text, index);
+}
+
+void KChatBase::setSendingEntry(int id)
+{
+ if (!d->mCombo) {
+	kdWarning(11000) << "KChatBase: Cannot set an entry in the combo box" << endl;
+	return;
+ }
+ d->mCombo->setCurrentItem(findIndex(id));
+}
+ 
+int KChatBase::findIndex(int id) const
+{
+ return d->mIndex2Id.findIndex(id);
+}
+
+int KChatBase::nextId() const
+{
+ int i = SendToAll + 1;
+ while (d->mIndex2Id.findIndex(i) != -1) {
+	i++;
+ }
+ return i;
+}
+
+void KChatBase::addItem(const TQListBoxItem* text)
+{
+ d->mBox->insertItem(text); 
+ int index = d->mBox->count() -1;
+ d->mBox->setBottomItem(index);//FIXME: don't scroll to bottom if user scrolled down manually
+ if (maxItems() >= 0 && d->mBox->count() > (unsigned int)maxItems()) {
+	d->mBox->removeItem(0);
+ }
+}
+
+void KChatBase::addMessage(const TQString& fromName, const TQString& text)
+{
+//maybe "%1 says: %2" or so
+ addItem(layoutMessage(fromName, text));
+}
+
+void KChatBase::addSystemMessage(const TQString& fromName, const TQString& text)
+{
+ addItem(layoutSystemMessage(fromName, text));
+}
+
+TQListBoxItem* KChatBase::layoutMessage(const TQString& fromName, const TQString& text)
+{
+ //TODO: KChatBaseConfigure? - e.g. color
+ TQListBoxItem* message;
+ if (text.startsWith("/me ")) {
+	// replace "/me" by a nice star. leave one space after the star
+	TQPixmap pix;
+	pix.load(locate("data", TQString::tqfromLatin1("tdegames/pics/star.png")));
+	
+	//TODO KChatBasePixmap? Should change the font here!
+	
+	message = (TQListBoxItem*)new TQListBoxPixmap(pix, i18n("%1 %2").tqarg(fromName).tqarg(text.mid(3)));
+ } else {
+	// the text is not edited in any way. just return an item
+	KChatBaseText* m = new KChatBaseText(fromName, text);
+	m->setNameFont(&d->mNameFont);
+	m->setMessageFont(&d->mMessageFont);
+	message = (TQListBoxItem*)m;
+ }
+ return message;
+}
+
+TQListBoxItem* KChatBase::layoutSystemMessage(const TQString& fromName, const TQString& text)
+{
+ //TODO: KChatBaseConfigure? - e.g. color
+
+ // no need to check for /me etc.
+ KChatBaseText* m = new KChatBaseText(i18n("--- %1").tqarg(fromName), text);
+ m->setNameFont(&d->mSystemNameFont);
+ m->setMessageFont(&d->mSystemMessageFont);
+ return (TQListBoxItem*)m;
+}
+
+void KChatBase::slotReturnPressed(const TQString& text)
+{
+ if (text.length() <= 0) {
+	// no text entered - probably hit return by accident
+	return;
+ } else if (!acceptMessage()) {
+	return;
+ }
+ d->mEdit->completionObject()->addItem(text);
+// connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), comp, TQT_SLOT(addItem(const TQString&)));
+ d->mEdit->clear();
+ returnPressed(text);
+}
+
+TQString KChatBase::comboBoxItem(const TQString& name) const
+{ // TODO: such a function for "send to all" and "send to my group"
+ return i18n("Send to %1").tqarg(name);
+}
+
+void KChatBase::slotClear()
+{
+ d->mBox->clear();
+}
+
+void KChatBase::setCompletionMode(KGlobalSettings::Completion mode)
+{ d->mEdit->setCompletionMode(mode); }
+
+void KChatBase::setNameFont(const TQFont& font)
+{
+ d->mNameFont = font; 
+ d->mBox->triggerUpdate(false);
+}
+
+void KChatBase::setMessageFont(const TQFont& font)
+{
+ d->mMessageFont = font; 
+ d->mBox->triggerUpdate(false);
+}
+
+void KChatBase::setBothFont(const TQFont& font)
+{
+ setNameFont(font);
+ setMessageFont(font);
+}
+
+const TQFont& KChatBase::nameFont() const
+{ return d->mNameFont; }
+
+const TQFont& KChatBase::messageFont() const
+{ return d->mMessageFont; }
+
+void KChatBase::setSystemNameFont(const TQFont& font)
+{
+ d->mSystemNameFont = font; 
+ d->mBox->triggerUpdate(false);
+}
+
+void KChatBase::setSystemMessageFont(const TQFont& font)
+{
+ d->mSystemMessageFont = font; 
+ d->mBox->triggerUpdate(false);
+}
+
+void KChatBase::setSystemBothFont(const TQFont& font)
+{
+ setSystemNameFont(font);
+ setSystemMessageFont(font);
+}
+
+const TQFont& KChatBase::systemNameFont() const
+{ return d->mSystemNameFont; }
+
+const TQFont& KChatBase::systemMessageFont() const
+{ return d->mSystemMessageFont; }
+
+void KChatBase::saveConfig(KConfig* conf)
+{
+ TQString oldGroup;
+ if (!conf) {
+	conf = kapp->config();
+	oldGroup = conf->group();
+	conf->setGroup("KChatBase");
+ }
+
+ conf->writeEntry("NameFont", nameFont());
+ conf->writeEntry("MessageFont", messageFont());
+ conf->writeEntry("SystemNameFont", systemNameFont());
+ conf->writeEntry("SystemMessageFont", systemMessageFont());
+ conf->writeEntry("MaxMessages", maxItems());
+
+ if (!oldGroup.isNull()) {
+	conf->setGroup(oldGroup);
+ }
+}
+
+void KChatBase::readConfig(KConfig* conf)
+{
+ TQString oldGroup;
+ if (!conf) {
+	conf = kapp->config();
+	oldGroup = conf->group();
+	conf->setGroup("KChatBase");
+ }
+
+ setNameFont(conf->readFontEntry("NameFont"));
+ setMessageFont(conf->readFontEntry("MessageFont"));
+ setSystemNameFont(conf->readFontEntry("SystemNameFont"));
+ setSystemMessageFont(conf->readFontEntry("SystemMessageFont"));
+ setMaxItems(conf->readNumEntry("MaxMessages", -1));
+
+ if (!oldGroup.isNull()) {
+	conf->setGroup(oldGroup);
+ }
+}
+
+void KChatBase::clear()
+{
+ d->mBox->clear();
+}
+
+void KChatBase::setMaxItems(int maxItems)
+{
+ d->mMaxItems = maxItems;
+ //TODO cut too many messages
+ if (maxItems == 0) {
+	clear();
+ } else if (maxItems > 0) {
+	while (d->mBox->count() > (unsigned int)maxItems) {
+		d->mBox->removeItem(0);
+	}
+ }
+}
+
+int KChatBase::maxItems() const
+{ return d->mMaxItems; }
+
+
+#include "kchatbase.moc"
diff --git a/libtdegames/kchatbase.h b/libtdegames/kchatbase.h
new file mode 100644
index 00000000..892e5859
--- /dev/null
+++ b/libtdegames/kchatbase.h
@@ -0,0 +1,511 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+#ifndef __KCHATBASE_H__
+#define __KCHATBASE_H__
+
+#include <tqframe.h>
+#include <tqstring.h>
+#include <tqlistbox.h>
+
+#include <kglobalsettings.h>
+#include <kdemacros.h>
+class TQListBoxItem;
+
+class KConfig;
+
+
+class KChatBaseTextPrivate;
+
+/**
+ * A TQListBoxText implementation for KChatBase.
+ *
+ * It supports different colors, text fonts, ...
+ *
+ * A KChatBaseText consists of two text items: first the player part then the
+ * text part. This honors KChatBase::addMessage which also uses both. 
+ * You can leave the player part out if you don't need it - there won't be any
+ * difference. 
+ *
+ * You can set different colors and fonts for both parts. In the future there
+ * will probably some kind of KChatBaseDialog which offers the user the ability
+ * to configure things like color and font on the fly.
+ **/
+class KChatBaseText : public TQListBoxText
+{
+public:
+
+	/**
+	 * Constructs a KChatBaseText object with the player and text part
+	 **/
+	KChatBaseText(const TQString& player, const TQString& text);
+	
+	/**
+	 * Constructs a KChatBaseText object without player part
+	 **/
+	KChatBaseText(const TQString& text);
+	
+	/**
+	 * Destruct a KChatBaseText object.
+	 **/
+	virtual ~KChatBaseText();
+
+	/**
+	 * Set the name part of a message. A message is usually shown like
+	 * "name: text" and you can change both parts independently.
+	 * 
+	 * @see setMessage
+	 * @param name The name of the sender (e.g. the player)
+	 **/
+	void setName(const TQString& name);
+
+	/**
+	 * Set the text part of a message. A message is usually shown like
+	 * "name: message" and you can change both parts independently.
+	 * 
+	 * See also setName
+	 * @param message The message that has been sent
+	 **/
+	void setMessage(const TQString& message);
+
+	/**
+	 * @return The name part of a message. 
+	 * @see setName
+	 **/
+	const TQString& name() const;
+
+	/**
+	 * @return The message text. 
+	 * @see setMessage
+	 **/
+	const TQString& message() const;
+
+	/**
+	 * You can set the font of the sender name independently of the message
+	 * itself. This font is used as the "name: " part of the message.
+	 * @return The font that is used for the name
+	 **/
+	TQFont nameFont() const;
+
+	/**
+	 * You can set the font of the message independently of the sender name.
+	 * This font is used as the text part of the message.
+	 * @return The font thaz is used for message text
+	 **/
+	TQFont messageFont() const;
+
+	/**
+	 * Set the font for the name. 
+	 * @see nameFont
+	 * @param font A pointer to the name font. Only the pointer is stored so
+	 * don't delete the object. This way there is only one object for a lot
+	 * of messages in memory.
+	 **/
+	void setNameFont(const TQFont* font);
+
+	/**
+	 * Set the font for the message text.
+	 * @see messageFont
+	 * @param font A pointer to the message font. Only the pointer is stored so
+	 * don't delete the object! This way there is only one object for a lot
+	 * of messages in memory.
+	 **/
+	void setMessageFont(const TQFont* font);
+
+	/**
+	 **/
+	virtual int width(TQListBox* ) const;
+
+	/**
+	 **/
+	virtual int height(TQListBox* ) const;
+
+protected:
+	/**
+	 **/
+	virtual void paint(TQPainter*);
+
+private:
+	void init();
+
+private:
+	KChatBaseTextPrivate* d;
+};
+
+
+class KChatBasePrivate;
+
+/**
+ * @short The base class for chat widgets
+ *
+ * This is the base class for both KChat and KGameChat. KGameChat is the class
+ * you want to use if you write a KGame based game as it will do most things for
+ * you. KChat is more or less the same but not KGame dependant
+ *
+ * KChatBase provides a complete chat widget, featuring different sending means
+ * (e.g. "send to all", "send to player1", "send to group2" and so on - see 
+ * addSendingEntry). It also provides full auto-completion capabilities (see
+ * KCompletion and KLineEdit) which defaults to disabled. The user can
+ * change this by right-clicking on the KLineEdit widget and selecting the
+ * desired behaviour. You can also change this manually by calling 
+ * setCompletionMode.
+ *
+ * To make KChatBase useful you have to overwrite at least returnPressed.
+ * Here you should send the message to all of your clients (or just some of
+ * them, depending on sendingEntry).
+ *
+ * To add a message just call addMessage with the nickname of the player
+ * who sent the message and the message itself. If you don't want to use
+ * layoutMessage by any reason you can also call addItem directly. But you
+ * should better replace layoutMessage instead.
+ *
+ * You probably don't want to use the abstract class KChatBase directly but use
+ * one of the derived classess KChat or KGameChat. The latter is the
+ * widget of choice if you develop a KGame application as you don't have to
+ * do anything but providing a KGame object.
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KChatBase : public TQFrame
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	/**
+	 * @param parent The parent widget for this widget.
+	 * @param noComboBox If true then the combo box where the player can
+	 * choose where to send messages to (either globally or just to some
+	 * players) will not be added.
+	 **/
+	KChatBase(TQWidget* parent, bool noComboBox = false);
+
+	/**
+	 * Destruct the KChatBase object
+	 *
+	 * Also calls saveConfig
+	 **/
+	virtual ~KChatBase();
+
+	enum SendingIds {
+		SendToAll = 0
+	};
+
+	/**
+	 * @return The name that will be shown for messages from this widget. Either the
+	 * string that was set by setFromName or the name of the player
+	 * that was set by setFromPlayer
+	 **/
+	virtual const TQString& fromName() const = 0;
+
+	/**
+	 * Adds a new entry in the combo box. The default is "send to all
+	 * players" only. This function is provided for convenience. You can
+	 * also call inserSendingEntry with index = -1.
+	 * See also nextId!
+	 * @param text The text of the new entry
+	 * @param id An ID for this entry. This must be unique for this
+	 * entry. It has nothing to do with the position of the entry in the
+	 * combo box. See nextId
+	 * @return True if successful, otherwise false (e.g. if the id is already used)
+	 **/
+	bool addSendingEntry(const TQString& text, int id);
+
+	/**
+	 * Inserts a new entry in the combo box.
+	 * @param text The entry
+	 * @param id An ID for this entry. This must be unique for this
+	 * entry. It has nothing to do with the position of the entry in the
+	 * combo box! 
+	 * @see nextId
+	 * @param index The position of the entry. If -1 the entry will be added
+	 * at the bottom
+	 * @return True if successful, otherwise false (e.g. if the id is already used)
+	 **/
+	bool insertSendingEntry(const TQString& text, int id, int index = -1);
+
+	/**
+	 * This changes a combo box entry.
+	 * @param text The new text of the entry
+	 * @param id The ID of the item to be changed
+	 **/
+	void changeSendingEntry(const TQString& text, int id);
+
+	/**
+	 * This selects a combo box entry.
+	 * @param id The ID of the item to be selected
+	 **/
+	void setSendingEntry(int id);
+
+	/**
+	 * Removes the entry with the ID id from the combo box. Note that id is
+	 * _not_ the index of the entry! 
+	 * @see addSendingEntry
+	 * @param id The unique id of the entry
+	 **/
+	void removeSendingEntry(int id);
+
+	/**
+	 * @return The _unique ID_ of the sending entry that has been selected.
+	 * @see addSendingEntry
+	 *
+	 * Note that the entry "send to all" _always_ uses
+	 * KChatBase::SendToAll, i.e. 0 as id!
+	 **/
+	int sendingEntry() const;
+	
+	/**
+	 * @return The index of the combo box entry with the given id
+	 **/
+	int findIndex(int id) const;
+
+	/**
+	 * @return An ID that has not yet been used in the combo box.
+	 * @see addSendingEntry
+	 **/
+	int nextId() const;
+
+	/**
+	 * @return True if this widget is able to send messages (see 
+	 * returnPressed) and false if not. The default implementation returns
+	 * the value which has been set by setAcceptMessage (true by
+	 * default)
+	 **/
+	virtual bool acceptMessage() const;
+
+	/**
+	 * See KLineEdit::setCompletionMode
+	 **/
+	void setCompletionMode(KGlobalSettings::Completion mode);
+
+	/**
+	 * Set the font that used used for the name part of a message. See also
+	 * nameFont and setBothFont
+	 **/
+	void setNameFont(const TQFont& font);
+	
+	/**
+	 * Set the font that used used for the message part of a message.
+	 * @see messageFont, setBothFont
+	 **/
+	void setMessageFont(const TQFont& font);
+
+	/**
+	 * This sets both - nameFont and messageFont to font. You
+	 * probably want to use this if you don't wish to distinguish between
+	 * these parts of a message.
+	 * @param font A font used for both nameFont and messageFont
+	 **/
+	void setBothFont(const TQFont& font);
+
+	/**
+	 * Same as setNameFont but applies only to system messages.
+	 * @see layoutSystemMessage
+	 **/
+	void setSystemNameFont(const TQFont& font);
+
+	/**
+	 * Same as setMessageFont but applies only to system messages.
+	 * @see layoutSystemMessage
+	 **/
+	void setSystemMessageFont(const TQFont& font);
+
+	/**
+	 * Same as setBothFont but applies only to system messages.
+	 * @see layoutSystemMessage
+	 **/
+	void setSystemBothFont(const TQFont& font);
+
+	/**
+	 * This font should be used for the name (the "from: " part) of a
+	 * message. layoutMessage uses this to set the font using
+	 * KChatBaseText::setNameFont but if you want to overwrite 
+	 * layoutMessage you should do this yourself.
+	 * @return The font that is used for the name part of the message.
+	 **/
+	const TQFont& nameFont() const;
+
+	/**
+	 * This font should be used for a message. layoutMessage sets the
+	 * font of a message using KChatBaseText::setMessageFont but if ypu
+	 * replace layoutMessage with your own function you should use
+	 * messageFont() yourself.
+	 * @return The font that is used for a message
+	 **/
+	const TQFont& messageFont() const;
+
+	/**
+	 * Same as systemNameFont but applies only to system messages.
+	 * @see layoutSystemMessage
+	 **/
+	const TQFont& systemNameFont() const;
+
+	/**
+	 * Same as systemMessageFont but applies only to system messages.
+	 * @see layoutSystemMessage
+	 **/
+	const TQFont& systemMessageFont() const;
+
+	/**
+	 * Save the configuration of the dialog to a KConfig object. If
+	 * the supplied KConfig pointer is NULL then kapp->config() is used
+	 * instead (and the group is changed to "KChatBase") butr the current
+	 * group is restored at the end.
+	 * @param conf A pointer to the KConfig object to save the config
+	 * to. If you use 0 then kapp->config() is used and the group is changed
+	 * to "KChatBase" (the current group is restored at the end).
+	 **/
+	virtual void saveConfig(KConfig* conf = 0);
+
+	/**
+	 * Read the configuration from a KConfig object. If the pointer is
+	 * NULL kapp->config() is used and the group is changed to "KChatBase".
+	 * The current KConfig::group is restored after this call.
+	 **/
+	virtual void readConfig(KConfig* conf = 0);
+
+	/**
+	 * Set the maximum number of items in the list. If the number of item
+	 * exceeds the maximum as many items are deleted (oldest first) as
+	 * necessary. The number of items will never exceed this value.
+	 * @param maxItems the maximum number of items. -1 (default) for
+	 * unlimited.
+	 **/
+	void setMaxItems(int maxItems);
+
+	/**
+	 * Clear all messages in the list.
+	 **/
+	void clear();
+
+	/**
+	 * @return The maximum number of messages in the list. -1 is unlimited. See also
+	 * setMaxItems
+	 **/
+	int maxItems() const;
+
+
+public slots:
+	/**
+	 * Add a text in the listbox. See also signalSendMessage()
+	 *
+	 * Maybe you want to replace this with a function that creates a nicer text
+	 * than "fromName: text"
+	 *
+	 * Update: the function layoutMessage is called by this now. This
+	 * means that you will get user defined outlook on the messages :-)
+	 * @param fromName The player who sent this message
+	 * @param text The text to be added 
+	 **/
+	virtual void addMessage(const TQString& fromName, const TQString& text);
+
+	/**
+	 * This works just like addMessage but adds a system message. 
+	 * layoutSystemMessage is used to generate the displayed item. System
+	 * messages will have a different look than player messages.
+	 *
+	 * You may wish to  use this to display status information from your game.
+	 **/
+	virtual void addSystemMessage(const TQString& fromName, const TQString& text);
+
+	/**
+	 * This member function is mainly internally used to add a message. It
+	 * is called by addMessage which creates a single text from a
+	 * player name and a text. You will hardly ever use this - but if you
+	 * need it it will be here ;-)
+	 *
+	 * But you may want to replace this in a derived class to create a
+	 * non-default (maybe nicer ;-) ) behaviour
+	 * @param item The TQListBoxItem that is being added
+	 **/
+	virtual void addItem(const TQListBoxItem* item);
+
+
+	/**
+	 * This clears all messages in the view. Note that only the messages are
+	 * cleared, not the sender names in the combo box!
+	 **/
+	void slotClear();
+
+	/**
+	 * @param a If false this widget cannot send a message until
+	 * setAcceptMessage(true) is called
+	 **/
+	void setAcceptMessage(bool a);
+	
+signals:
+	/**
+	 * Emitted when the user right-clicks on a list item. 
+	 * @see TQListBox::rightButtonClicked
+	 **/
+	void rightButtonClicked(TQListBoxItem*, const TQPoint&);
+
+protected:
+	/**
+	 * This is called whenever the user pushed return ie wants to send a
+	 * message.
+	 *
+	 * Note that you MUST add the message to the widget when this function
+	 * is called as it has already been added to the KCompletion object
+	 * of the KLineEdit widget!
+	 *
+	 * Must be implemented in derived classes
+	 * @param text The message to be sent
+	 **/
+	virtual void returnPressed(const TQString& text) = 0;
+
+	/**
+	 * Replace to customise the combo box.
+	 *
+	 * Default: i18n("Send to %1).tqarg(name)
+	 * @param name The name of the player
+	 * @return The string as it will be shown in the combo box
+	 **/
+	virtual TQString comboBoxItem(const TQString& name) const;
+
+	/**
+	 * Create a TQListBoxItem for this message. This function is not yet
+	 * written usefully - currently just a TQListBoxTex object is
+	 * created which shows the message in this format: "fromName: text".
+	 * This should fit most peoples needs but needs further improvements.
+	 **/
+	virtual TQListBoxItem* layoutMessage(const TQString& fromName, const TQString& text);
+
+	/**
+	 * Create a TQListBoxItem for this message. This does the same as
+	 * layoutMessage but generates a system message. You might want to
+	 * use such a message to display e.g. status information from your game.
+	 *
+	 * The default implementation just prepends "--- ".
+	 **/
+	virtual TQListBoxItem* layoutSystemMessage(const TQString& fromName, const TQString& text);
+
+private slots:
+	/**
+	 * Check if a text was entered and if acceptMessage returns true. 
+	 * Then add the message to the KCompletion object of the KLineEdit
+	 * widget and call returnPressed
+	 **/
+	void slotReturnPressed(const TQString&);
+
+private:
+	void init(bool noComboBox);
+
+	KChatBasePrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kchatdialog.cpp b/libtdegames/kchatdialog.cpp
new file mode 100644
index 00000000..7e0df7e8
--- /dev/null
+++ b/libtdegames/kchatdialog.cpp
@@ -0,0 +1,253 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kchatdialog.h"
+
+#include "kchatbase.h"
+
+#include <klocale.h>
+#include <kfontdialog.h>
+
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqpushbutton.h>
+
+class KChatDialogPrivate
+{
+ public:
+	KChatDialogPrivate()
+	{
+		mTextPage = 0;
+
+		mNamePreview = 0;
+		mTextPreview = 0;
+		mSystemNamePreview = 0;
+		mSystemTextPreview = 0;
+
+		mChat = 0;
+	}
+
+	TQFrame* mTextPage;
+
+	TQLabel* mNamePreview;
+	TQLabel* mTextPreview;
+	TQLabel* mSystemNamePreview;
+	TQLabel* mSystemTextPreview;
+
+	TQLineEdit* mMaxMessages;
+
+	KChatBase* mChat;
+};
+
+KChatDialog::KChatDialog(KChatBase* chat, TQWidget* parent, bool modal) 
+//	: KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
+	: KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
+{
+ init();
+ plugChatWidget(chat);
+}
+
+KChatDialog::KChatDialog(TQWidget* parent, bool modal) 
+//	: KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
+	: KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
+{
+ init();
+}
+
+KChatDialog::~KChatDialog()
+{
+ delete d;
+}
+
+void KChatDialog::init()
+{
+ d = new KChatDialogPrivate;
+// d->mTextPage = addPage(i18n("&Messages"));// not a good name - game Messages?
+ d->mTextPage = plainPage();
+ TQGridLayout* tqlayout = new TQGridLayout(d->mTextPage, 7, 2, KDialog::marginHint(), KDialog::spacingHint());
+
+// General fonts
+ TQPushButton* nameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
+ connect(nameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetNameFont()));
+ tqlayout->addWidget(nameFont, 0, 0);
+ TQPushButton* textFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
+ connect(textFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetTextFont()));
+ tqlayout->addWidget(textFont, 0, 1);
+
+ TQFrame* messagePreview = new TQFrame(d->mTextPage);
+ messagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
+ TQHBoxLayout* messageLayout = new TQHBoxLayout(messagePreview);
+ tqlayout->addMultiCellWidget(messagePreview, 1, 1, 0, 1);
+
+ d->mNamePreview = new TQLabel(i18n("Player: "), messagePreview);
+ messageLayout->addWidget(d->mNamePreview, 0);
+ d->mTextPreview = new TQLabel(i18n("This is a player message"), messagePreview);
+ messageLayout->addWidget(d->mTextPreview, 1);
+
+ tqlayout->addRowSpacing(2, 10);
+ 
+// System Message fonts
+ TQLabel* systemMessages = new TQLabel(i18n("System Messages - Messages directly sent from the game"), d->mTextPage);
+ tqlayout->addMultiCellWidget(systemMessages, 3, 3, 0, 1);
+ TQPushButton* systemNameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
+ connect(systemNameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemNameFont()));
+ tqlayout->addWidget(systemNameFont, 4, 0);
+ TQPushButton* systemTextFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
+ connect(systemTextFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemTextFont()));
+ tqlayout->addWidget(systemTextFont, 4, 1);
+
+ TQFrame* systemMessagePreview = new TQFrame(d->mTextPage);
+ systemMessagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
+ TQHBoxLayout* systemMessageLayout = new TQHBoxLayout(systemMessagePreview);
+ tqlayout->addMultiCellWidget(systemMessagePreview, 5, 5, 0, 1);
+ 
+ d->mSystemNamePreview = new TQLabel(i18n("--- Game: "), systemMessagePreview);
+ systemMessageLayout->addWidget(d->mSystemNamePreview, 0);
+ d->mSystemTextPreview = new TQLabel(i18n("This is a system message"), systemMessagePreview);
+ systemMessageLayout->addWidget(d->mSystemTextPreview, 1);
+
+// message count
+ TQLabel* maxMessages = new TQLabel(i18n("Maximal number of messages (-1 = unlimited):"), d->mTextPage);
+ tqlayout->addWidget(maxMessages, 6, 0);
+ d->mMaxMessages = new TQLineEdit(d->mTextPage);
+ d->mMaxMessages->setText(TQString::number(-1));
+ tqlayout->addWidget(d->mMaxMessages, 6, 1);
+}
+
+void KChatDialog::slotGetNameFont()
+{
+ TQFont font = nameFont();
+ KFontDialog::getFont(font);
+ setNameFont(font);
+}
+
+void KChatDialog::slotGetTextFont()
+{
+ TQFont font = textFont();
+ KFontDialog::getFont(font);
+ setTextFont(font);
+}
+
+void KChatDialog::slotGetSystemNameFont()
+{
+ TQFont font = systemNameFont();
+ KFontDialog::getFont(font);
+ setSystemNameFont(font);
+}
+
+void KChatDialog::slotGetSystemTextFont()
+{
+ TQFont font = systemTextFont();
+ KFontDialog::getFont(font);
+ setSystemTextFont(font);
+}
+
+TQFont KChatDialog::nameFont() const
+{
+ return d->mNamePreview->font();
+}
+
+TQFont KChatDialog::textFont() const
+{
+ return d->mTextPreview->font();
+}
+
+TQFont KChatDialog::systemNameFont() const
+{
+ return d->mSystemNamePreview->font();
+}
+
+TQFont KChatDialog::systemTextFont() const
+{
+ return d->mSystemTextPreview->font();
+}
+
+void KChatDialog::plugChatWidget(KChatBase* widget, bool applyFonts)
+{
+ d->mChat = widget;
+ if (applyFonts && d->mChat) {
+	setNameFont(d->mChat->nameFont());
+	setTextFont(d->mChat->messageFont());
+	setSystemNameFont(d->mChat->systemNameFont());
+	setSystemTextFont(d->mChat->systemMessageFont());
+	setMaxMessages(d->mChat->maxItems());
+ }
+}
+
+void KChatDialog::configureChatWidget(KChatBase* widget)
+{
+ if (!widget) {
+	return;
+ }
+ widget->setNameFont(nameFont());
+ widget->setMessageFont(textFont());
+
+ widget->setSystemNameFont(systemNameFont());
+ widget->setSystemMessageFont(systemTextFont());
+ 
+ widget->setMaxItems(maxMessages());
+}
+
+void KChatDialog::slotOk()
+{
+ slotApply();
+ KDialogBase::slotOk();
+}
+
+void KChatDialog::slotApply()
+{
+ configureChatWidget(d->mChat);
+}
+
+void KChatDialog::setNameFont(TQFont f)
+{
+ d->mNamePreview->setFont(f);
+}
+
+void KChatDialog::setTextFont(TQFont f)
+{
+ d->mTextPreview->setFont(f);
+}
+
+void KChatDialog::setSystemNameFont(TQFont f)
+{
+ d->mSystemNamePreview->setFont(f);
+}
+
+void KChatDialog::setSystemTextFont(TQFont f)
+{
+ d->mSystemTextPreview->setFont(f);
+}
+
+void KChatDialog::setMaxMessages(int max)
+{
+ d->mMaxMessages->setText(TQString::number(max));
+}
+
+int KChatDialog::maxMessages() const
+{
+ bool ok;
+ int max = d->mMaxMessages->text().toInt(&ok);
+ if (!ok) {
+	return -1; // unlimited is default
+ }
+ return max;
+}
+
+#include "kchatdialog.moc"
diff --git a/libtdegames/kchatdialog.h b/libtdegames/kchatdialog.h
new file mode 100644
index 00000000..8b374788
--- /dev/null
+++ b/libtdegames/kchatdialog.h
@@ -0,0 +1,120 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KCHATDIALOG_H__
+#define __KCHATDIALOG_H__
+
+#include <kdialogbase.h>
+#include <kdemacros.h>
+
+class KChatBase;
+
+class KChatDialogPrivate;
+
+class KDE_EXPORT KChatDialog : public KDialogBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	/**
+	 * Construct a KChatDialog widget
+	 **/
+	KChatDialog(TQWidget* parent, bool modal = false);
+
+	/**
+	 * Construct a KChatDialog widget which automatically configures the
+	 * @ref KChatBase widget. You probably want to use this as you don't
+	 * have to care about the configuration stuff yourself.
+	 **/
+	KChatDialog(KChatBase* chatWidget, TQWidget* parent, bool modal = false);
+
+	/**
+	 * Destruct the dialog
+	 **/
+	~KChatDialog();
+
+	/**
+	 * @return The font that shall be used as the "name: " part of a normal
+	 * message.
+	 **/
+	TQFont nameFont() const;
+
+	/**
+	 * @return The font that shall be used for normal messages.
+	 **/
+	TQFont textFont() const;
+	
+	/**
+	 * @return The font that shall be used as the "name: " part of a system
+	 * (game) message.
+	 **/
+	TQFont systemNameFont() const;
+	
+	/**
+	 * @return The font that shall be used for a system (game) message.
+	 **/
+	TQFont systemTextFont() const;
+
+	/**
+	 * Set the widget that will be configured by the dialog. Use this if you
+	 * don't want to configure the widget yourself.
+	 * @param widget The chat widget that shall be configured
+	 * @param Whether you want to have the current @ref KChatBase fonts as
+	 * defaults in the dialog
+	 **/
+	void plugChatWidget(KChatBase* widget, bool applyFonts = true);
+
+	/**
+	 * Used to configure the chat widget according to the user settings.
+	 * This is called automatically if @ref plugChatWidget was called
+	 * before.
+	 * @param widget The chat widget that shall be configured
+	 **/
+	void configureChatWidget(KChatBase* widget);
+
+	/**
+	 * @return The maximal allowed messages in the chat widget. -1 is
+	 * unlimited
+	 **/
+	int maxMessages() const;
+
+protected slots:
+	void slotGetNameFont();
+	void slotGetTextFont();
+	void slotGetSystemNameFont();
+	void slotGetSystemTextFont();
+
+	virtual void slotApply();
+	virtual void slotOk();
+
+private:
+	void setNameFont(TQFont);
+	void setTextFont(TQFont);
+	void setSystemNameFont(TQFont);
+	void setSystemTextFont(TQFont);
+	void setMaxMessages(int max);
+
+private:
+	void init();
+
+private:
+	KChatDialogPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/COMPAT b/libtdegames/kgame/COMPAT
new file mode 100644
index 00000000..4551c679
--- /dev/null
+++ b/libtdegames/kgame/COMPAT
@@ -0,0 +1,55 @@
+06.09.2001:  replace the signal signalCreatePlayer by the virtual function
+             createPlayer. It has the same arguments but the return value
+             is the new player
+06.09.2001:  the KGameConfig dialog changes the parameter initConfigs from bool
+             to long. Use the ConfigOptions to specify what options you want
+             to have enabled. Default is all
+06.09.2001:  some int->Q_UINT32 in sender, receiver and player parameters. maybe
+             more will follow.
+06.09.2001:  KGameIO::signalPrepareMove(..., bool&) ->
+             KGameIO::signalPrepareMove(..., bool*): don't know why this was
+             necessary but it didn't work anymore...
+16.09.2001:  KGamePropertyHandler uses bool* for the sent parameter now. This is
+             because QT3 obviously doesn't honor referneces in Q_SIGNALS/Q_SLOTS.
+             This might even be a QT bug. Bad situation - we use references
+             everywhere in KGame... hope nothing else is affecterd by this
+             problem (signalPrepareMove was fixed already by me)
+18.09.2001:  bool* for Key/Mouseevents and IOAdded in kgameio.h too
+19.09.2001:  Kgame:nextPlayer retunrs the KPlayer *nextplayer instead of bool              
+19.09.2001:  gameOver() renamed to checkGameOver() !!!!!
+18.09.2001:  Question: Should the signal signalPlayerInput(QDataStream &,KPlayer *))
+             be made a virtual function? 
+             MH: This is done now. As this is a central function your programs will
+             not run anymore. Fix: rename your slot which is connected to the above
+             signal to playerInput() and return TRUE in it. This will make it 100%
+             compatible to the old version. I think this chagne is necessary especially
+             as a signal is of no use here as you cannot read twice from the same stream.
+             Therefore there can be only one function processing the input. If you really
+             need a signal, you can of course simply emit it in the overwritten playerInput
+             function
+20.09.2001  playerInputFinished(void->KPlayer *)
+--------------------- KGAME_ALPHA_1 --------------------- 
+06.10.2001  adding KGameNetwork::signalAdminStatusChanged - needed for
+            KGameDialog
+06.10.2001  KGame::loadGame() doesn't call setPolicy() anymore!
+08.10.2001  KGamePropertyList now honor policies! Use setPolicy(PolicyDirty) to
+            get the old behavior!
+            The behavior of KGamePropertyArray may have changed in this turn,
+            too!
+            The API stays the same.
+11.10.2001  KGameDialogGeneralConfig now doesn't provide setMin/maxPlayers()
+            anymore. The game should manage this internally. tqlayout() is
+            obsolete as well 
+18.10.2001  KPlayer::signalNetworkData contained QDataStream& instead of const
+            QByteArray& parameter (oops!). This is fixed now. All apps which
+            used this signal must be changed.
+18.10.2001  KGame::sendProperty(), KGame::sendPlayerProperty(),
+            KPlayer::sendProperty() and related functions contain a "int msgid"
+            parameter. This is the id() of the property handler. This parameter
+            enables us to easily add any number of property handler to a game
+            just by connecting it to existing send Q_SLOTS and call
+            processMessage() in slotNetworkData()
+03.11.2001  KPlayer::signalNetworkData now emits msgid-KGameMessage::IdUser just
+            like KGame::signalNetworkData does
+06.11.2001  KGameDialog has some small improvements - easier and IMHO better
+            constructor code. Most code should be compatible :-)
diff --git a/libtdegames/kgame/DESIGN b/libtdegames/kgame/DESIGN
new file mode 100644
index 00000000..cd737e3a
--- /dev/null
+++ b/libtdegames/kgame/DESIGN
@@ -0,0 +1,407 @@
+This document tries to describe the design of KGame - the KDE multiplayer
+library.
+This document has been written by:
+ Andreas Beckermann <b_mann@gmx.de>
+ M. Heni <martin@heni-online.de>
+ Burkhard Lehner <Burkhard.Lehner@gmx.de>
+
+This document is published under the terms of the GNU FDL
+
+!!!
+Note that this is the initial version of this document and has not yet been
+aproved by all core developers (and is far from being complete)
+AB: please remove this comments as soon as all KGame hackers have read the
+document
+!!!
+
+Please refer the API documentation of every KGame class if you want up tp date
+information.
+
+
+0. Contents
+-----------
+
+1. DEFINITIONS
+1.1 Message Server
+1.2 Client or Message Client
+1.3 Master
+1.4 Admin
+1.5 Server
+1.6 Player
+
+2. Game Negotiation (M.Heni 20.05.2001)
+
+AB: 3.x is obsolete!
+3. Game Properties (Andreas Beckermann 28.07.2001) ( not yet completed )
+3.1 Using KGameProperty
+3.2 Custom Classes
+3.3 Concepts
+
+4. KGameIO (Andreas Beckermann 10.08.2001)
+
+5. Debugging (Andreas Beckermann 06.10.2001) TODO!
+5.1 KGameDebugDialog
+5.1.1 Debug KGame
+5.1.3 Debug Messages
+
+---------------------------------------------------------------------
+1. DEFINITIONS
+--------------
+
+First we have to clear some words. The main expressions used in KGame which
+need a definition are
+
+1.1 Message Server
+1.2 Client or Message Client
+1.3 Master
+1.4 Admin
+1.5 Server
+1.6 Player
+
+The most important and confusing ones are Master, Admin and Server. We make
+quite big differerences between those inside KGame.
+
+1.1 Message Server:
+-------------------
+A game has always exactly one object of this class, for local games as well as
+for network games. For network games, this object can be on one of the users
+processes (usually inside KGame), or it can also be on an independant computer,
+that has no idea about what game is played on it.
+
+A KMessageClient object can connect to it. It's main purpose is transmitting
+messages between KMessageClient objects.
+
+The Message Server is the main communication object. It is represented by the
+class KMessageServer. Note that there is also a "Master" and a "Server" which
+both differ heavily from the Message Server!
+
+1.2 Client, Message Client:
+---------------------------
+Each process that wants to take part in the game must have a
+KMessageClient object, that is connected to the Message Server. KGame creates
+this object and connects it to the Messager Server, so that you usually don't
+need to create these of your own. Even in a local game (no network) there
+must be a message server and one message client connected to it. This is usually
+done by the KGame object itself.
+
+Each message client has a unique ID number (a positive integer value, not zero).
+The KMessageClient object, which does the communication with the Message Server
+is called "Message Client" and to simplify the use we call any KGame object (or
+even the game process) that is connected to a game (i.e. even the Master) just
+"Client".
+
+The main purpose of a Client is to connect to a Master (i.e. to a game) and to
+communicate with it. A client has always a KGame object.
+
+1.3 Master:
+-----------
+The process that contains the Message Server is called "Master". In any local
+game this is the game process. The Message Server is started by KGame using
+KGame::setMaster(true) which is automatically done on startup. The Message
+Server is deleted automatically as soon as you connect to another Master.
+So in most cases there is exactly one KGame object / Client which is Master. But
+in one case there can be no KGame object / Client that is Master - if the
+Message Server is started as an own process. This "Message-Server-only" process
+is called "Master" then, although there is no KGame object which is Master. See
+also the definition of Admin!
+
+1.4 Admin:
+----------
+One (and only one) of the Clients is the Admin. He can configure the Message
+Server and the game in general in several ways. He can limit the maximum number
+of connected message clients and can drop the connection to some other clients,
+as well as he can configure game specific ssettings (like max/min players, start
+money, ...). The Admin also initializes newly connected Clients. If the Admin
+himself disconnects, another Client becomes Admin (The Admin can himself elect
+some other Client to become Admin. He himself loses that Admin status then).
+An Admin is *alway* a KGame object. The Admin is usually the same as the Master,
+but if the Master is an own process (i.e. the Message Server has been started
+outside KGame) then Master and Admin differ. An Admin *must* be a KGame object
+while the Master doesn't have to be.
+
+1.5 Server:
+-----------
+The definition of Server differs quite much from the definition of Master.
+A Master just accepts connections and forwards messages. The Server on the other
+side checks these messages, calculates results and sends the results to the
+Clients. That means the Server does all game calculations and doesn't directly
+forward the messages from one Clients to all other Clients.
+KGamer makes it possible to write multiplayer games even without a Server. All
+Clients just send their moves to the Master which forwards them to all Clients.
+Now all Clients calculate the result.
+E.g. in a poker game a player selects two of five cards to be exchanges and
+clicks on "draw" then the client sends the message "Exchange Card-1 and Card-2"
+to the Master. A no-Server solution forwards this to all Clients, and these
+Clients exchange the cards of the player. Note that in a no-Server solution
+(you can also see it as a "every-Client-is-a-Server solution") all Clients must
+have the same random seed and must be of the same version, i.e. the result must
+be the same on all Clients.
+In a Server-Solution on the other hand the Master forwards the Message
+("Exchange Card-1 and Card-2") to the Server only. This Server now calculates
+the result, and sends the new cards back to the Client.
+Both concepts have advantages and disadvantages. It is on you - the game
+developer - to decide which way is better for you.
+E.g. the Server-Solution makes it easier for you to write games. The version
+must not necessarily be the same, you have one central computer which does the
+calcultations. The No-Server-Solution on the other hand decreases network
+traffik as the Clients just send their moves and all Clients can calculate the
+reactions. I'm sure there are a lot of advantages/disadvantages more for both
+concepts.
+
+1.6 Player:
+-----------
+A KPlayer object is always connected to a KGame object and represents a
+player that participates the game. In a network game, every KPlayer object is
+duplicated on every other KGame object connected to the message server with
+virtual KPlayer objects. So at every time in the game, every KGame object has
+the same number of KPlayer objects.
+
+
+2. Game negotiation
+-------------------
+Upon connection  of a client the admin and the client try to negotiate
+the game setup. Basically this means the game of the admin is transferred
+(saved) on the client. However, the client's players are added to the game
+as far as possible. If the addition of the client's players would add more
+players than allowed some players are inactivated. Which players are
+inactivated depends on their networkPriority(). This procedure allows
+easy replacement of players in a constant number game (e.g. chess). If
+this feature is of no interest simply keep the priorities equal (all 0)
+and the client will only add only players if the number of players is
+less or equal the maximum player number.
+
+The following is the negotiation procedure as started by the connection
+of a client. It is initiated in the negotiateNetworkGame() virtual function
+of KGame:
+
+admin:                client:
+------------          ------------
+IdSetupGame
+  QINT16 Library
+         Version
+  QINT32 Application
+         cookie
+                      IdSetupGameContinue;
+                        QValueList<int> player id's
+                        QValueList<int> network priority's
+
+IdGameLoad
+  all game data
+
+IdGameReactivate
+  QValueList<int> id's
+
+IdSyncRandom
+  int randomseed
+
+
+3. Game Properties
+------------------
+A very hard task in a network game is consistency. You have to achieve that all
+properties of the game and of all players have the same value on all clients
+every time. This is because 
+a) the user might be confused if he sees "Player has $0" on client A but 
+"Player has $10" on client B and 
+b) Often game handling depends on those values, e.g. if the example above
+happens the computer might quit the game for the Player on client A because
+he/she doesn't have enough money. But the game continues on client B. 
+Another not that easy task is the network protocol itself. You have to write
+several send() and receive() functions which apply changed values of properties
+to the local property. 
+
+KGameProperty is designed to do all of this for you. KGameProperty is
+implemented as a template so you can use it theoretically for every type of data
+- even for your self defined classes. 
+
+
+3.1 Using KGameProperty
+-----------------------
+It is basically very easy to use a KGameProperty. You first create your own
+class containing the property, e.g:
+class MyGame : public KGame
+{
+[...]
+protected:
+	KGamePropertyInt money;
+	KGamePropertyQString name;
+	KGameProperty<AntotherClass> myProperty;
+};
+KGamePropertyInt is just a typedef for KGameProperty<int> - just like
+KGamePropertyQString. Now you need to register the properties in the constructor
+of the class to the KGamePropertyHandler:
+MyGame::MyGame() : KGame(myCookie)
+{
+ money.registerData(KGamePropertyBase::IdUser+1, dataHandler(), "Money");
+ name.registerData(KGamePropertyBase::IdUser+2, this, "Name");
+ myProperty.registerData(KGamePropertyBase::IdUser+3, dataHandler(), "MyProperty");
+}
+-> You need to specify a *unique* ID. This ID must be greater than
+KGamePropertyBase::IdUser. IDs below this are reserved for KGame. Probably this
+will be changed so that you cannot use IDs below IdUser in the future. Then you
+have to specify the dataHandler(). You can also use a KGame or KPlayer pointer.
+This will automatically use KGame::dataHandler() or KPlayer::dataHandler().
+Finally you *can* provide a name for the property. This will be used for
+debugging in KGameDebugDialog. If you want to save some memory you can leave
+this out.
+Note that if you use pointers to create the properties dynamically they are
+*not* deleted automatically! You MUST delete them yourself!
+Now you can use the KGameProperty like every variable else. See also Section 
+"3.3 Concepts" for restrictions in use.
+
+3.2 Custom Classes
+------------------
+To make custom classes possible you have to implement several operators for your
+them: you need at least << and >> for QDataStream as well as "==" for your own
+class. To overload the "<<" you would e.g. do something like this:
+QDataStream& operator<<(QDataStream& stream, MyData& data)
+{
+ int type = data.type;
+ QString name = data.name;
+ stream << type << name;
+ return stream;
+}
+So you basically just have to split your class to several basic types and stream
+them.
+
+3.3 Concepts
+------------
+You can use KGameProperty basically in two completely different ways. You can
+also use a mixture of both but this is not recommended. The default behaviour
+and therefore also the recommended is the "clean" way: 
+a) Always Consistent. This means that a KGameProperty has always the same value
+on *every* client. This is achieved by using KGameProperty::send() whenever you
+want to change the value using "=". You can still use changeValue() or
+setLocal() but send() will be the default. If you use send() then the value of
+the property does *NOT* change immediately. It is just sent to the
+KMessageServer which forwards the value to all clients. As soon as the new value
+is received from the message server the KGamePropertyHandler (a collection class
+for KGameProperty) calls KGameProperty::load() and changes the value of the
+property. So the game first has to go into the event loop, where the message is
+received. This means to you that you cannot do this:
+myIntProperty = 10;
+int value = myIntProperty;
+As myIntPoperty still has the old value when "value = myIntProperty" is called.
+This might seem to be quite complex, but 
+KGamePropertyHandler::signalPropertyChanged() is emitted whenever a new value is
+assigned so you can connect to this and work immediately with the new value.
+You gain the certainty that the value is the same on every client every time.
+That will safe you a lot of time debugging!
+Another way is the "dirty" way:
+b) Not Always Consistent. Sometimes you really *want* to do something like
+myIntProperty = 10;
+int value = myIntProperty;
+but this is not possible with the default behaviour. If you call
+KGameProperty::setAlwaysConsistent(false) in the constructor (right after
+registerData()) you get another behaviour. "=" means changeValue() now.
+changeValue() also uses send() to change the value but additionally calls
+setLocal() to create a local copy of the property. This copy now has the value
+you supplied with "=" and is deleted again as soon as any value from the network
+is received. 
+
+4. KGameIO
+----------
+The class KGameIO is used to let the players communicate with the server. You
+can plug as many KGameIO objects into a player as you want, e.g. you can plug a
+KGameMouseIO and a KGameKeyIO into a player so that you can control the player
+with the mouse and the keyboard - e.g. in a breakout game. 
+You can probably see the advantage: as most of the control stuff is common in a
+lot of games you can use the same IO class in many different games with very
+small adjustments. 
+You could also put all the IO stuff directly into your KPlayer object, like
+sendBet(int money) for a poker game. But there is a major disadvantage and I'm
+very sure you don't want to use a KPlayer object for your IO stuff as soon as
+you know which disadvantage:
+KGameIO is designed to be able to switch between different IOs "on the fly". So
+you might have a KGamePlayerIO, derived from KGameIO, for your game. But now
+this player (who "owns"/uses the KGamePlayerIO) leaves the game (e.g. because he
+was a remote player). So now the game would be over for every player as one
+player is now out of order. But with KGameIO you can just let any of the
+remaining clients create a KGameComputerIO and plug this into the player. So the
+player now is controlled by the computer and the game can continue. 
+
+Think about it! You don't have to care about removing players when a player
+leaves as you can just replace it! The same works the other way round: imagine a
+game with 10 player (e.g. 5 human and 5 computer players) that has already
+started. You cannot add any further players without restarting. So if there are
+any additional player you can just call KPlayer::removeGameIO() which removes
+the IO of a computer player and then call KPlayer::addGameIO() for the same
+player which adds a GameIO for new human player. That's all!
+
+To achieve this you just have to make sure that you make *all* of your IO
+operations through a KGameIO! So instead of using MyPlayer::sendBet(int money)
+you should use something like MyIO::sendBet(). The amount of money would
+probably be calculated by the game IO itself.
+
+
+
+5. Debugging
+------------
+The general debugging concept (if there is one at all) or general debugging
+hints are not yet written. Feel free to do so
+
+5.1 KGameDebugDialog
+--------------------
+A nice way of debugging a KGame based game is the KGameDebugDialog. Basically
+all you have to do is to add something like "Debug" to your game's menu and add
+a slot like
+slotDebug()
+{
+ KGameDebugDialog* dialog = new KGameDebugDialog(mGame, this);
+ connect(dialog, SIGNAL(finished()), dialog, SLOT(slotDelayedDestruct()));
+ dialog->show();
+}
+that's it.
+You can now click on that menu entry and you get a non-modal dialog where you
+can start to debug :-)
+The dialog consist of several pages. You can easily add your own using
+KDialogBase::addVBoxPage() (for example). 
+
+5.1.1 Debug KGame
+-----------------
+The first page, "Debug KGame" shows on the left most or even all status values of
+KGame. That contains e.g.  minPlayers(), isAdmin(), gametqStatus(), ...
+The right side is probably the more important one. It lists *all* KGameProperties
+which have been inserted to this KGame object (only to this KGame object - not
+the ones that have been added to the players!). Most of the status variables of
+the left side are here again as they are implemented as KGameProperty. You can
+see the name of the property (together with its ID), its value and the policy
+this property uses. Note that "unknwon" will be displayed as name of the
+property if you haven't supplied one. See KGamePropertyBase::registerData() for
+info. You probably always want to supply a name for the property to debug it
+easily. In the future there will be something like
+KGamePropertyHandler::setDebug() so that you can switch off debugging and save
+the memory of the names in a release version. 
+For as long as you use standard types for your properties (int, long, bool,
+...) you should always be able to see the value of the property. If you just see
+"unknown" then this type has not been implemented. You can connect to the signal
+KGamePropertyHandler::signalRequestValue() and supply a QString with the value
+yourself. If you do so for a standard type please also submit a bug report!
+
+Currently the dialog does *not* update automatically! So you alway have to click
+the "update" button when you want a current value. There are several reasons for
+this (and one of them is that i'm too lazy to implement the update ;)). E.g.
+often (very often) a property is just in the background - stores e.g. the
+available money in a game. But you don't want it to update whenever the value
+changes (a player receives/pays money) but only when the value on the screen
+changes.
+
+5.1.2 Debug Players
+-------------------
+This page consists of three widgets. On the very left there is a list of all
+players in the game. Only the IDs are displayed to save space. If you click one
+the other widgets are filled with content. These widgets are quite much the same
+as the ones in "Debug KGame" - the left shows the value of the functions and the
+right one displays all KProperties of a player. Not much to say here - except:
+See "Debug KGame".
+
+If you change to another player the value are also updated.
+
+5.1.3 Debug Messages
+--------------------
+This page is probably not as important as the other ones. It displays *every*
+message that is sent through the KGame object. As a KGameProperry also send
+messages you probably get a lot of them...
+You can exclude message IDs from being displayed (e.g. all game properties). 
+You can also change the sorting of the list to see all messages of a certain ID.
+The default is to sort by time (which is displayed on the left side).
+
diff --git a/libtdegames/kgame/Makefile.am b/libtdegames/kgame/Makefile.am
new file mode 100644
index 00000000..f49bc653
--- /dev/null
+++ b/libtdegames/kgame/Makefile.am
@@ -0,0 +1,29 @@
+
+noinst_LTLIBRARIES = libkgame.la
+
+# compile-order doesn't matter here but maybe we will split these section soon
+
+KGAME = kgame.cpp kplayer.cpp kgamenetwork.cpp kgameproperty.cpp \
+		kgamemessage.cpp kgameio.cpp kgameprocess.cpp kgamechat.cpp \
+		kgamepropertyhandler.cpp kgameerror.cpp kgamesequence.cpp
+KGAME_H = kgame.h kplayer.h kgamenetwork.h kgameproperty.h kgamemessage.h \
+		kgameio.h kgameprocess.h kgamepropertyarray.h \
+		kgamepropertylist.h kgamechat.h kgamepropertyhandler.h \
+		kgameerror.h kgamesequence.h kgameversion.h
+
+KMESSAGE = kmessageio.cpp kmessageserver.cpp kmessageclient.cpp
+KMESSAGE_H = kmessageio.h kmessageserver.h kmessageclient.h
+
+libkgameincludedir=$(includedir)/kgame
+libkgame_la_SOURCES = $(KMESSAGE) $(KGAME)
+
+libkgameinclude_HEADERS = $(KMESSAGE_H) $(KGAME_H)
+
+INCLUDES = -I$(top_srcdir)/libtdegames $(all_includes)
+METASOURCES = AUTO
+
+SUBDIRS = . dialogs
+
+messages:
+#	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
+
diff --git a/libtdegames/kgame/README.LIB b/libtdegames/kgame/README.LIB
new file mode 100644
index 00000000..512edbac
--- /dev/null
+++ b/libtdegames/kgame/README.LIB
@@ -0,0 +1,12 @@
+some thoughts and comments about the lib - usually for KGame hackers
+
+- setMin/MaxPlayers() etc. use KGameProperty::changeValue() which is slightly
+  unclean but as these functions can only called by the ADMIN it doesn't matter.
+- AB: KGamePropertyList && KGamePropertyArray:
+     for PolicyClean||PolicyDirty the values are streamed into a QDataStream as usual
+     for PolicyDirty||PolicyLocal the values are streamed as well but
+     additionally command() is called immediately. The values are read from
+     the stream there. This is some kind of performance loss as it would be
+     faster *not* to stream it but imediately call e.g. insert(). But it will
+     probably save a *lot* of bugs!
+
diff --git a/libtdegames/kgame/TODO b/libtdegames/kgame/TODO
new file mode 100644
index 00000000..2f100b8a
--- /dev/null
+++ b/libtdegames/kgame/TODO
@@ -0,0 +1,41 @@
+- 28.02.2001: Direct computer player for kpoker like games support needs to be 
+              improved. UPDATE (01/10/06): but what is needed there?
+- 05.03.2001: Documentation. I am thinking of an explaination of the 
+              class + methods and example code for the "key" methods. A sample
+              implementation in a small game (like the current kdenonbeta/kgame
+              but with a real sense - mabye use the QT tic-tac-toe example?)
+              would be very great (this could be stuff of a tutorial instead of
+              KGame documentation)
+              MH: Even better idea
+- 03.06.2001: can KGameNetwork::sendSystemMessage be made protected (maybe using
+              friends)? sendSystenMessage AND sendMessage is very confusing to
+              the user...
+- 03.06.2001: can we translate the group of a KPlayer? Probably not as there are
+              no international connections possible then... maybe a group id?
+- 05.06.2001: KGameDialog::saveConfig(KConfig*) might be useful (as well as
+              KGameDialog::loadConfig(KConfig*). Should set an own group in the
+              config file (setGroup("KGameDialog")). Problem: shalll network
+              settings be saved? Could be used for startup configuration (i.e.
+              load the config of the previous game) otherwise.
+- 21.06.2001: KPlayerPropertyArray does not yet support at() and operator[]
+              assignments. Need to check whether the method from QBitArray
+              can be applied
+- 02.04.2001: VERY DANGEROUS: property1=property2 does NOT assign the values, e.g. int
+              but assignes the whole property, i.e. you have then two properties with
+              the same id and everything is wrong
+              01/09/09: FIXED! (AB) TODO: check if this behavior also appears in
+	      KGamePropertyList and KGamePropertyArray. Althogh this should not
+	      be the case
+- 23.09.2001: does the virtual destructor make sense for KGamePropertyBase?
+- 29.09.2001: GGZ integration. I (Andi) already volunteered for this - it's just
+              here so that I don't forget it
+- 06.10.2001: add KGamePropertyHandler::setDebug(false) to clear all debug names
+              (and to not accept new names) of KGameProperty. Will save some
+              memory
+- 06.10.2001: If one kicks a player (in KGameDialog) the client should be kicked
+              as well. Perhaps always disconnect a client when all players from
+              it have disappeared?
+- 07.10.2001: display (List) or (Array) for KGameProperty[List|Array] in
+              KGameDebugDialog as value
+- 08.10.2001: KGamePropertyList|KGamePropertyArray must be ported to new QT3 API
+              (e.g. erase instead of remove, ...)
diff --git a/libtdegames/kgame/dialogs/Makefile.am b/libtdegames/kgame/dialogs/Makefile.am
new file mode 100644
index 00000000..f3c1adbe
--- /dev/null
+++ b/libtdegames/kgame/dialogs/Makefile.am
@@ -0,0 +1,17 @@
+
+noinst_LTLIBRARIES = libkgamedialogs.la
+
+# compile-order doesn't matter here but maybe we will split these section soon
+
+
+libkgamedialogs_la_SOURCES = kgamedialog.cpp kgameconnectdialog.cpp kgameerrordialog.cpp kgamedebugdialog.cpp kgamedialogconfig.cpp
+
+libkgamedialogsincludedir=$(includedir)/kgame
+libkgamedialogsinclude_HEADERS = kgamedialog.h kgameconnectdialog.h kgameerrordialog.h kgamedebugdialog.h kgamedialogconfig.h
+
+INCLUDES = -I$(top_srcdir)/libtdegames -I$(top_srcdir)/libtdegames/kgame $(all_includes)
+METASOURCES = AUTO
+
+messages:
+#	$(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot 
+
diff --git a/libtdegames/kgame/dialogs/kgameconnectdialog.cpp b/libtdegames/kgame/dialogs/kgameconnectdialog.cpp
new file mode 100644
index 00000000..98958ffd
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgameconnectdialog.cpp
@@ -0,0 +1,278 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+
+#include "kgameconnectdialog.h"
+
+#include <knuminput.h>
+#include <klocale.h>
+
+#include <tqlineedit.h>
+#include <tqcombobox.h>
+#include <tqvbuttongroup.h>
+#include <tqlayout.h>
+#include <tqradiobutton.h>
+#include <tqlabel.h>
+#include <dnssd/servicebrowser.h>
+#include <tqpushbutton.h>
+#include <tqgrid.h>
+
+class KGameConnectWidgetPrivate
+{
+ public:
+	KGameConnectWidgetPrivate()
+	{
+		mPort = 0;
+		mHost = 0;
+		mButtonGroup = 0;
+		mBrowser = 0;
+	}
+
+	KIntNumInput* mPort;
+	TQLineEdit* mHost; //KLineEdit?
+	TQVButtonGroup* mButtonGroup;
+	TQComboBox *mClientName;
+	TQLabel *mClientNameLabel;
+	DNSSD::ServiceBrowser *mBrowser;
+	TQLabel *mServerNameLabel;
+	TQLineEdit *mServerName;
+	TQString mType;
+};
+
+KGameConnectWidget::KGameConnectWidget(TQWidget* parent) : TQWidget(parent)
+{
+ d = new KGameConnectWidgetPrivate;
+
+ TQVBoxLayout* vb = new TQVBoxLayout(this, KDialog::spacingHint());
+ d->mButtonGroup = new TQVButtonGroup(this);
+ vb->addWidget(d->mButtonGroup);
+ connect(d->mButtonGroup, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(slotTypeChanged(int)));
+ (void)new TQRadioButton(i18n("Create a network game"), d->mButtonGroup);
+ (void)new TQRadioButton(i18n("Join a network game"), d->mButtonGroup);
+
+ TQGrid* g = new TQGrid(2, this);
+ vb->addWidget(g);
+ g->setSpacing(KDialog::spacingHint());
+ d->mServerNameLabel = new TQLabel(i18n("Game name:"), g);
+ d->mServerName = new TQLineEdit(g);
+ d->mClientNameLabel = new TQLabel(i18n("Network games:"), g);
+ d->mClientName = new TQComboBox(g);
+ connect(d->mClientName,TQT_SIGNAL(activated(int)),TQT_SLOT(slotGameSelected(int)));
+ (void)new TQLabel(i18n("Port to connect to:"), g);
+ d->mPort = new KIntNumInput(g);
+ (void)new TQLabel(i18n("Host to connect to:"), g);
+ d->mHost = new TQLineEdit(g); 
+
+ TQPushButton *button=new TQPushButton(i18n("&Start Network"), this);
+ connect(button, TQT_SIGNAL(clicked()), this, TQT_SIGNAL(signalNetworkSetup()));
+ vb->addWidget(button);
+ // Hide until type is set
+ d->mClientName->hide();
+ d->mClientNameLabel->hide();
+ d->mServerName->hide();
+ d->mServerNameLabel->hide();
+}
+
+void KGameConnectWidget::showDnssdControls() 
+{
+ if (!d->mBrowser) return;
+ if (d->mHost->isEnabled()) {      // client	
+  d->mClientName->show();
+  d->mClientNameLabel->show();
+  d->mServerName->hide();
+  d->mServerNameLabel->hide();
+  slotGameSelected(d->mClientName->currentItem());
+ } else {
+  d->mClientName->hide();
+  d->mClientNameLabel->hide();
+  d->mServerName->show();
+  d->mServerNameLabel->show();
+ }
+}
+
+void KGameConnectWidget::setType(const TQString& type) 
+{
+ d->mType = type;
+ delete d->mBrowser;
+ d->mBrowser = new DNSSD::ServiceBrowser(type);
+ connect(d->mBrowser,TQT_SIGNAL(finished()),TQT_SLOT(slotGamesFound()));
+ d->mBrowser->startBrowse();
+ showDnssdControls();
+}
+
+void KGameConnectWidget::slotGamesFound()
+{
+ bool autoselect=false;
+ if (!d->mClientName->count()) autoselect=true;
+ d->mClientName->clear();
+ TQStringList names;
+ TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator itEnd = d->mBrowser->services().end();
+ for (TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator it = d->mBrowser->services().begin();
+  it!=itEnd; ++it) names << (*it)->serviceName();
+ d->mClientName->insertStringList(names);
+ if (autoselect && d->mClientName->count()) slotGameSelected(0);
+}
+
+void KGameConnectWidget::setName(const TQString& name) 
+{
+ d->mServerName->setText(name);
+}
+
+TQString KGameConnectWidget::gameName() const
+{
+ return d->mServerName->text();
+}
+
+TQString KGameConnectWidget::type() const
+{
+ return d->mType;
+}
+
+void KGameConnectWidget::slotGameSelected(int nr)
+{
+ if (nr>=(d->mBrowser->services().count()) || nr<0) return;
+ if (!d->mHost->isEnabled()) return; // this is server mode, do not overwrite host and port controls
+ DNSSD::RemoteService::Ptr srv = d->mBrowser->services()[nr];
+ if (!srv->isResolved() && !srv->resolve()) return;
+ d->mHost->setText(srv->hostName());
+ d->mPort->setValue(srv->port());
+}
+KGameConnectWidget::~KGameConnectWidget()
+{
+ delete d->mBrowser;
+ delete d;
+}
+
+TQString KGameConnectWidget::host() const
+{ 
+ if (d->mHost->isEnabled()) {
+	return d->mHost->text();
+ } else {
+	return TQString();
+ }
+}
+
+unsigned short int KGameConnectWidget::port() const
+{
+ return d->mPort->value(); 
+}
+
+void KGameConnectWidget::setHost(const TQString& host)
+{ 
+ d->mHost->setText(host); 
+}
+
+void KGameConnectWidget::setPort(unsigned short int port)
+{
+ d->mPort->setValue(port); 
+}
+
+void KGameConnectWidget::setDefault(int state)
+{
+ d->mButtonGroup->setButton(state); 
+ slotTypeChanged(state); 
+}
+
+void KGameConnectWidget::slotTypeChanged(int t)
+{
+ if (t == 0) {
+	d->mHost->setEnabled(false);
+ } else if (t == 1) {
+	d->mHost->setEnabled(true);
+ }
+ showDnssdControls();
+ emit signalServerTypeChanged(t);
+}
+
+class KGameConnectDialogPrivate
+{
+ public:
+	KGameConnectDialogPrivate()
+	{
+		mConnect = 0;
+	}
+
+	KGameConnectWidget* mConnect;
+};
+
+// buttonmask =Ok|Cancel
+KGameConnectDialog::KGameConnectDialog(TQWidget* parent,int buttonmask) : KDialogBase(Plain,
+		i18n("Network Game"),buttonmask , Ok, parent, 0, true, buttonmask!=0)
+{
+ d = new KGameConnectDialogPrivate;
+ TQVBoxLayout* vb = new TQVBoxLayout(plainPage(), spacingHint());
+ d->mConnect = new KGameConnectWidget(plainPage());
+ vb->addWidget(d->mConnect);
+}
+
+KGameConnectDialog::~KGameConnectDialog()
+{
+ delete d;
+}
+
+int KGameConnectDialog::initConnection( unsigned short int& port,
+		TQString& host, TQWidget* parent, bool server)
+{
+ KGameConnectDialog d(parent);
+ d.setHost(host);
+ d.setPort(port);
+ if (server) {
+	d.setDefault(0);
+ } else {
+	d.setDefault(1);
+ }
+
+ int result = d.exec();
+ if (result == TQDialog::Accepted) {
+	host = d.host();
+	port = d.port();
+ }
+ return result;
+}
+
+TQString KGameConnectDialog::host() const
+{
+ return d->mConnect->host();
+}
+
+unsigned short int KGameConnectDialog::port() const
+{
+ return d->mConnect->port();
+}
+
+void KGameConnectDialog::setHost(const TQString& host)
+{
+ d->mConnect->setHost(host);
+}
+
+void KGameConnectDialog::setPort(unsigned short int port)
+{
+ d->mConnect->setPort(port);
+}
+
+void KGameConnectDialog::setDefault(int state)
+{
+ d->mConnect->setDefault(state);
+}
+
+
+
+#include "kgameconnectdialog.moc"
+
diff --git a/libtdegames/kgame/dialogs/kgameconnectdialog.h b/libtdegames/kgame/dialogs/kgameconnectdialog.h
new file mode 100644
index 00000000..0a14183d
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgameconnectdialog.h
@@ -0,0 +1,171 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMECONNECTDIALOG_H__
+#define __KGAMECONNECTDIALOG_H__
+
+#include <kdialogbase.h>
+
+class KGameConnectDialogPrivate;
+class KGameConnectWidgetPrivate;
+
+class KGameConnectWidget : public TQWidget
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameConnectWidget(TQWidget* parent);
+	virtual ~KGameConnectWidget();
+
+	/**
+	 * @param host The host to connect to by default
+	 **/
+	void setHost(const TQString& host);
+
+	/**
+	 * @return The host to connect to or TQString() if the user wants to
+	 * be the MASTER
+	 **/ 
+	TQString host() const;
+
+	/**
+	 * @param port The port that will be shown by default
+	 **/
+	void setPort(unsigned short int port);
+
+	/**
+	 * @return The port to connect to / to listen
+	 **/
+	unsigned short int port() const;
+
+	/**
+	 * Specifies which state is the default (0 = server game; 1 = join game)
+	 * @param state The default state. 0 For a server game, 1 to join a game
+	 **/
+	void setDefault(int state);
+	
+	/**
+	 * Sets DNS-SD service type, both for publishing and browsing
+	 * @param type Service type (something like _kwin4._tcp). 
+	 * It should be unique for application.
+	 * @since 3.4
+	 **/
+	void setType(const TQString& type);
+	
+	/**
+	 * @return service type
+	 */
+	TQString type() const;
+	
+	/** 
+	 * Set game name for publishing. 
+	 * @param name Game name. Important only for server mode. If not
+	 * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
+	 */
+	void setName(const TQString& name);
+	
+	/**
+	 * @return game name. 
+	 */
+	TQString gameName() const;
+
+protected slots:
+	/**
+	 * The type has changed, ie the user switched between creating or
+	 * joining.
+	 **/
+	void slotTypeChanged(int);
+	void slotGamesFound();
+	void slotGameSelected(int);
+
+signals:
+	void signalNetworkSetup();
+  void signalServerTypeChanged(int);
+
+private:
+	void showDnssdControls();
+	KGameConnectWidgetPrivate* d;
+
+};
+
+/**
+ * @short Dialog to ask for host and port
+ *
+ * This Dialog is used to create a game. You call initConnection(port,
+ * TQString(), parent, true) to create a network game (as a server)
+ * or initConnection(port, host, parent) to join a network game.
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameConnectDialog : public KDialogBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameConnectDialog(TQWidget* parent = 0,int buttonmask=Ok|Cancel);
+	virtual ~KGameConnectDialog();
+	
+	/**
+	 * Shows a dialog to either connect to an existing game or to create a
+	 * server game, depending on user's choice.
+	 * @param port The port the user wants to connect to.
+	 * @param host The host the user wants to connect to. Will be
+	 * TQString() if server game is chosen
+	 * @param parent The parent of the dialog
+	 * @param server True to create a network game per default, false to
+	 * join a game by default
+	 **/
+	static int initConnection(unsigned short int& port, TQString& host, TQWidget* parent, bool server = false);
+
+	/**
+	 * @param host The host to connect to by default
+	 **/
+	void setHost(const TQString& host);
+
+	/**
+	 * @return The host to connect to or TQString() if the user wants to
+	 * be the MASTER
+	 **/ 
+	TQString host() const;
+
+	/**
+	 * @param port The port that will be shown by default
+	 **/
+	void setPort(unsigned short int port);
+
+	/**
+	 * @return The port to connect to / to listen
+	 **/
+	unsigned short int port() const;
+
+	/**
+	 * Specifies which state is the default (0 = server game; 1 = join game)
+	 * @param state The default state. 0 For a server game, 1 to join a game
+	 **/
+	void setDefault(int state);
+
+signals:
+	void signalNetworkSetup();
+
+private:
+	KGameConnectDialogPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/dialogs/kgamedebugdialog.cpp b/libtdegames/kgame/dialogs/kgamedebugdialog.cpp
new file mode 100644
index 00000000..49623238
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedebugdialog.cpp
@@ -0,0 +1,548 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kgamedebugdialog.h"
+
+#include "kgamemessage.h"
+#include "kgame.h"
+#include "kplayer.h"
+#include "kgamepropertyhandler.h"
+
+#include <klistview.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+
+#include <tqlayout.h>
+#include <tqstring.h>
+#include <tqintdict.h>
+#include <tqlabel.h>
+#include <tqdatetime.h>
+
+#include <typeinfo>
+
+
+class KGameDebugDialogPrivate
+{
+public:
+	KGameDebugDialogPrivate()
+	{
+		mGame = 0;
+
+		mGamePage = 0;
+		mGameProperties = 0;
+		mGameAddress = 0;
+		mGameId = 0;
+		mGameCookie = 0;
+		mGameMaster = 0;
+		mGameAdmin = 0;
+		mGameOffering = 0;
+		mGametqStatus = 0;
+		mGameRunning = 0;
+		mGameMaxPlayers = 0;
+		mGameMinPlayers = 0;
+		mGamePlayerCount = 0;
+
+		mPlayerPage = 0;
+		mPlayerList = 0;
+		mPlayerProperties = 0;
+		mPlayerAddress = 0;
+		mPlayerId = 0;
+		mPlayerName = 0;
+		mPlayerGroup = 0;
+		mPlayerUserId = 0;
+		mPlayerMyTurn = 0;
+		mPlayerAsyncInput= 0;
+		mPlayerKGameAddress = 0;
+		mPlayerVirtual = 0;
+		mPlayerActive = 0;
+		mPlayerRtti = 0;
+		mPlayerNetworkPriority = 0;
+
+		mMessagePage = 0;
+		mMessageList = 0;
+		mHideIdList = 0;
+	}
+
+	const KGame* mGame;
+
+	TQFrame* mGamePage;
+	KListView* mGameProperties;
+	TQListViewItem* mGameAddress;
+	TQListViewItem* mGameId;
+	TQListViewItem* mGameCookie;
+	TQListViewItem* mGameMaster;
+	TQListViewItem* mGameAdmin;
+	TQListViewItem* mGameOffering;
+	TQListViewItem* mGametqStatus;
+	TQListViewItem* mGameRunning;
+	TQListViewItem* mGameMaxPlayers;
+	TQListViewItem* mGameMinPlayers;
+	TQListViewItem* mGamePlayerCount;
+	
+	TQFrame* mPlayerPage;
+	KListBox* mPlayerList;
+	KListView* mPlayerProperties;
+	TQListViewItem* mPlayerAddress;
+	TQListViewItem* mPlayerId;
+	TQListViewItem* mPlayerName;
+	TQListViewItem* mPlayerGroup;
+	TQListViewItem* mPlayerUserId;
+	TQListViewItem* mPlayerMyTurn;
+	TQListViewItem* mPlayerAsyncInput;
+	TQListViewItem* mPlayerKGameAddress;
+	TQListViewItem* mPlayerVirtual;
+	TQListViewItem* mPlayerActive;
+	TQListViewItem* mPlayerRtti;
+	TQListViewItem* mPlayerNetworkPriority;
+
+	TQFrame* mMessagePage;
+	KListView* mMessageList;
+	KListBox* mHideIdList;
+};
+
+KGameDebugDialog::KGameDebugDialog(KGame* g, TQWidget* parent, bool modal) :
+		KDialogBase(Tabbed, i18n("KGame Debug Dialog"), Close, Close, 
+		parent, 0, modal, true)
+{
+ d = new KGameDebugDialogPrivate;
+
+ initGamePage();
+ initPlayerPage();
+ initMessagePage();
+
+ setKGame(g);
+}
+
+KGameDebugDialog::~KGameDebugDialog()
+{
+ delete d;
+}
+
+void KGameDebugDialog::initGamePage()
+{
+ d->mGamePage = addPage(i18n("Debug &KGame"));
+ TQVBoxLayout* topLayout = new TQVBoxLayout(d->mGamePage, marginHint(), spacingHint());
+ TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
+
+ KListView* v = new KListView(d->mGamePage);
+ v->addColumn(i18n("Data"));
+ v->addColumn(i18n("Value"));
+ tqlayout->addWidget(v);
+
+ d->mGameProperties = new KListView(d->mGamePage);
+ d->mGameProperties->addColumn(i18n("Property"));
+ d->mGameProperties->addColumn(i18n("Value"));
+ d->mGameProperties->addColumn(i18n("Policy"));
+ tqlayout->addWidget(d->mGameProperties);
+ 
+ TQPushButton* b = new TQPushButton(i18n("Update"), d->mGamePage);
+ connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdateGameData()));
+ topLayout->addWidget(b);
+
+// game data
+ d->mGameAddress = new TQListViewItem(v, i18n("KGame Pointer"));
+ d->mGameId = new TQListViewItem(v, i18n("Game ID"));
+ d->mGameCookie = new TQListViewItem(v, i18n("Game Cookie"));
+ d->mGameMaster = new TQListViewItem(v, i18n("Is Master"));
+ d->mGameAdmin = new TQListViewItem(v, i18n("Is Admin"));
+ d->mGameOffering = new TQListViewItem(v, i18n("Is Offering Connections"));
+ d->mGametqStatus = new TQListViewItem(v, i18n("Game Status"));
+ d->mGameRunning = new TQListViewItem(v, i18n("Game is Running"));
+ d->mGameMaxPlayers = new TQListViewItem(v, i18n("Maximal Players"));
+ d->mGameMinPlayers = new TQListViewItem(v, i18n("Minimal Players"));
+ d->mGamePlayerCount = new TQListViewItem(v, i18n("Players"));
+}
+
+void KGameDebugDialog::initPlayerPage()
+{
+ d->mPlayerPage = addPage(i18n("Debug &Players"));
+ TQVBoxLayout* topLayout = new TQVBoxLayout(d->mPlayerPage, marginHint(), spacingHint());
+ TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
+
+ //TODO: connect to the KGame signals for joined/removed players!!!
+ TQVBoxLayout* listLayout = new TQVBoxLayout(tqlayout);
+ TQLabel* listLabel = new TQLabel(i18n("Available Players"), d->mPlayerPage);
+ listLayout->addWidget(listLabel);
+ d->mPlayerList = new KListBox(d->mPlayerPage);
+ connect(d->mPlayerList, TQT_SIGNAL(executed(TQListBoxItem*)), this, TQT_SLOT(slotUpdatePlayerData(TQListBoxItem*)));
+ listLayout->addWidget(d->mPlayerList);
+ d->mPlayerList->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Expanding));
+
+ KListView* v = new KListView(d->mPlayerPage);
+ tqlayout->addWidget(v);
+ v->addColumn(i18n("Data"));
+ v->addColumn(i18n("Value"));
+ 
+ d->mPlayerProperties = new KListView(d->mPlayerPage);
+ d->mPlayerProperties->addColumn(i18n("Property"));
+ d->mPlayerProperties->addColumn(i18n("Value"));
+ d->mPlayerProperties->addColumn(i18n("Policy"));
+ tqlayout->addWidget(d->mPlayerProperties);
+ 
+ TQPushButton* b = new TQPushButton(i18n("Update"), d->mPlayerPage);
+ connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdatePlayerList()));
+ topLayout->addWidget(b);
+
+ d->mPlayerAddress = new TQListViewItem(v, i18n("Player Pointer"));
+ d->mPlayerId = new TQListViewItem(v, i18n("Player ID"));
+ d->mPlayerName = new TQListViewItem(v, i18n("Player Name"));
+ d->mPlayerGroup = new TQListViewItem(v, i18n("Player Group"));
+ d->mPlayerUserId = new TQListViewItem(v, i18n("Player User ID"));
+ d->mPlayerMyTurn = new TQListViewItem(v, i18n("My Turn"));
+ d->mPlayerAsyncInput = new TQListViewItem(v, i18n("Async Input"));
+ d->mPlayerKGameAddress = new TQListViewItem(v, i18n("KGame Address"));
+ d->mPlayerVirtual = new TQListViewItem(v, i18n("Player is Virtual"));
+ d->mPlayerActive = new TQListViewItem(v, i18n("Player is Active"));
+ d->mPlayerRtti = new TQListViewItem(v, i18n("RTTI"));
+ d->mPlayerNetworkPriority = new TQListViewItem(v, i18n("Network Priority"));
+}
+
+void KGameDebugDialog::initMessagePage()
+{
+ d->mMessagePage = addPage(i18n("Debug &Messages"));
+ TQGridLayout* tqlayout = new TQGridLayout(d->mMessagePage, 11, 7, marginHint(), spacingHint());
+ d->mMessageList = new KListView(d->mMessagePage);
+ tqlayout->addMultiCellWidget(d->mMessageList, 0, 9, 0, 3);
+ d->mMessageList->addColumn(i18n("Time"));
+ d->mMessageList->addColumn(i18n("ID"));
+ d->mMessageList->addColumn(i18n("Receiver"));
+ d->mMessageList->addColumn(i18n("Sender"));
+ d->mMessageList->addColumn(i18n("ID - Text"));
+
+ TQPushButton* hide = new TQPushButton(i18n("&>>"), d->mMessagePage);
+ connect(hide, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotHideId()));
+ tqlayout->addWidget(hide, 4, 4);
+ 
+ TQPushButton* show = new TQPushButton(i18n("&<<"), d->mMessagePage);
+ connect(show, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotShowId()));
+ tqlayout->addWidget(show, 6, 4);
+
+ TQLabel* l = new TQLabel(i18n("Do not show IDs:"), d->mMessagePage);
+ tqlayout->addMultiCellWidget(l, 0, 0, 5, 6);
+ d->mHideIdList = new KListBox(d->mMessagePage);
+ tqlayout->addMultiCellWidget(d->mHideIdList, 1, 8, 5, 6);
+
+ TQPushButton* clear = new KPushButton(KStdGuiItem::clear(), d->mMessagePage);
+ connect(clear, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotClearMessages()));
+ tqlayout->addMultiCellWidget(clear, 10, 10, 0, 6);
+ //TODO: "show all but..." and "show nothing but..."
+}
+
+void KGameDebugDialog::clearPlayerData()
+{
+ d->mPlayerAddress->setText(1, "");
+ d->mPlayerId->setText(1, "");
+ d->mPlayerName->setText(1, "");
+ d->mPlayerGroup->setText(1, "");
+ d->mPlayerUserId->setText(1, "");
+ d->mPlayerMyTurn->setText(1, "");
+ d->mPlayerAsyncInput->setText(1, "");
+ d->mPlayerKGameAddress->setText(1, "");
+ d->mPlayerVirtual->setText(1, "");
+ d->mPlayerActive->setText(1, "");
+ d->mPlayerRtti->setText(1, "");
+ d->mPlayerNetworkPriority->setText(1, "");
+
+ d->mPlayerProperties->clear();
+}
+
+void KGameDebugDialog::clearGameData()
+{
+ d->mGameAddress->setText(1, "");
+ d->mGameId->setText(1, "");
+ d->mGameCookie->setText(1, "");
+ d->mGameMaster->setText(1, "");
+ d->mGameAdmin->setText(1, "");
+ d->mGameOffering->setText(1, "");
+ d->mGametqStatus->setText(1, "");
+ d->mGameRunning->setText(1, "");
+ d->mGameMaxPlayers->setText(1, "");
+ d->mGameMinPlayers->setText(1, "");
+
+ d->mGameProperties->clear();
+}
+
+void KGameDebugDialog::slotUpdatePlayerData()
+{
+ if (!d->mGame || d->mPlayerList->currentItem() == -1) {
+	return;
+ }
+ slotUpdatePlayerData(d->mPlayerList->item(d->mPlayerList->currentItem()));
+}
+
+void KGameDebugDialog::slotUpdatePlayerList()
+{
+ TQListBoxItem* i = d->mPlayerList->firstItem(); 
+ for (; i; i = d->mPlayerList->firstItem()) {
+	removePlayer(i);
+ }
+
+ TQPtrList<KPlayer> list = *d->mGame->playerList();
+ for (KPlayer* p = list.first(); p; p = list.next()) {
+	addPlayer(p);
+ }
+}
+
+void KGameDebugDialog::slotUpdateGameData()
+{
+ if (!d->mGame) {
+	d->mGameAddress->setText(1, i18n("NULL pointer"));
+	return;
+}
+
+ clearGameData();
+
+ TQString buf;
+ buf.sprintf("%p", d->mGame);
+ d->mGameAddress->setText(1, buf);
+ d->mGameId->setText(1, TQString::number(d->mGame->gameId()));
+ d->mGameCookie->setText(1, TQString::number(d->mGame->cookie()));
+ d->mGameMaster->setText(1, d->mGame->isMaster() ? i18n("True") : i18n("False"));
+ d->mGameAdmin->setText(1, d->mGame->isAdmin() ? i18n("True") : i18n("False"));
+ d->mGameOffering->setText(1, d->mGame->isOfferingConnections() ? i18n("True") : i18n("False"));
+ d->mGametqStatus->setText(1, TQString::number(d->mGame->gametqStatus()));
+ d->mGameRunning->setText(1, d->mGame->isRunning() ? i18n("True") : i18n("False"));
+ d->mGameMaxPlayers->setText(1, TQString::number(d->mGame->maxPlayers()));
+ d->mGameMinPlayers->setText(1, TQString::number(d->mGame->minPlayers()));
+ d->mGamePlayerCount->setText(1, TQString::number(d->mGame->playerCount()));
+
+//TODO ios
+
+ KGamePropertyHandler* handler = d->mGame->dataHandler();
+ TQIntDictIterator<KGamePropertyBase> it(handler->dict());
+ while (it.current()) {
+	TQString policy;
+	switch (it.current()->policy()) {
+		case KGamePropertyBase::PolicyClean:
+			policy = i18n("Clean");
+			break;
+		case KGamePropertyBase::PolicyDirty:
+			policy = i18n("Dirty");
+			break;
+		case KGamePropertyBase::PolicyLocal:
+			policy = i18n("Local");
+			break;
+		case KGamePropertyBase::PolicyUndefined:
+		default:
+			policy = i18n("Undefined");
+			break;
+	}
+	(void) new TQListViewItem(d->mGameProperties,
+			handler->propertyName(it.current()->id()),
+			handler->propertyValue(it.current()), 
+			policy);
+//	kdDebug(11001) << k_funcinfo << ": checking for all game properties: found property name " << name << endl;
+	++it;
+ }
+}
+
+void KGameDebugDialog::slotUpdatePlayerData(TQListBoxItem* item)
+{
+ if (!item || !d->mGame) {
+	return;
+ }
+
+ KPlayer* p = d->mGame->findPlayer(item->text().toInt());
+
+ if (!p) {
+	kdError(11001) << k_funcinfo << ": cannot find player" << endl;
+	return;
+ }
+
+ clearPlayerData();
+
+ TQString buf;
+ buf.sprintf("%p", p);
+ d->mPlayerAddress->setText(1, buf);
+ d->mPlayerId->setText(1, TQString::number(p->id()));
+ d->mPlayerName->setText(1, p->name());
+ d->mPlayerGroup->setText(1, p->group());
+ d->mPlayerUserId->setText(1, TQString::number(p->userId()));
+ d->mPlayerMyTurn->setText(1, p->myTurn() ? i18n("True") : i18n("False"));
+ d->mPlayerAsyncInput->setText(1, p->asyncInput() ? i18n("True") : i18n("False"));
+ buf.sprintf("%p", p->game());
+ d->mPlayerKGameAddress->setText(1, buf);
+ d->mPlayerVirtual->setText(1, p->isVirtual() ? i18n("True") : i18n("False"));
+ d->mPlayerActive->setText(1, p->isActive() ? i18n("True") : i18n("False"));
+ d->mPlayerRtti->setText(1, TQString::number(p->rtti()));
+ d->mPlayerNetworkPriority->setText(1, TQString::number(p->networkPriority()));
+
+//TODO ios
+
+// Properties
+ KGamePropertyHandler * handler = p->dataHandler();
+ TQIntDictIterator<KGamePropertyBase> it((handler->dict()));
+ while (it.current()) {
+	TQString policy;
+	switch (it.current()->policy()) {
+		case KGamePropertyBase::PolicyClean:
+			policy = i18n("Clean");
+			break;
+		case KGamePropertyBase::PolicyDirty:
+			policy = i18n("Dirty");
+			break;
+		case KGamePropertyBase::PolicyLocal:
+			policy = i18n("Local");
+			break;
+		case KGamePropertyBase::PolicyUndefined:
+		default:
+			policy = i18n("Undefined");
+			break;
+	}
+	(void)new TQListViewItem(d->mPlayerProperties,
+			handler->propertyName(it.current()->id()),
+			handler->propertyValue(it.current()),
+			policy);
+	++it;
+ }
+}
+
+void KGameDebugDialog::clearPages()
+{
+ clearPlayerData();
+ clearGameData();
+ d->mPlayerList->clear();
+ slotClearMessages();
+}
+
+void KGameDebugDialog::setKGame(const KGame* g)
+{
+ slotUnsetKGame();
+ d->mGame = g;
+ if (g) {
+ //TODO: connect to the KGame signals for joined/removed players!!!
+	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
+//	connect();
+
+	TQPtrList<KPlayer> list = *d->mGame->playerList();
+	for (KPlayer* p = list.first(); p; p = list.next()) {
+		addPlayer(p);
+	}
+
+	slotUpdateGameData();
+
+	connect(d->mGame, TQT_SIGNAL(signalMessageUpdate(int, TQ_UINT32, TQ_UINT32)), this, TQT_SLOT(slotMessageUpdate(int, TQ_UINT32, TQ_UINT32)));
+ }
+}
+
+void KGameDebugDialog::slotUnsetKGame()
+{
+ if (d->mGame) {
+	disconnect(d->mGame, 0, this, 0);
+ }
+ d->mGame = 0;
+ clearPages();
+}
+
+void KGameDebugDialog::addPlayer(KPlayer* p)
+{
+ if (!p) {
+	kdError(11001) << "trying to add NULL player" << endl;
+	return;
+ }
+
+ (void) new TQListBoxText(d->mPlayerList, TQString::number(p->id()));
+ //TODO connect to signals, like deleted/removed, ...
+}
+
+void KGameDebugDialog::removePlayer(TQListBoxItem* i)
+{
+ if (!i || !d->mGame) {
+	return;
+ }
+ KPlayer* p = d->mGame->findPlayer(i->text().toInt());
+ if (!p) {
+	return;
+ }
+ disconnect(p, 0, this, 0);
+ if (i->isSelected()) {
+	clearPlayerData();
+ }
+ delete i;
+}
+
+void KGameDebugDialog::slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+ if (!showId(msgid)) {
+	return;
+ }
+ TQString msgidText = KGameMessage::messageId2Text(msgid);
+ if (msgidText.isNull()) {
+	if (msgid > KGameMessage::IdUser) {
+		emit signalRequestIdName(msgid-KGameMessage::IdUser, true, msgidText);
+	} else {
+		emit signalRequestIdName(msgid, false, msgidText);
+	}
+	if (msgidText.isNull()) {
+		msgidText = i18n("Unknown");
+	}
+ }
+ (void) new TQListViewItem( d->mMessageList, TQTime::currentTime().toString(), 
+		TQString::number(msgid), TQString::number(receiver), 
+		TQString::number(sender), msgidText);
+}
+
+void KGameDebugDialog::slotClearMessages()
+{
+ d->mMessageList->clear();
+}
+
+void KGameDebugDialog::slotShowId()
+{
+/* TQListBoxItem* i = d->mHideIdList->firstItem();
+ for (; i; i = i->next()) {
+	if (i->selected()) {
+		d->mHideIdList->removeItem(i->);
+	}
+ }*/
+ if (!d->mHideIdList->currentItem()) {
+	return;
+ }
+ d->mHideIdList->removeItem(d->mHideIdList->currentItem());
+}
+
+void KGameDebugDialog::slotHideId()
+{
+ if (!d->mMessageList->currentItem()) {
+	return;
+ }
+ int msgid = d->mMessageList->currentItem()->text(1).toInt();
+ if (!showId(msgid)) {
+	return;
+ }
+ (void)new TQListBoxText(d->mHideIdList, TQString::number(msgid));
+}
+
+bool KGameDebugDialog::showId(int msgid)
+{
+ TQListBoxItem* i = d->mHideIdList->firstItem();
+ for (; i; i = i->next()) {
+	if (i->text().toInt() == msgid) {
+		return false;
+	}
+ }
+ return true;
+}
+
+
+#include "kgamedebugdialog.moc"
diff --git a/libtdegames/kgame/dialogs/kgamedebugdialog.h b/libtdegames/kgame/dialogs/kgamedebugdialog.h
new file mode 100644
index 00000000..92b35597
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedebugdialog.h
@@ -0,0 +1,150 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEDEBUGDIALOG_H__
+#define __KGAMEDEBUGDIALOG_H__
+
+#include <kdialogbase.h>
+#include <kdemacros.h>
+
+class KGame;
+class KGameIO;
+class KPlayer;
+class KGamePropertyBase;
+
+class KGameDebugDialogPrivate;
+
+class KDE_EXPORT KGameDebugDialog : public KDialogBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDebugDialog(KGame* g, TQWidget* parent, bool modal = false);
+	~KGameDebugDialog();
+
+	/**
+	 * Automatically connects the KGame object to all error dependant slots. 
+	 * Create a KGameErrorDialog object, call this function and forget
+	 * everything.
+	 * @param g The KGame which will emit the erorrs (or not ;-) )
+	 **/
+	void setKGame(const KGame* g);
+
+public slots:
+	/**
+	 * Unsets a @ref KGame which has been set using @ref setKGame before.
+	 * This is called automatically when the @ref KGame object is destroyed
+	 * and you normally don't have to call this yourself.
+	 *
+	 * Note that @ref setKGame also unsets an already existing @ref KGame
+	 * object if exising.
+	 **/
+	void slotUnsetKGame();
+
+	/**
+	 * Update the data of the @ref KGame object
+	 **/
+	void slotUpdateGameData();
+
+	/**
+	 * Update the properties of the currently selected player
+	 **/
+	void slotUpdatePlayerData();
+
+	/**
+	 * Updates the list of players and calls @ref clearPlayerData. Note that
+	 * after this call NO player is selected anymore.
+	 **/
+	void slotUpdatePlayerList();
+
+	void slotClearMessages();
+
+signals:
+	/**
+	 * This signal is emitted when the "debug messages" page couldn't find
+	 * the name of a message id. This is usually the case for user-defined
+	 * messages. KGameDebugDialog asks you to give the msgid a name.
+	 * @param messageid The ID of the message. As given to @ref
+	 * KGame::sendMessage
+	 * @param userid User defined msgIds are internally increased by
+	 * @ref KGameMessage::IdUser. You don't have to care about this but if
+	 * this signal is emitted with userid=false (shouldn't happen) then the
+	 * name of an internal message as defined in @ref
+	 * KGameMessage::GameMessageIds couldn't be found.
+	 * @param name The name of the msgid. You have to fill this!
+	 **/
+	void signalRequestIdName(int messageid, bool userid, TQString& name);
+
+protected:
+	void clearPages();
+
+	/**
+	 * Clear the data of the player view. Note that the player list is NOT
+	 * cleared.
+	 **/
+	void clearPlayerData();
+
+	/**
+	 * Clear the data view of the @ref KGame object
+	 **/
+	void clearGameData();
+
+	/**
+	 * Add a new player to the player list
+	 **/
+	void addPlayer(KPlayer* p);
+
+	/**
+	 * Remove a player from the list
+	 **/
+	void removePlayer(TQListBoxItem* item);
+
+	/**
+	 * @return Whether messages with this msgid shall be displayed or not
+	 **/
+	bool showId(int msgid);
+
+protected slots:
+	/**
+	 * Update the data of the player specified in item
+	 * @param item The @ref TQListBoxItem of the player to be updated. Note
+	 * that the text of this item MUST be the ID of the player
+	 **/
+	void slotUpdatePlayerData(TQListBoxItem* item);
+
+	void slotShowId();
+	void slotHideId();
+
+	/**
+	 * A message has been received - see @ref KGame::signalMessageUpdate
+	 **/
+	void slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
+
+private:
+	void initGamePage();
+	void initPlayerPage();
+	void initMessagePage();
+
+private:
+	KGameDebugDialogPrivate* d;
+};
+
+
+#endif
diff --git a/libtdegames/kgame/dialogs/kgamedialog.cpp b/libtdegames/kgame/dialogs/kgamedialog.cpp
new file mode 100644
index 00000000..c03df4ff
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedialog.cpp
@@ -0,0 +1,347 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include <tqlayout.h>
+#include <tqvbox.h>
+
+#include <klocale.h>
+
+#include "kgame.h"
+#include "kplayer.h"
+#include "kgamedialogconfig.h"
+
+#include "kgamedialog.h"
+
+#include "kgamedialog.moc"
+
+class KGameDialogPrivate
+{
+public:
+	KGameDialogPrivate() 
+	{
+		mGamePage = 0;
+		mNetworkPage = 0;
+		mMsgServerPage = 0;
+		mTopLayout = 0;
+
+		mNetworkConfig = 0;
+		mGameConfig = 0;
+
+		mOwner = 0;
+		mGame = 0;
+	}
+
+	TQVBox* mGamePage;
+	TQVBox* mNetworkPage;
+	TQVBox* mMsgServerPage;// unused here?
+	TQVBoxLayout* mTopLayout;
+	KGameDialogNetworkConfig* mNetworkConfig;
+	KGameDialogGeneralConfig* mGameConfig;
+
+// a list of all config widgets added to this dialog
+	TQPtrList<KGameDialogConfig> mConfigWidgets;
+
+// just pointers:
+	KPlayer* mOwner;
+	KGame* mGame;
+};
+
+KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
+		TQWidget* parent, bool modal)
+	: KDialogBase(Tabbed, title, Ok|Default|Apply,
+	Ok, parent, 0, modal, true)
+{
+ init(g, owner);
+}
+
+KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
+		TQWidget* parent, long initConfigs, int chatMsgId, bool modal)
+	: KDialogBase(Tabbed, title, Ok|Default|Apply,
+	Ok, parent, 0, modal, true)
+{
+ init(g, owner);
+ if ((ConfigOptions)initConfigs!=NoConfig) {
+	initDefaultDialog((ConfigOptions)initConfigs, chatMsgId);
+ }
+}
+
+void KGameDialog::init(KGame* g, KPlayer* owner)
+{
+//AB: do we need a "Cancel" Button? currently removed
+
+// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+ d = new KGameDialogPrivate;
+
+ setOwner(owner);
+ setKGame(g);
+ if (g) {
+	setAdmin(g->isAdmin());
+ } else {
+	setAdmin(false);
+ }
+}
+
+void KGameDialog::initDefaultDialog(ConfigOptions initConfigs, int chatMsgId)
+{
+ if (initConfigs & GameConfig) {
+	kdDebug() << "add gameconf" << endl;
+	addGameConfig(new KGameDialogGeneralConfig(0));
+ }
+ if (initConfigs & NetworkConfig) {
+	addNetworkConfig(new KGameDialogNetworkConfig(0));
+ }
+ if (initConfigs & (MsgServerConfig) ) {
+	addMsgServerConfig(new KGameDialogMsgServerConfig(0));
+ }
+ if (initConfigs & ChatConfig) {
+	KGameDialogChatConfig * c = new KGameDialogChatConfig(chatMsgId, 0);
+	if (d->mGamePage) {
+		addChatWidget(c, d->mGamePage);
+	} else {
+		addConfigPage(c, i18n("&Chat"));
+	}
+ }
+ if (initConfigs & BanPlayerConfig) {
+	// add the connection management system - ie the widget where the ADMIN can
+	// kick players out
+	if (d->mNetworkPage) {
+		// put it on the network page
+		addConnectionList(new KGameDialogConnectionConfig(0), d->mNetworkPage);
+	} else {
+		// if no network page available put it on an own page
+		addConfigPage(new KGameDialogConnectionConfig(0), i18n("C&onnections"));
+	}
+ }
+}
+
+KGameDialog::~KGameDialog()
+{
+// kdDebug(11001) << "DESTRUCT KGameDialog" << this << endl;
+ d->mConfigWidgets.setAutoDelete(true);
+ d->mConfigWidgets.clear();
+ delete d;
+}
+
+void KGameDialog::addGameConfig(KGameDialogGeneralConfig* conf)
+{
+ if (!conf) {
+	return;
+ }
+ d->mGameConfig = conf;
+ d->mGamePage = addConfigPage(d->mGameConfig, i18n("&Game"));
+}
+
+void KGameDialog::addNetworkConfig(KGameDialogNetworkConfig* netConf)
+{
+ if (!netConf) {
+	return;
+ }
+ d->mNetworkConfig = netConf;
+ d->mNetworkPage = addConfigPage(netConf, i18n("&Network"));
+}
+
+void KGameDialog::addMsgServerConfig(KGameDialogMsgServerConfig* msgConf)
+{
+ if (!msgConf) {
+	return;
+ }
+ d->mMsgServerPage = addConfigPage(msgConf, i18n("&Message Server"));
+}
+
+void KGameDialog::addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent)
+{
+ if (!chat) {
+	return;
+ }
+ if (!parent) {
+	parent = d->mGamePage;
+ }
+ if (!parent) {
+	kdError(11001) << "cannot add chat widget without page" << endl;
+	return;
+ }
+ addConfigWidget(chat, parent);
+}
+
+void KGameDialog::addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent)
+{
+ if (!c) {
+	return;
+ }
+ if (!parent) {
+	parent = d->mNetworkPage;
+ }
+ if (!parent) {
+	kdError(11001) << "Cannot add connection list without page" << endl;
+	return;
+ }
+ addConfigWidget(c, parent);
+}
+
+TQVBox *KGameDialog::configPage(ConfigOptions which)
+{
+ TQVBox *box = 0;
+ switch(which)
+ {
+	case NetworkConfig:
+		box = d->mNetworkPage;
+		break;
+	case GameConfig:
+		box = d->mGamePage;
+		break;
+	case MsgServerConfig:
+		box = d->mMsgServerPage;
+		break;
+	default:
+		kdError(11001) << k_funcinfo << ": Parameter " << which << " not supported" << endl;
+ }
+ return box;
+}
+
+TQVBox* KGameDialog::addConfigPage(KGameDialogConfig* widget, const TQString& title)
+{
+ if (!widget) {
+	kdError(11001) << "Cannot add NULL config widget" << endl;
+	return 0;
+ }
+ TQVBox* page = addVBoxPage(title);
+ addConfigWidget(widget, page);
+ return page;
+}
+
+void KGameDialog::addConfigWidget(KGameDialogConfig* widget, TQWidget* parent)
+{
+ if (!widget) {
+	kdError(11001) << "Cannot add NULL config widget" << endl;
+	return;
+ }
+ if (!parent) {
+	kdError(11001) << "Cannot reparent to NULL widget" << endl;
+	return;
+ }
+// kdDebug(11001) << "reparenting widget" << endl;
+ widget->reparent(parent, TQPoint(0,0));
+ d->mConfigWidgets.append(widget);
+ connect(widget, TQT_SIGNAL(destroyed(TQObject*)), this, TQT_SLOT(slotRemoveConfigWidget(TQObject*)));
+ if (!d->mGame) {
+	kdWarning(11001) << "No game has been set!" << endl;
+ } else {
+	widget->setKGame(d->mGame);
+	widget->setAdmin(d->mGame->isAdmin());
+ }
+ if (!d->mOwner) {
+	kdWarning(11001) << "No player has been set!" << endl;
+ } else {
+	widget->setOwner(d->mOwner);
+ }
+ widget->show();
+}
+
+KGameDialogGeneralConfig* KGameDialog::gameConfig() const
+{ return d->mGameConfig; }
+KGameDialogNetworkConfig* KGameDialog::networkConfig() const
+{ return d->mNetworkConfig; }
+
+void KGameDialog::slotApply()
+{
+ submitToKGame();
+}
+
+void KGameDialog::slotDefault()
+{
+ if (!d->mGame) {
+	return;
+ }
+ 
+//TODO *only*  call setKGame/setOwner for the *current* page!!
+ setKGame(d->mGame);
+ setOwner(d->mOwner);
+}
+
+void KGameDialog::slotOk()
+{
+ slotApply();
+ TQDialog::accept();
+}
+
+void KGameDialog::setOwner(KPlayer* owner)
+{
+//AB: note: NULL player is ok!
+ d->mOwner = owner;
+ for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
+	if (d->mConfigWidgets.at(i)) {
+		d->mConfigWidgets.at(i)->setOwner(d->mOwner);
+		//TODO: hide playerName in KGameDialogGeneralConfig
+	} else {
+		kdError(11001) << "NULL widget??" << endl;
+	}
+ }
+}
+
+void KGameDialog::setKGame(KGame* g)
+{
+ if (d->mGame) {
+	disconnect(d->mGame, 0, this, 0);
+ }
+ d->mGame = g;
+ for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
+	d->mConfigWidgets.at(i)->setKGame(d->mGame);
+ }
+ if (d->mGame) {
+	setAdmin(d->mGame->isAdmin());
+	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
+	connect(d->mGame, TQT_SIGNAL(signalAdminStatusChanged(bool)), 
+			this, TQT_SLOT(setAdmin(bool)));
+ }
+}
+
+void KGameDialog::setAdmin(bool admin)
+{
+ for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
+	d->mConfigWidgets.at(i)->setAdmin(admin);
+ }
+}
+
+void KGameDialog::slotUnsetKGame() // called when KGame is destroyed
+{ setKGame(0); }
+
+void KGameDialog::submitToKGame()
+{
+ if (!d->mGame) {
+	kdError(11001) << k_funcinfo << ": no game has been set" << endl;
+	return;
+ }
+ if (!d->mOwner) {
+	kdError(11001) << k_funcinfo << ": no player has been set" << endl;
+	return;
+ }
+
+ for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
+// kdDebug(11001) << "submit to kgame " << i << endl;
+	d->mConfigWidgets.at(i)->submitToKGame(d->mGame, d->mOwner);
+// kdDebug(11001) << "done: submit to kgame " << i << endl;
+ }
+}
+
+void KGameDialog::slotRemoveConfigWidget(TQObject* configWidget)
+{
+ d->mConfigWidgets.removeRef((KGameDialogConfig*)configWidget);
+}
+
diff --git a/libtdegames/kgame/dialogs/kgamedialog.h b/libtdegames/kgame/dialogs/kgamedialog.h
new file mode 100644
index 00000000..423f5de1
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedialog.h
@@ -0,0 +1,321 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+// NAMING
+// please follow these naming rules if you add/change classes:
+// the main dialog is named KGameDialog and the base config widget
+// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
+// XYZ = the name of the config widget, like "general" or "network") and are
+// inherited from KGameDialogConfig.
+
+#ifndef __KGAMEDIALOG_H__
+#define __KGAMEDIALOG_H__
+
+#include <kdialogbase.h>
+#include <kdemacros.h>
+class TQGridLayout;
+class TQVBoxLayout;
+class TQListBoxItem;
+
+class KGame;
+class KPlayer;
+class KGamePropertyBase;
+
+class KGameDialogConfig;
+class KGameDialogGeneralConfig;
+class KGameDialogNetworkConfig;
+class KGameDialogMsgServerConfig;
+class KGameDialogChatConfig;
+class KGameDialogConnectionConfig;
+
+class KGameDialogPrivate;
+/**
+ * TODO: rewrite entire documentation. Nearly nothing is valid anymore.
+ * The main configuration dialog for KGame. Here all players meat each other,
+ * every player can see how many players connected (and their names) and the
+ * ADMIN can even "kick" players out. You can talk to each other (using 
+ * KGameChat and the ADMIN can define the maxPlayers/minPlayers as well as the
+ * number of computer players.
+ *
+ *
+ * AB: setDefaultXYZ is obsolete!!
+ * You will usually create an instance of KGameDialog or any derived class and
+ * call setDefaultXYZ methods. Example (maybe
+ * obsoleted parameters - docu is currently changing very fast):
+ * \code
+ * 	KGameDialog dlg(kgame, i18n("New Game"), localPlayer, this, true,
+ * 	ID_CHAT);
+ * 	dlg.setDefaultNetworkInfo(port, host); // AB: obsolete!
+ * 	dlg.exec();
+ * \endcode
+ * This will create a default modal dialog with the title "New Game". You don't
+ * have to do more than this. 
+ *
+ * @short Main configuration dialog for KGame
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KGameDialog : public KDialogBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+
+	enum ConfigOptions
+	{
+		NoConfig = 0,
+		ChatConfig = 1,
+		GameConfig = 2,
+		NetworkConfig = 4,
+		MsgServerConfig = 8,
+		BanPlayerConfig = 16,
+		AllConfig = 0xffff
+	};
+
+	/**
+	 * Create an empty KGameDialog. You can add widgets using
+	 * addConfigPage.
+	 * @param g The KGame object of this game
+	 * @param owner The KPlayer object who is responsible for this
+	 * dialog, aka "the local player"
+	 * @param title The title of the dialog - see KDialog::setCaption
+	 * @param parent The parent of the dialog
+	 * @param modal Whether the dialog is modal or not
+	 **/
+	KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
+			TQWidget* parent, bool modal = false);
+	
+	/**
+	 * Create a KGameDialog with the standard configuration widgets. This
+	 * creates the following widgets:
+	 * <ul>
+	 * <li> KGameDialogGeneralConfig
+	 * <li> KGameDialogNetworkConfig
+	 * <li> KGameDialogMsgServerConfig
+	 * <li> KGameDialogChatConfig
+	 * <li> KGameDialogConnectionConfig
+	 * </ul>
+	 * If you want to use your own implementations (or none) of the widgets
+	 * above you should subclass KGameDialog. Use addGameConfig, 
+	 * addNetworkConfig, addMsgConfig, addChatWidget and 
+	 * addConnectionList in this case.
+	 *
+	 * If you want to add further configuration widget you can simply use
+	 * addConfigPage
+	 * @param g The KGame object of this game
+	 * @param owner The KPlayer object who is responsible for this
+	 * dialog, aka "the local player"
+	 * @param title The title of the dialog - see KDialog::setCaption
+	 * @param parent The parent of the dialog
+	 * @param modal Whether the dialog is modal or not
+	 * @param initConfigs whether the default KGameDialogConfig widgets
+	 * shall be created using initDefaultDialog. Use false if you want
+	 * to use custom widgets.
+	 * @param chatMsgId The ID of Chat messages. See KGameChat. Unused
+	 * if initConfigs = false
+	 **/
+	KGameDialog(KGame* g, KPlayer* owner, const TQString& title, 
+			TQWidget* parent, long initConfigs = AllConfig, 
+			int chatMsgId = 15432, bool modal = false);
+
+	virtual ~KGameDialog();
+
+
+	/**
+	 * Change the owner of the dialog. This will be used as the fromPlayer in
+	 * KGameChat and will receive the entered player name.
+	 * @param owner The owner of the dialog. It must already be added to the
+	 * KGame object!
+	 *
+	 * Calls the KGameDialogConfig::setOwner implementation of all
+	 * widgets that have been added by addConfigWidget
+	 * @param owner The new owner player of this dialog must already be
+	 * added to the KGame object. Can even be NULL (then no player
+	 * configuration is made)
+	 **/
+	void setOwner(KPlayer* owner);
+
+	/**
+	 * Change the KGame object this dialog is used for.
+	 *
+	 * Calls the KGameDialogConfig::setKGame implementation of all
+	 * widgets that have been added by addConfigWidget
+	 * @param g The new KGame object
+	 **/
+	void setKGame(KGame* g);
+
+	/**
+	 * This will submit all configuration data to the KGame object.
+	 * Automatically called by slotApply and slotOk
+	 * There is no need to replace this unless you
+	 * want to add widgets which are not derived from those classes
+	 **/
+	virtual void submitToKGame();
+
+	/**
+	 * Adds a KGameChat to the dialog. If no parent is specified the
+	 * game page will be used.
+	 * @param chat The chat widget
+	 * @param parent The parent of the chat widget. This MUST be an
+	 * already added config widget. Note that the game page will be used
+	 * if parent is 0.
+	 **/
+	void addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent = 0);
+
+	/**
+	 * Add a connection list to the dialog. The list consists of a
+	 * KLisBox containing all players in the current game (see
+	 * KGame::playerList). The admin can "ban" players, ie kick them out of
+	 * the game.
+	 *
+	 * This is another not-really-config-config-widget. It just displays the
+	 * connections and lets you ban players.
+	 * @param c The KGameDialogConnectionConfig object
+	 * @param parent The parent of the widget. If 0 the networkConfig
+	 * page is used.
+	 **/
+	void addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent = 0);
+
+	/**
+	 * Add a new page to the dialog. The page will contain you new config
+	 * widget and will have your provided title.
+	 *
+	 * The widget will be reparented to this dialog. This also calls
+	 * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner.
+	 * @param widget The new config widget
+	 * @param title The title of the newly added page.
+	 * @return The newly added page which contains your config widget.
+	 **/
+	TQVBox* addConfigPage(KGameDialogConfig* widget, const TQString& title);
+
+	/**
+	 * @return The TQVBox of the given key, The key is from ConfigOptions
+	 * Note that not all are supported yet
+	 **/
+	TQVBox *configPage(ConfigOptions which);
+
+	/**
+	 * @return The default netowrk config. Note that this always returns 0 if
+	 * you did not specify NetworkConfig in the constructor!
+	 **/
+	KGameDialogNetworkConfig* networkConfig() const;
+
+	/**
+	 * @return The default game config. Note that this always returns 0 if
+	 * you did not specify GameConfig in the constructor!
+	 **/
+	KGameDialogGeneralConfig* gameConfig() const;
+
+	/**
+	 * Add a config widget to the specified parent. Usually you call
+	 * addConfigPage for one widget and addConfigWidget for another to add
+	 * it to the same page. Just use the returned page of
+	 * addConfigPage.
+	 **/
+	void addConfigWidget(KGameDialogConfig* widget, TQWidget* parent);
+
+	/**
+	 * Used to add the main network config widget in a new page. Use this to
+	 * make networkConfig return something useful.
+	 **/
+	void addNetworkConfig(KGameDialogNetworkConfig* netConf);
+
+	/**
+	 * Add the main game config widget in a new page. Use this to make 
+	 * gameConfig return something useful.
+	 **/
+	void addGameConfig(KGameDialogGeneralConfig* conf);
+
+	/**
+	 * Used to add the message server config widget in a new page.
+	 **/
+	void addMsgServerConfig(KGameDialogMsgServerConfig* conf);
+
+protected:
+
+	/**
+	 * This is used to create a dialog containing all the default widgets. 
+	 *
+	 * You may want to use this if you just want to use your own
+	 * configuration widgets which inherit the standard ones.
+	 *
+	 * Note that if one of the widgets is NULL the default implementation
+	 * will be used! (except the chat widget - you need to create it
+	 * yourself as you have to provide a message id)
+	 * @param initConfigs The widgets to be created
+	 * @param chatMsgId The msgid for the chat config (only if specified in
+	 * initConfigs) - see KGameDialogChatConfig
+	 **/
+	void initDefaultDialog(ConfigOptions initConfigs, int chatMsgId = 15432);
+
+	/**
+	 * Go through all config widgets and call their 
+	 * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner implementation
+	 * 
+	 * This function could be private and probably will be very soon.
+	 * Don't use it yourself
+	 **/
+	void configureConfigWidgets();
+
+protected slots:
+	/**
+	 * Called when the user clicks on Ok. Calls slotApply and
+	 * TQDialog::accept()
+	 **/
+	virtual void slotOk();
+
+	/**
+	 * Just calls submitToKGame()
+	 **/
+	virtual void slotApply();
+
+	/**
+	 * Sets the default values for the configuration widgets. Set these
+	 * values by (e.g.) setDefaultMaxPlayers()
+	 * @deprecated
+	 **/
+	virtual void slotDefault();
+
+	/**
+	 * Called when the KGame object is destroyed. Calls setKGame(0) so
+	 * that all widgets can disconnect their slots and so on.
+	 **/
+	void slotUnsetKGame();
+
+	/**
+	 * Called when the ADMIN status of this KGame client changes. See 
+	 * KGameNetwork::signalAdminStatusChanged
+	 * @param isAdmin TRUE if this client is now the ADMIN otherwise FALSE
+	 **/
+	void setAdmin(bool isAdmin);
+
+	/**
+	 * Remove a config widget from the widget list. 
+	 * @see TQObject::destroyed
+	 **/
+	void slotRemoveConfigWidget(TQObject* configWidget);
+
+private:
+	void init(KGame*, KPlayer*);
+
+private:
+	KGameDialogPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/dialogs/kgamedialogconfig.cpp b/libtdegames/kgame/dialogs/kgamedialogconfig.cpp
new file mode 100644
index 00000000..f6845650
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedialogconfig.cpp
@@ -0,0 +1,773 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kgamedialogconfig.h"
+
+#include "kgame.h"
+#include "kplayer.h"
+#include "kgamechat.h"
+#include "kgameconnectdialog.h"
+
+#include <klocale.h>
+#include <knuminput.h>
+#include <kdialog.h>
+#include <klistbox.h>
+#include <kmessagebox.h>
+
+#include <tqlayout.h>
+#include <tqhgroupbox.h>
+#include <tqlabel.h>
+#include <tqpushbutton.h>
+#include <tqlineedit.h>
+#include <tqvbox.h>
+#include <tqptrdict.h>
+
+#include "kgamedialogconfig.moc"
+
+class KGameDialogConfigPrivate
+{
+public:
+	KGameDialogConfigPrivate()
+	{
+		mOwner = 0;
+		mGame = 0;
+
+		mAdmin = false;
+	}
+
+	bool mAdmin;
+	KGame* mGame;
+	KPlayer* mOwner;
+};
+
+KGameDialogConfig::KGameDialogConfig(TQWidget* parent) : TQWidget(parent)
+{
+ d = new KGameDialogConfigPrivate;
+}
+
+KGameDialogConfig::~KGameDialogConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameDialogConfig::setKGame(KGame* g)
+{
+ d->mGame = g;
+}
+
+void KGameDialogConfig::setOwner(KPlayer* p)
+{
+ d->mOwner = p;
+}
+
+void KGameDialogConfig::setAdmin(bool a)
+{
+ d->mAdmin = a;
+}
+
+KGame* KGameDialogConfig::game() const
+{ return d->mGame; }
+bool KGameDialogConfig::admin() const
+{ return d->mAdmin; }
+KPlayer* KGameDialogConfig::owner() const
+{ return d->mOwner; }
+
+/////////////////////////// KGameDialogNetworkConfig /////////////////////////
+class KGameDialogNetworkConfigPrivate
+{
+public:
+	KGameDialogNetworkConfigPrivate()
+	{
+		mInitConnection = 0;
+		mNetworkLabel = 0;
+		mDisconnectButton = 0;
+		mConnect = 0;
+		mDefaultServer=true;
+
+	}
+
+	// TQPushButton* mInitConnection;
+	TQHGroupBox* mInitConnection;
+	TQLabel* mNetworkLabel;
+	TQPushButton *mDisconnectButton;
+
+	bool mDefaultServer;
+	TQString mDefaultHost;
+	unsigned short int mDefaultPort;
+	KGameConnectWidget *mConnect;
+};
+
+
+KGameDialogNetworkConfig::KGameDialogNetworkConfig(TQWidget* parent)
+		: KGameDialogConfig(parent)
+{
+// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+ d = new KGameDialogNetworkConfigPrivate();
+
+ TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint(), "toptqlayout");
+
+ TQHBoxLayout *hb = new TQHBoxLayout(topLayout, KDialog::spacingHint());
+
+ d->mNetworkLabel = new TQLabel(this);
+ hb->addWidget(d->mNetworkLabel);
+
+ d->mDisconnectButton=new TQPushButton(i18n("Disconnect"),this);
+ connect(d->mDisconnectButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotExitConnection()));
+ hb->addWidget(d->mDisconnectButton);
+
+ d->mInitConnection = new TQHGroupBox(i18n("Network Configuration"), this);
+ topLayout->addWidget(d->mInitConnection);
+
+ d->mConnect = new KGameConnectWidget(d->mInitConnection);
+ connect(d->mConnect, TQT_SIGNAL(signalNetworkSetup()), this, TQT_SLOT(slotInitConnection()));
+ connect(d->mConnect, TQT_SIGNAL(signalServerTypeChanged(int)),
+         this, TQT_SIGNAL(signalServerTypeChanged(int)));
+
+ // Needs to be AFTER the creation of the dialogs
+ setConnected(false);
+ setDefaultNetworkInfo("localhost", 7654,true);
+}
+
+KGameDialogNetworkConfig::~KGameDialogNetworkConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameDialogNetworkConfig::slotExitConnection()
+{
+ kdDebug(11001) << k_funcinfo << " !!!!!!!!!!!!!!!!!!!!!!!" << endl;
+  if (game()) game()->disconnect();
+  setConnected(false,false);
+}
+
+void KGameDialogNetworkConfig::slotInitConnection()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ bool connected = false;
+ bool master = true;
+ unsigned short int port = d->mConnect->port();
+ TQString host = d->mConnect->host();
+
+ if (host.isNull()) {
+	master = true;
+	if (game()) {
+		game()->setDiscoveryInfo(d->mConnect->type(),d->mConnect->gameName());
+		connected = game()->offerConnections(port);
+	}
+ } else {
+	master = false;
+	if (game()) {
+		connected = game()->connectToServer(host, port);
+	}
+  // We need to learn about failed connections
+  if (game()) {
+     connect(game(), TQT_SIGNAL(signalConnectionBroken()),
+      this, TQT_SLOT(slotConnectionBroken()));
+  }
+ }
+ setConnected(connected, master);
+}
+
+void KGameDialogNetworkConfig::slotConnectionBroken()
+{
+  kdDebug(11001) << k_funcinfo << endl;
+  setConnected(false,false);
+  KMessageBox::error(this, i18n("Cannot connect to the network"));
+}
+
+void KGameDialogNetworkConfig::setConnected(bool connected, bool master)
+{
+ if (!connected) {
+	d->mNetworkLabel->setText(i18n("Network status: No Network"));
+	d->mInitConnection->setEnabled(true);
+  d->mDisconnectButton->setEnabled(false);
+	return;
+ }
+ if (master) {
+	d->mNetworkLabel->setText(i18n("Network status: You are MASTER"));
+ } else {
+	d->mNetworkLabel->setText(i18n("Network status: You are connected"));
+ }
+ d->mInitConnection->setEnabled(false);
+ d->mDisconnectButton->setEnabled(true);
+}
+
+void KGameDialogNetworkConfig::submitToKGame(KGame* , KPlayer* )
+{
+}
+
+void KGameDialogNetworkConfig::setKGame(KGame* g)
+{
+ KGameDialogConfig::setKGame(g);
+ if (!game()) {
+	setConnected(false);
+	return;
+ }
+ setConnected(game()->isNetwork(), game()->isMaster());
+}
+
+void KGameDialogNetworkConfig::setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server)
+{
+ d->mDefaultPort = port;
+ d->mDefaultHost = host;
+ d->mDefaultServer = server;
+
+ d->mConnect->setHost(host);
+ d->mConnect->setPort(port);
+ if (server) {
+	d->mConnect->setDefault(0);
+ } else {
+	d->mConnect->setDefault(1);
+ }
+}
+
+void KGameDialogNetworkConfig::setDiscoveryInfo(const TQString& type, const TQString& name)
+{
+ d->mConnect->setType(type);
+ d->mConnect->setName(name);
+} 
+
+/////////////////////////// KGameDialogGeneralConfig /////////////////////////
+class KGameDialogGeneralConfigPrivate
+{
+public:
+	KGameDialogGeneralConfigPrivate()
+	{
+		mTopLayout = 0;
+		mName = 0;
+	}
+
+	TQLineEdit* mName;
+
+	TQVBoxLayout* mTopLayout;
+};
+
+KGameDialogGeneralConfig::KGameDialogGeneralConfig(TQWidget* parent, bool initializeGUI)
+		: KGameDialogConfig(parent)
+{
+// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+ d = new KGameDialogGeneralConfigPrivate;
+
+ if (initializeGUI) {
+	d->mTopLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+	d->mTopLayout->setAutoAdd(true);
+
+	TQWidget* nameWidget = new TQWidget(this);
+	TQHBoxLayout* l = new TQHBoxLayout(nameWidget);
+	TQLabel* nameLabel = new TQLabel(i18n("Your name:"), nameWidget);
+	l->addWidget(nameLabel);
+	d->mName = new TQLineEdit(nameWidget);
+	l->addWidget(d->mName);
+ }
+}
+
+KGameDialogGeneralConfig::~KGameDialogGeneralConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameDialogGeneralConfig::setPlayerName(const TQString& name)
+{
+ if (d->mName) {
+	d->mName->setText(name);
+ }
+}
+
+TQString KGameDialogGeneralConfig::playerName() const
+{
+ return d->mName ? d->mName->text() : TQString();
+}
+
+void KGameDialogGeneralConfig::setOwner(KPlayer* p)
+{
+ if (owner()) {
+	owner()->disconnect(this);
+ }
+ KGameDialogConfig::setOwner(p);
+ if (!owner()) {
+	// can this config be used at all?
+	// maybe call hide()
+	return;
+ }
+ connect(owner(), TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
+		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
+ setPlayerName(p->name());
+ //TODO: connect signalPropertyChanged and check for playername changes!
+}
+
+void KGameDialogGeneralConfig::setKGame(KGame* g)
+{
+ KGameDialogConfig::setKGame(g);
+ if (!g) {
+	// TODO
+	// can this config be used at all?
+	// maybe call hide()
+	return;
+ }
+}
+
+void KGameDialogGeneralConfig::setAdmin(bool admin)
+{
+ KGameDialogConfig::setAdmin(admin);
+// enable/disable widgets
+
+}
+
+void KGameDialogGeneralConfig::submitToKGame(KGame* g, KPlayer* p)
+{
+//FIXME
+ if (p) {
+	p->setName(playerName());
+ }
+ if (g) {
+ }
+}
+
+void KGameDialogGeneralConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p)
+{
+ if (!prop || !p || p != owner()) {
+	return;
+ }
+ switch (prop->id()) {
+	case KGamePropertyBase::IdName:
+		setPlayerName(p->name());
+		break;
+	default:
+		break;
+ }
+}
+
+class KGameDialogMsgServerConfigPrivate
+{
+public:
+	KGameDialogMsgServerConfigPrivate()
+	{
+		senderLayout = 0;
+		localLayout = 0;
+
+		changeMaxClients = 0;
+		changeAdmin= 0;
+		removeClient= 0;
+		noAdmin = 0;
+
+		noMaster = 0;
+	}
+
+	TQVBoxLayout* senderLayout;
+	TQHBoxLayout* localLayout;
+
+	TQPushButton* changeMaxClients;
+	TQPushButton* changeAdmin;
+	TQPushButton* removeClient;
+	TQLabel* noAdmin;
+
+	TQLabel* noMaster;
+};
+
+
+// TODO: change ADMIN ID, remove CLIENTS, change MAXCLIENTS
+// we do everything here with TQPushButtons as we want to wait a moment before
+// continuing - the message must be sent over network first
+KGameDialogMsgServerConfig::KGameDialogMsgServerConfig(TQWidget* parent)
+		: KGameDialogConfig(parent)
+{
+ d = new KGameDialogMsgServerConfigPrivate;
+
+ TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+ d->senderLayout = new TQVBoxLayout(topLayout);
+ d->localLayout = new TQHBoxLayout(topLayout);
+}
+
+KGameDialogMsgServerConfig::~KGameDialogMsgServerConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameDialogMsgServerConfig::setKGame(KGame* g)
+{
+ KGameDialogConfig::setKGame(g);
+ //TODO display the ID of the admin if we aren't
+ // connect(g, TQT_SIGNAL(signalAdminChanged(int)), this, TQT_SLOT(slotChangeIsAdmin(int)));//TODO
+ if (!game()) {
+	// we cannot do anything without a KGame object!
+	setAdmin(false);
+	return;
+ }
+ setAdmin(game()->isAdmin());
+ setHasMsgServer(game()->messageServer());
+}
+
+
+void KGameDialogMsgServerConfig::slotChangeMaxClients()
+{
+ if (!game()) {
+	kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
+	return;
+ }
+ if (!game()->isAdmin()) {
+	kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
+	return;
+ }
+ int max;
+// edit->setText(TQString::number()); // current max clients! //TODO
+
+ TQDialog* dialog = new TQDialog();
+ dialog->setCaption(i18n("Maximal Number of Clients"));
+ TQHBoxLayout* l = new TQHBoxLayout(dialog, KDialog::marginHint(), KDialog::spacingHint());
+ l->setAutoAdd(true);
+
+ (void) new TQLabel(i18n("Maximal number of clients (-1 = infinite):"), dialog);
+ TQLineEdit* edit = new TQLineEdit(dialog);//TODO: use KIntNumInput
+// edit->setText(TQString::number(max)); // current max clients! //TODO
+ if (dialog->exec() == TQDialog::Accepted) {
+	bool ok;
+	max = edit->text().toInt(&ok);
+	if (ok) {
+		game()->setMaxClients(max);
+	}
+ }
+
+}
+
+void KGameDialogMsgServerConfig::slotRemoveClient()
+{
+}
+
+void KGameDialogMsgServerConfig::slotChangeAdmin()
+{
+ if (!game()) {
+	kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
+	return;
+ }
+ if (!admin()) {
+	kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
+	return;
+ }
+ //TODO
+ TQ_UINT32 newAdmin = 0;
+// newAdmin = ;
+ game()->electAdmin(newAdmin);
+}
+
+void KGameDialogMsgServerConfig::removeClient(TQ_UINT32 /*id*/)
+{
+//TODO
+}
+
+void KGameDialogMsgServerConfig::setAdmin(bool a)
+{
+ if (admin() == a) {
+	// no need to do anything
+	return;
+ }
+ KGameDialogConfig::setAdmin(a);
+ if (admin()) {
+	if (d->noAdmin) {
+		delete d->noAdmin;
+		d->noAdmin = 0;
+	}
+	d->changeMaxClients = new TQPushButton(i18n("Change Maximal Number of Clients"), this);
+	connect(d->changeMaxClients, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeMaxClients()));
+	d->changeAdmin = new TQPushButton(i18n("Change Admin"), this);
+	connect(d->changeAdmin, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeAdmin()));
+	d->removeClient = new TQPushButton(i18n("Remove Client with All Players"), this);
+	connect(d->removeClient, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotRemoveClient()));
+	d->senderLayout->addWidget(d->changeMaxClients);
+	d->senderLayout->addWidget(d->changeAdmin);
+	d->senderLayout->addWidget(d->removeClient);
+ } else {
+	if (d->changeMaxClients) {
+		delete d->changeMaxClients;
+		d->changeMaxClients = 0;
+	}
+	if (d->changeAdmin) {
+		delete d->changeAdmin;
+		d->changeAdmin = 0;
+	}
+	if (d->removeClient) {
+		delete d->removeClient;
+		d->removeClient = 0;
+	}
+	d->noAdmin = new TQLabel(i18n("Only the admin can configure the message server!"), this);
+	d->senderLayout->addWidget(d->noAdmin);
+ }
+}
+
+
+void KGameDialogMsgServerConfig::setHasMsgServer(bool has)
+{
+ if (!has) {
+	// delete all inputs
+	if (!d->noMaster) {
+		d->noMaster = new TQLabel(i18n("You don't own the message server"), this);
+		d->localLayout->addWidget(d->noMaster);
+	}
+	return;
+ }
+ if (d->noMaster) {
+	delete d->noMaster;
+	d->noMaster = 0;
+ }
+ //TODO
+ // list all connections, data (max clients) and so on
+ // cannot be done above (together with TQPushButtons) as it is possible that
+ // this client is ADMIN but not MASTER (i.e. doesn't own the messageserver)
+}
+
+
+class KGameDialogChatConfigPrivate
+{
+public:
+	KGameDialogChatConfigPrivate()
+	{
+		mChat = 0;
+	}
+
+	KGameChat* mChat;
+};
+
+KGameDialogChatConfig::KGameDialogChatConfig(int chatMsgId, TQWidget* parent)
+		: KGameDialogConfig(parent)
+{
+ d = new KGameDialogChatConfigPrivate;
+ TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+ topLayout->setAutoAdd(true);
+ TQHGroupBox* b = new TQHGroupBox(i18n("Chat"), this);
+ d->mChat = new KGameChat(0, chatMsgId, b);
+}
+
+KGameDialogChatConfig::~KGameDialogChatConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameDialogChatConfig::setKGame(KGame* g)
+{
+ KGameDialogConfig::setKGame(g);
+ d->mChat->setKGame(game());
+ if (!game()) {
+	hide();
+ } else {
+	show();
+ }
+}
+
+void KGameDialogChatConfig::setOwner(KPlayer* p)
+{
+ KGameDialogConfig::setOwner(p);
+ if (!owner()) {
+	hide();
+	return;
+ }
+ d->mChat->setFromPlayer(owner());
+ show();
+}
+
+
+
+class KGameDialogConnectionConfigPrivate
+{
+public:
+	KGameDialogConnectionConfigPrivate()
+	{
+		mPlayerBox = 0;
+	}
+
+	TQPtrDict<KPlayer> mItem2Player;
+	KListBox* mPlayerBox;
+};
+
+KGameDialogConnectionConfig::KGameDialogConnectionConfig(TQWidget* parent)
+		: KGameDialogConfig(parent)
+{
+ //TODO: prevent player to ban himself
+ d = new KGameDialogConnectionConfigPrivate;
+ TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+ topLayout->setAutoAdd(true);
+ TQHGroupBox* b = new TQHGroupBox(i18n("Connected Players"), this);
+ d->mPlayerBox = new KListBox(b);
+ setMinimumHeight(100);
+}
+
+KGameDialogConnectionConfig::~KGameDialogConnectionConfig()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ // d->mIem2Player.clear();
+ delete d;
+}
+
+void KGameDialogConnectionConfig::setKGame(KGame* g)
+{
+ if (game()) {
+	disconnect(game(), 0, this, 0);
+ }
+ KGameDialogConfig::setKGame(g);
+ slotClearPlayers();
+ if (game()) {
+// react to changes in KGame::playerList()
+	connect(game(), TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)),
+			this, TQT_SLOT(slotPlayerJoinedGame(KPlayer*)));
+	connect(game(), TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)),
+			this, TQT_SLOT(slotPlayerLeftGame(KPlayer*)));
+
+	KGame::KGamePlayerList l = *game()->playerList();
+	for (KPlayer* p = l.first(); p; p = l.next()) {
+		slotPlayerJoinedGame(p);
+	}
+ }
+}
+
+void KGameDialogConnectionConfig::setOwner(KPlayer* p)
+{
+ KGameDialogConfig::setOwner(p);
+}
+
+void KGameDialogConnectionConfig::setAdmin(bool a)
+{
+ if (!game()) {// not possible... in theory
+	return;
+ }
+ if (admin()) {
+	disconnect(game(), TQT_SIGNAL(executed(TQListBoxItem*)), this, 0);
+ }
+ KGameDialogConfig::setAdmin(a);
+ if (admin()) {
+	connect(d->mPlayerBox, TQT_SIGNAL(executed(TQListBoxItem*)), this,
+			TQT_SLOT(slotKickPlayerOut(TQListBoxItem*)));
+ }
+}
+
+TQListBoxItem* KGameDialogConnectionConfig::item(KPlayer* p) const
+{
+ TQPtrDictIterator<KPlayer> it(d->mItem2Player);
+ while (it.current()) {
+	if (it.current() == p) {
+		return (TQListBoxItem*)it.currentKey();
+	}
+	++it;
+ }
+ return 0;
+}
+
+void KGameDialogConnectionConfig::slotClearPlayers()
+{
+ TQPtrDictIterator<KPlayer> it(d->mItem2Player);
+ while (it.current()) {
+	slotPlayerLeftGame(it.current());
+	++it;
+ }
+
+ if (d->mItem2Player.count() > 0) {
+	kdWarning(11001) << k_funcinfo << ": itemList wasn't cleared properly" << endl;
+	d->mItem2Player.clear();
+ }
+ if (d->mPlayerBox->count() > 0) {
+	kdWarning(11001) << k_funcinfo << ": listBox wasn't cleared properly" << endl;
+	d->mPlayerBox->clear();
+ }
+
+}
+
+void KGameDialogConnectionConfig::slotPlayerJoinedGame(KPlayer* p)
+{
+ if (!p) {
+	kdError(11001) << k_funcinfo << ": Cannot add NULL player" << endl;
+ }
+ if (d->mItem2Player[p]) {
+	kdError(11001) << k_funcinfo << ": attempt to double add player" << endl;
+	return;
+ }
+ kdDebug(11001) << k_funcinfo << ": add player " << p->id() << endl;
+ TQListBoxText* t = new TQListBoxText(p->name());
+ d->mItem2Player.insert(t, p);
+ d->mPlayerBox->insertItem(t);
+
+ connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
+		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
+
+}
+
+void KGameDialogConnectionConfig::slotPlayerLeftGame(KPlayer* p)
+{
+ // disconnect first
+ this->disconnect(p);
+ if (!item(p)) {
+	kdError(11001) << k_funcinfo << ": cannot find " << p->id()
+			<< " in list" << endl;
+	return;
+ }
+ d->mPlayerBox->removeItem(d->mPlayerBox->index(item(p)));
+
+}
+
+void KGameDialogConnectionConfig::slotKickPlayerOut(TQListBoxItem* item)
+{
+ kdDebug(11001) << "kick player out" << endl;
+ KPlayer* p = d->mItem2Player[item];
+ if (!p) {
+	kdError(11001) << "invalid item selected - no player found" << endl;
+	return;
+ }
+ if (!game()) {
+	kdWarning(11001) << "no game set" << endl;
+	return;
+ }
+ if (!admin()) {
+	kdDebug(11001) << "Only the ADMIN can kick players" << endl;
+	return;
+ }
+ if (p == owner()) { // you wanna ban the ADMIN ??
+	kdDebug(11001) << "you cannot kick the ADMIN" << endl;
+	return;
+ }
+
+ if (KMessageBox::questionYesNo(this, i18n("Do you want to ban player \"%1\" from the game?").tqarg(
+		p->name()), TQString(), i18n("Ban Player"), i18n("Do Not Ban")) == KMessageBox::Yes) {
+	kdDebug(11001) << "will remove player " << p << endl;
+	game()->removePlayer(p);
+//	d->mPlayerBox->removeItem(d->mPlayerBox->index(item)); // should be done by signalPlayerLeftGame
+ } else {
+	kdDebug(11001) << "will NOT remove player " << p << endl;
+ }
+}
+
+void KGameDialogConnectionConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
+{
+ if(prop->id() == KGamePropertyBase::IdName) {
+	TQListBoxText* old = 0;
+	TQPtrDictIterator<KPlayer> it(d->mItem2Player);
+	while (it.current() && !old) {
+		if (it.current() == player) {
+			old = (TQListBoxText*)it.currentKey();
+		}
+		++it;
+	}
+	TQListBoxText* t = new TQListBoxText(player->name());
+	d->mPlayerBox->changeItem(t, d->mPlayerBox->index(old));
+	d->mItem2Player.remove(old);
+	d->mItem2Player.insert(t, player);
+ }
+}
+
diff --git a/libtdegames/kgame/dialogs/kgamedialogconfig.h b/libtdegames/kgame/dialogs/kgamedialogconfig.h
new file mode 100644
index 00000000..a7f309ac
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgamedialogconfig.h
@@ -0,0 +1,368 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+// NAMING
+// please follow these naming rules if you add/change classes:
+// the main dialog is named KGameDialog and the base config widget
+// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
+// XYZ = the name of the config widget, like "general" or "network") and are
+// inherited from KGameDialogConfig.
+
+#ifndef __KGAMEDIALOGCONFIG_H__
+#define __KGAMEDIALOGCONFIG_H__
+
+#include <tqwidget.h>
+#include <kdemacros.h>
+
+class TQGridLayout;
+class TQVBoxLayout;
+class TQListBoxItem;
+
+class KGame;
+class KPlayer;
+class KGamePropertyBase;
+
+class KGameDialogConfigPrivate;
+/**
+ * Base class for configuration widgets.
+ *
+ * You can inherit from this and implement @ref submitToKGame, @ref
+ * setOwner and @ref setKGame to create your personal @ref KGame configuration widget :-)
+ * @short Base class for configuration widgets
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KGameDialogConfig : public TQWidget
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDialogConfig(TQWidget* parent = 0);
+	virtual ~KGameDialogConfig();
+
+	/**
+	 * Called by @ref KGameDialog to submit all settings to the KGame
+	 * Object.
+	 * You have to replace this if you add your own widgets!
+	 * @param g A pointer to your KGame.
+	 * @param p A pointer to the player owning this dialog
+	 **/
+	virtual void submitToKGame(KGame* g, KPlayer* p) = 0;
+
+	/**
+	 * The owner player of the dialog has been changed. The default
+	 * changes the pointer for owner so don't forget to call the
+	 * default implementation if you overwrite this!
+	 *
+	 * You can use this e.g. to change a line edit widget containing the 
+	 * player name.
+	 *
+	 * Note: even NULL players are allowed!
+	 * @param p The new owner player of the dialog
+	 **/
+	virtual void setOwner(KPlayer* p);
+
+	/**
+	 * The KGame object of the dialog has been changed. The default
+	 * implementation changes the pointer for game so don't forget to
+	 * call the default implementation if you overwrite this!
+	 *
+	 * You can use this e.g. to re-read the min/max player settings.
+	 * @param g The KGame object
+	 **/
+	virtual void setKGame(KGame* g);
+
+	/**
+	 * The admin status has been changed.
+	 * If the KGame object of this config widget is the
+	 * admin the user is allowed to configure it. Otherwise most
+	 * widgets will have to be disabled. Note that you don't necessarily
+	 * need to deactivate all widget - e.g. the player name must be
+	 * configured by the player. Mainly the KGame configuration can be done
+	 * by the admin only.
+	 *
+	 * By default this does nothing. Changes the value for admin so 
+	 * don't forget to call the default implementation in derived classes!
+	 * @param admin Whether the KGame object of this dialog can be
+	 * configured
+	 **/
+	virtual void setAdmin(bool admin);
+
+	/**
+	 * A pointer to the     KGame object that has been set by @ref setKGame.
+	 *
+	 * Note that NULL is allowed!
+	 * @return The KGame object assigned to this dialog
+	 **/
+	KGame* game() const;
+
+	/**
+	 * A pointer to the KPlayer object that has been set by @ref
+	 * setOwner.
+	 *
+	 * Note that NULL is allowed!
+	 * @return The owner of the dialog
+	 **/
+	KPlayer* owner() const;
+
+	/**
+	 * @return True if the owner is ADMIN otherwise FALSE. See also
+	 * @ref setAdmin
+	 **/
+	bool admin() const;
+
+protected:
+
+private:
+	KGameDialogConfigPrivate* d;
+};
+
+/**
+ * The main game configuration widget.
+ * 
+ * It currently contains a line edit for the name of the player only. You can
+ * add widgets by using the KGameDialogGeneralConfig as parent parameter as it
+ * uses TQLayout::autoAdd == true.
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameDialogGeneralConfigPrivate;
+class KGameDialogGeneralConfig : public KGameDialogConfig
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	/**
+	 * Construct a KGameDialogGeneralConfig. Currently it contains a line
+	 * edit widget to change the player name only.
+	 *
+	 * If you just want to add more widgets you can just create your widgets
+	 * with the KGameDialogGeneralConfig as parent as it uses
+	 * TQLayout::setAutoAdd(true).
+	 *
+	 * @param parent Parent widget for this dialog.
+	 * @param initializeGUI If you really don't want to use the 
+	 * predefined widget and/or tqlayout use FALSE here. Note that then none
+	 * of the predefined widgets (currently only the name of the player) 
+	 * will exist anymore.
+	 *
+	 **/
+	KGameDialogGeneralConfig(TQWidget* parent = 0, bool initializeGUI = true);
+	virtual ~KGameDialogGeneralConfig();
+
+	/**
+	 * Called by @ref KGameDialog to submit all settings to the KGame
+	 * Object.
+	 * You have to replace this if you add your own widgets!
+	 * @param g A pointer to your KGame.
+	 * @param p A pointer to the player owning this dialog
+	 **/
+	virtual void submitToKGame(KGame* g, KPlayer* p);
+
+	/**
+	 * Change the owner of the config widget.
+	 *
+	 * Changes the playername in the line edit
+	 * @param p The new owner player
+	 **/
+	virtual void setOwner(KPlayer* p);
+
+	/**
+	 * See @ref KGameDialogConfig::setKGame
+	 *
+	 * Sets the default values of all KGame related predefined widgets
+	 * (currently none)
+	 **/
+	virtual void setKGame(KGame* g);
+
+	/**
+	 * See @ref KGameDialogConfig::setAdmin
+	 *
+	 * This deactivates the min/max player widgets
+	 **/
+	virtual void setAdmin(bool admin);
+
+protected slots:
+	void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
+
+protected:
+	void setPlayerName(const TQString& name);
+
+	TQString playerName() const;
+
+private:
+	KGameDialogGeneralConfigPrivate* d;
+};
+
+class KGameDialogNetworkConfigPrivate;
+class KDE_EXPORT KGameDialogNetworkConfig : public KGameDialogConfig
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDialogNetworkConfig(TQWidget* parent = 0);
+	virtual ~KGameDialogNetworkConfig();
+
+
+	void disableInitConnection();
+
+	/**
+	 * Called by @ref KGameDialog to submit all settings to the KGame
+	 * Object.
+	 * You have to replace this if you add your own widgets!
+	 * @param g A pointer to your KGame.
+	 * @param p A pointer to the player owning this dialog
+	 **/
+	virtual void submitToKGame(KGame* g, KPlayer* p);
+
+	virtual void setKGame(KGame* g);
+
+	/**
+	 * This sets the default port and host used in @ref KGameConnectDialog.
+	 * The user will be able to change these defaults!
+	 *
+	 * If you don't call this then host "localhost" and port "0" is used.
+	 * You are strongly encouraged to change at least the port!
+	 * @param port The default port to connect to / listen on
+	 * @param host The default host to connect to
+	 **/
+	void setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server=true);
+	
+	/**
+	 * Set service type that will be published or browsed for and game name that will be displayed in 
+	 * server browser. Without this  publishing and discovery of LAN servers will not be enabled.
+	 * @param name Game name. Important only for server mode. If not
+	 * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
+	 * @param type Service type (something like _kwin4._tcp). It should be unique for application.
+	 * @since 3.4
+	 **/
+	void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
+	
+signals:
+  /**
+  * This signal is emmited if the user changes the server type (client/server)
+  * in the network configuration dialog. 
+  *
+  * @param t - type type (0/1) of the connection
+  **/
+  void signalServerTypeChanged(int);
+
+
+protected:
+	void setConnected(bool connected, bool master = false);
+
+protected slots:
+	void slotInitConnection();
+	void slotExitConnection();
+	void slotConnectionBroken();
+
+
+private:
+	KGameDialogNetworkConfigPrivate* d;
+};
+
+class KGameDialogMsgServerConfigPrivate;
+class KGameDialogMsgServerConfig : public KGameDialogConfig
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDialogMsgServerConfig(TQWidget* parent = 0);
+	virtual ~KGameDialogMsgServerConfig();
+
+	virtual void submitToKGame(KGame*, KPlayer*) {}
+
+	void setHasMsgServer(bool);
+
+	virtual void setKGame(KGame* g);
+	virtual void setAdmin(bool);
+
+protected slots:
+	void slotChangeMaxClients();
+	void slotChangeAdmin();
+	void slotRemoveClient();
+
+protected:
+	void removeClient(TQ_UINT32 id);
+
+private:
+	KGameDialogMsgServerConfigPrivate* d;
+};
+
+class KGameDialogChatConfigPrivate;
+/**
+ * This is not really a configuration widget but rather a simple chat widget.
+ * This widget does nothing but just providing a @ref KGameChat object.
+ * @short A chat widget inside a @ref KGameDialog
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameDialogChatConfig : public KGameDialogConfig
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDialogChatConfig(int chatMsgId, TQWidget* parent = 0);
+	virtual ~KGameDialogChatConfig();
+
+	virtual void setKGame(KGame* g);
+	virtual void setOwner(KPlayer* p);
+
+	virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
+
+private:
+	KGameDialogChatConfigPrivate* d;
+};
+
+/**
+ * @short Lists all connected players and gives the ability to kick them off the
+ * game
+ **/
+class KGameDialogConnectionConfigPrivate;
+class KGameDialogConnectionConfig : public KGameDialogConfig
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameDialogConnectionConfig(TQWidget* parent = 0);
+	virtual ~KGameDialogConnectionConfig();
+
+	virtual void setKGame(KGame* g);
+	virtual void setOwner(KPlayer* p);
+	virtual void setAdmin(bool admin);
+
+	virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
+
+protected:
+	/**
+	 * @param p A player
+	 * @return The TQListBoxItem that belongs to the player @p p
+	 **/
+	TQListBoxItem* item(KPlayer* p) const;
+
+protected slots:
+	void slotKickPlayerOut(TQListBoxItem* item);
+	void slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p);
+	void slotPlayerLeftGame(KPlayer* p);
+	void slotPlayerJoinedGame(KPlayer* p);
+	void slotClearPlayers();
+
+private:
+	KGameDialogConnectionConfigPrivate* d;
+		
+};
+#endif
diff --git a/libtdegames/kgame/dialogs/kgameerrordialog.cpp b/libtdegames/kgame/dialogs/kgameerrordialog.cpp
new file mode 100644
index 00000000..6ab9d71c
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgameerrordialog.cpp
@@ -0,0 +1,129 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kgame.h"
+
+#include "kgameerrordialog.h"
+
+class KGameErrorDialogPrivate
+{
+public:
+	KGameErrorDialogPrivate()
+	{
+		mGame = 0;
+	}
+
+	const KGame* mGame;
+};
+
+KGameErrorDialog::KGameErrorDialog(TQWidget* parent) : TQObject(parent)
+{
+ d = new KGameErrorDialogPrivate;
+}
+
+KGameErrorDialog::~KGameErrorDialog()
+{
+ delete d;
+}
+
+void KGameErrorDialog::setKGame(const KGame* g)
+{
+ slotUnsetKGame();
+ d->mGame = g;
+
+ connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
+
+// the error signals:
+ connect(d->mGame, TQT_SIGNAL(signalNetworkErrorMessage(int, TQString)), 
+		this, TQT_SLOT(slotError(int, TQString)));
+ connect(d->mGame, TQT_SIGNAL(signalConnectionBroken()), 
+		this, TQT_SLOT(slotServerConnectionLost()));
+ connect(d->mGame, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)), 
+		this, TQT_SLOT(slotClientConnectionLost(TQ_UINT32,bool)));
+}
+
+void KGameErrorDialog::slotUnsetKGame()
+{
+ if (d->mGame) {
+	disconnect(d->mGame, 0, this, 0);
+ }
+ d->mGame = 0;
+}
+
+void KGameErrorDialog::error(const TQString& errorText, TQWidget* parent)
+{ KMessageBox::error(parent, errorText); }
+
+void KGameErrorDialog::slotServerConnectionLost()
+{
+// TODO: add IP/port of the server
+ TQString message = i18n("Connection to the server has been lost!");
+ error(message, (TQWidget*)parent());
+}
+
+void KGameErrorDialog::slotClientConnectionLost(TQ_UINT32 /*id*/,bool)
+{
+//TODO: add IP/port of the client
+ TQString message;
+// if (c) {
+//	message = i18n("Connection to client has been lost!\nID: %1\nIP: %2").tqarg(c->id()).tqarg(c->IP());
+// } else {
+//	message = i18n("Connection to client has been lost!");
+// }
+ message = i18n("Connection to client has been lost!");
+ error(message, (TQWidget*)parent());
+}
+
+void KGameErrorDialog::slotError(int errorNo, TQString text)
+{
+ TQString message = i18n("Received a network error!\nError number: %1\nError message: %2").tqarg(errorNo).tqarg(text);
+ error(message, (TQWidget*)parent());
+}
+
+void KGameErrorDialog::connectionError(TQString s)
+{
+ TQString message;
+ if (s.isNull()) {
+	message = i18n("No connection could be created.");
+ } else {
+	message = i18n("No connection could be created.\nThe error message was:\n%1").tqarg(s);
+ }
+ error(message, (TQWidget*)parent());
+}
+
+
+
+// should become the real dialog - currently we just use messageboxes 
+// -> maybe unused forever
+KGameErrorMessageDialog::KGameErrorMessageDialog(TQWidget* parent) 
+		: KDialogBase(Plain, i18n("Error"), Ok, Ok, parent, 0, true, true)
+{
+}
+
+KGameErrorMessageDialog::~KGameErrorMessageDialog()
+{
+}
+
+
+
+#include "kgameerrordialog.moc"
diff --git a/libtdegames/kgame/dialogs/kgameerrordialog.h b/libtdegames/kgame/dialogs/kgameerrordialog.h
new file mode 100644
index 00000000..08726dc2
--- /dev/null
+++ b/libtdegames/kgame/dialogs/kgameerrordialog.h
@@ -0,0 +1,115 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEERRORDIALOG_H__
+#define __KGAMEERRORDIALOG_H__
+
+#include <kdialogbase.h>
+
+class KGame;
+class KGameErrorDialogPrivate;
+
+/**
+ * Use error(), warning() and information() to display the information about a
+ * network game. Maybe a better solution is to use KMessageBoxes
+ * You can connect to the public slots, too - they will call the static
+ * functions, so that you can always have a KGameErrorDialog object lying around
+ * without losing much memory (a KGameErrorMessageDialog Object will be
+ * created)
+ * @short Error handling for KGame
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameErrorDialog : public TQObject
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameErrorDialog(TQWidget* parent);
+	~KGameErrorDialog();
+
+	/**
+	 * Automatically connects the KGame object to all error dependant slots. 
+	 * Create a KGameErrorDialog object, call this function and forget
+	 * everything.
+	 * @param g The KGame which will emit the erorrs (or not ;-) )
+	 **/
+	void setKGame(const KGame* g);
+
+	/**
+	 * KGame couldn't establish a connection. Use this if
+	 * KGame::initConnection returns false
+	 * @param s A string that describes the error further (like port is
+	 * already in use). Will be ignored if TQString()
+	 **/
+	void connectionError(TQString s = TQString());
+
+public slots:
+	void slotError(int error, TQString text);
+	
+	/**
+	 * The connection to the @ref KMessageServer has been lost
+	 *
+	 * See @ref KGameNetwork::signalConnectionBroken
+	 **/
+	void slotServerConnectionLost();
+
+	/**
+	 * The connection to a client has been lost by accident
+	 *
+	 * See @ref KGameNetwork::signalClientDisconnected
+	 **/
+	void slotClientConnectionLost(TQ_UINT32 clientID,bool broken);
+	
+	/**
+	 * Unsets a @ref KGame which has been set using @ref setKGame before.
+	 * This is called automatically when the @ref KGame object is destroyed
+	 * and you normally don't have to call this yourself.
+	 *
+	 * Note that @ref setKGame also unsets an already existing @ref KGame
+	 * object if exising.
+	 **/
+	void slotUnsetKGame();
+
+protected:
+	void error(const TQString& errorText, TQWidget* parent = 0);
+
+private:
+	KGameErrorDialogPrivate* d;
+};
+
+/**
+ * The real class for error messages. KGameErrorDialog uses this to create error
+ * messages (not yet).
+ * Use @ref KGameErrorDialog instead.
+ * @short Internally used by @ref KGameErrorDialog
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameErrorMessageDialog : public KDialogBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameErrorMessageDialog(TQWidget* parent);
+	~KGameErrorMessageDialog();
+
+private:
+};
+
+#endif
diff --git a/libtdegames/kgame/kgame.cpp b/libtdegames/kgame/kgame.cpp
new file mode 100644
index 00000000..2eebac64
--- /dev/null
+++ b/libtdegames/kgame/kgame.cpp
@@ -0,0 +1,1475 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgame.h"
+#include "kgame.moc"
+#include "kgamepropertyhandler.h"
+#include "kgameproperty.h"
+#include "kplayer.h"
+#include "kgameio.h"
+#include "kgameerror.h"
+#include "kgamesequence.h"
+
+#include "kgamemessage.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include <tqbuffer.h>
+#include <tqtimer.h>
+#include <tqptrqueue.h>
+#include <tqfile.h>
+
+#include <klocale.h>
+#include <krandomsequence.h>
+#include <kdebug.h>
+
+#define KGAME_LOAD_COOKIE 4210
+
+// try to place as much as possible here
+// many things are *not* possible here as KGame has to use some inline function
+class KGamePrivate
+{
+public:
+    KGamePrivate()
+    {
+        mUniquePlayerNumber = 0;
+        mPolicy=KGame::PolicyLocal;
+        mGameSequence = 0;
+    }
+
+    int mUniquePlayerNumber;
+    TQPtrQueue<KPlayer> mAddPlayerList;// this is a list of to-be-added players. See addPlayer() docu
+    KRandomSequence* mRandom;
+    KGame::GamePolicy mPolicy;
+    KGameSequence* mGameSequence;
+
+
+    KGamePropertyHandler* mProperties;
+
+    // player lists
+    KGame::KGamePlayerList mPlayerList;
+    KGame::KGamePlayerList mInactivePlayerList;
+
+    //KGamePropertys
+    KGamePropertyInt mMaxPlayer;
+    KGamePropertyUInt mMinPlayer;
+    KGamePropertyInt mGametqStatus; // Game running?
+    TQValueList<int> mInactiveIdList;
+
+};
+
+// ------------------- GAME CLASS --------------------------
+KGame::KGame(int cookie,TQObject* parent) : KGameNetwork(cookie,parent)
+{
+ kdDebug(11001) << k_funcinfo << " - " << this << ", sizeof(KGame)=" << sizeof(KGame) << endl;
+ d = new KGamePrivate;
+
+ d->mProperties = new KGamePropertyHandler(this);
+
+ d->mProperties->registerHandler(KGameMessage::IdGameProperty,
+                                this,TQT_SLOT(sendProperty(int, TQDataStream&, bool* )),
+                                     TQT_SLOT(emitSignal(KGamePropertyBase *)));
+ d->mMaxPlayer.registerData(KGamePropertyBase::IdMaxPlayer, this, i18n("MaxPlayers"));
+ d->mMaxPlayer.setLocal(-1);  // Infinite
+ d->mMinPlayer.registerData(KGamePropertyBase::IdMinPlayer, this, i18n("MinPlayers"));
+ d->mMinPlayer.setLocal(0);   // Always ok
+ d->mGametqStatus.registerData(KGamePropertyBase::IdGametqStatus, this, i18n("GameStatus"));
+ d->mGametqStatus.setLocal(Init);
+ // d->mUniquePlayerNumber = 0;
+ d->mRandom = new KRandomSequence;
+ d->mRandom->setSeed(0);
+
+ connect(this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)),
+                this, TQT_SLOT(slotClientConnected(TQ_UINT32)));
+ connect(this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)),
+                this, TQT_SLOT(slotClientDisconnected(TQ_UINT32,bool)));
+ connect(this, TQT_SIGNAL(signalConnectionBroken()),
+                this, TQT_SLOT(slotServerDisconnected()));
+
+ setGameSequence(new KGameSequence());
+
+ // BL: FIXME This signal does no longer exist. When we are merging
+ // MH: super....and how do I find out about the lost conenction now?
+ // KGame and KGameNetwork, this could be improved!
+//  connect(this,TQT_SIGNAL(signalConnectionLost(KGameClient *)),
+//          this,TQT_SLOT(slotConnectionLost(KGameClient *)));
+}
+
+KGame::~KGame()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+// Debug();
+ reset();
+ delete d->mGameSequence;
+ delete d->mRandom;
+ delete d;
+ kdDebug(11001) << k_funcinfo << " done" << endl;
+}
+
+bool KGame::reset()
+{
+ deletePlayers();
+ deleteInactivePlayers();
+ return true;
+}
+
+void KGame::deletePlayers()
+{
+// kdDebug(11001) << k_funcinfo << endl;
+ KGamePlayerList tmp = d->mPlayerList; // in case of PolicyClean player=d->mPlayerList.first() is infinite
+ KPlayer *player;
+ while((player=tmp.first()))
+ {
+   delete player; // delete and removes the player
+   tmp.removeFirst();
+ }
+// kdDebug(11001) << k_funcinfo << " done" << endl;
+}
+
+void KGame::deleteInactivePlayers()
+{
+ KPlayer *player;
+ while((player=d->mInactivePlayerList.first()))
+ {
+   //player->setGame(0); // prevent call backs
+   d->mInactivePlayerList.remove(player);
+   delete player;
+ }
+}
+
+bool KGame::load(TQString filename,bool reset)
+{
+  if (filename.isNull())
+  {
+    return false;
+  }
+  TQFile f(filename);
+  if (!f.open(IO_ReadOnly))
+  {
+    return false;
+  }
+  TQDataStream s( &f );
+  load(s,reset);
+  f.close();
+  return true;
+}
+
+bool KGame::load(TQDataStream &stream,bool reset)
+{ return loadgame(stream, false,reset); }
+
+bool KGame::loadgame(TQDataStream &stream, bool network,bool resetgame)
+{
+ // Load Game Data
+
+ // internal data
+ TQ_INT32 c;
+ stream >> c; // cookie
+
+ if (c!=cookie())
+ {
+   kdWarning(11001) << "Trying to load different game version we="<<cookie() << " saved=" << c << endl;
+   bool result=false;
+   emit signalLoadError(stream,network,(int)c,result);
+   return result;
+ }
+ if (resetgame) reset();
+
+ uint i;
+ stream >> i;
+// setPolicy((GamePolicy)i);
+
+ stream >> d->mUniquePlayerNumber;
+
+ if (gameSequence())
+ {
+   gameSequence()->setCurrentPlayer(0);  // TODO !!!
+ }
+ int newseed;
+ stream >> newseed;
+ d->mRandom->setSeed(newseed);
+
+ // Switch off the direct emitting of signals while
+ // loading properties. This can cause inconsistencies
+ // otherwise if a property emits and this emit accesses
+ // a property not yet loaded
+ // Note we habe to have this external locking to prevent the games unlocking
+ // to access the players
+ dataHandler()->lockDirectEmit();
+ KPlayer *player;
+ for ( player=playerList()->first(); player != 0; player=playerList()->next() )
+ {
+   player->dataHandler()->lockDirectEmit();
+   // kdDebug(11001) << "Player "<<player->id() << " to indirect emit" <<endl;
+ }
+
+ // Properties
+ dataHandler()->load(stream);
+
+ // If there is additional data to be loaded before players are loaded then do
+ // this here.
+ emit signalLoadPrePlayers(stream);
+
+ // Load Playerobjects
+ uint playercount;
+ stream >> playercount;
+ kdDebug(11001) << "Loading KGame " << playercount << " KPlayer objects " << endl;
+ for (i=0;i<playercount;i++)
+ {
+   KPlayer *newplayer=loadPlayer(stream,network);
+   systemAddPlayer(newplayer);
+ }
+
+ TQ_INT16 cookie;
+ stream >> cookie;
+ if (cookie==KGAME_LOAD_COOKIE) {
+   kdDebug(11001) << "   Game loaded propertly"<<endl;
+ } else {
+   kdError(11001) << "   Game loading error. probably format error"<<endl;
+ }
+
+ // Switch back on the direct emitting of signals and emit the
+ // queued signals.
+ // Note we habe to have this external locking to prevent the games unlocking
+ // to access the players
+ dataHandler()->unlockDirectEmit();
+ for ( player=playerList()->first(); player != 0; player=playerList()->next() )
+ {
+   player->dataHandler()->unlockDirectEmit();
+   // kdDebug(11001) << "Player "<<player->id() << " to direct emit" <<endl;
+ }
+
+ emit signalLoad(stream);
+ return true;
+}
+
+bool KGame::save(TQString filename,bool saveplayers)
+{
+ if (filename.isNull())
+ {
+   return false;
+ }
+ TQFile f(filename);
+ if (!f.open(IO_WriteOnly))
+ {
+   return false;
+ }
+ TQDataStream s( &f );
+ save(s,saveplayers);
+ f.close();
+ return true;
+}
+
+bool KGame::save(TQDataStream &stream,bool saveplayers)
+{ return savegame(stream, false,saveplayers); }
+
+bool KGame::savegame(TQDataStream &stream,bool /*network*/,bool saveplayers)
+{
+  // Save Game Data
+
+  // internal variables
+  TQ_INT32 c=cookie();
+  stream << c;
+
+  uint p=(uint)policy();
+  stream << p;
+  stream << d->mUniquePlayerNumber;
+  int newseed=(int)d->mRandom->getLong(65535);
+  stream << newseed;
+  d->mRandom->setSeed(newseed);
+
+ // Properties
+ dataHandler()->save(stream);
+
+ // Save all data that need to be saved *before* the players are saved
+ emit signalSavePrePlayers(stream);
+
+ if (saveplayers)
+ {
+   savePlayers(stream,playerList());
+ }
+ else
+ {
+   stream << (uint)0; // no players saved
+ }
+
+ stream << (TQ_INT16)KGAME_LOAD_COOKIE;
+
+ emit signalSave(stream);
+ return true;
+}
+
+void KGame::savePlayer(TQDataStream &stream,KPlayer* p)
+{
+// this could be in KGameMessage as well
+ stream << (TQ_INT32)p->rtti();
+ stream << (TQ_INT32)p->id();
+ stream << (TQ_INT32)p->calcIOValue();
+ p->save(stream);
+}
+
+void KGame::savePlayers(TQDataStream &stream, KGamePlayerList *list)
+{
+ if (!list)
+ {
+   list=playerList();
+ }
+
+ TQ_INT32 cnt=list->count();
+ kdDebug(11001) << "Saving KGame " << cnt << " KPlayer objects " << endl;
+ stream << cnt;
+ KPlayer *player;
+ for ( player=list->first(); player != 0; player=list->next() )
+ {
+   savePlayer(stream,player);
+ }
+}
+
+KPlayer *KGame::createPlayer(int /*rtti*/,int /*io*/,bool /*isvirtual*/)
+{
+  kdWarning(11001) << "   No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
+  return new KPlayer;
+}
+KPlayer *KGame::loadPlayer(TQDataStream& stream,bool isvirtual)
+{
+  TQ_INT32 rtti,id,iovalue;
+  stream >> rtti >> id >> iovalue;
+  KPlayer *newplayer=findPlayer(id);
+  if (!newplayer)
+  {
+    kdDebug(11001) << k_funcinfo << "Player "<< id << " not found...asking user to create one " << endl;
+    newplayer=createPlayer(rtti,iovalue,isvirtual);
+    //emit signalCreatePlayer(newplayer,rtti,iovalue,isvirtual,this);
+  }
+  /*
+  if (!newplayer)
+  {
+    kdWarning(11001) << "   No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
+    newplayer=new KPlayer;
+  }
+  else
+  {
+    kdDebug(11001) << "   USER Player " << newplayer << " done player->rtti=" << newplayer->rtti() << " rtti=" << rtti << endl;
+  }
+  */
+  newplayer->load(stream);
+  if (isvirtual)
+  {
+    newplayer->setVirtual(true);
+  }
+  return newplayer;
+}
+
+// ----------------- Player handling -----------------------
+
+KPlayer * KGame::findPlayer(TQ_UINT32 id) const
+{
+ for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
+ {
+   if (it.current()->id() == id)
+   {
+     return it.current();
+   }
+ }
+ for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
+ {
+   if (it.current()->id() == id)
+   {
+     return it.current();
+   }
+ }
+ return 0;
+}
+
+// it is necessary that addPlayer and systemAddPlayer are called in the same
+// order. Ie if addPlayer(foo) followed by addPlayer(bar) is called, you must
+// not call systemAddPlayer(bar) followed by systemAddPlayer(foo), as the
+// mAddPlayerList would get confused. Should be no problem as long as comServer
+// and the clients are working correctly.
+// BUT: if addPlayer(foo) does not arrive by any reason while addPlayer(bar)
+// does, we would be in trouble...
+void KGame::addPlayer(KPlayer* newplayer)
+{
+ kdDebug(11001) << k_funcinfo << ":  " << "; maxPlayers=" << maxPlayers() << " playerCount=" << playerCount() << endl;
+ if (!newplayer)
+ {
+  kdFatal(11001) << "trying to add NULL player in KGame::addPlayer()" << endl;
+  return ;
+ }
+
+ if (maxPlayers() >= 0 && (int)playerCount() >= maxPlayers())
+ {
+   kdWarning(11001) << "cannot add more than " << maxPlayers() << " players - deleting..." << endl;
+   delete newplayer;
+   return;
+ }
+
+ if (newplayer->id() == 0)
+ {
+   d->mUniquePlayerNumber++;
+   newplayer->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber, gameId()));
+   kdDebug(11001) << k_funcinfo << "NEW!!! player " << newplayer << " now has id " << newplayer->id() << endl;
+ }
+ else
+ {
+   // this could happen in games which use their own ID management by certain
+   // reasons. that is NOT recommended
+   kdDebug(11001) << k_funcinfo << "player " << newplayer << " already has an id: " << newplayer->id() << endl;
+ }
+
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ // We distinguis here what policy we have
+ if (policy()==PolicyLocal || policy()==PolicyDirty)
+ {
+   systemAddPlayer(newplayer);
+ }
+ if (policy()==PolicyClean || policy()==PolicyDirty)
+ {
+   savePlayer(stream,newplayer);
+   // Store the player for delayed clean adding
+   if (policy()==PolicyClean)
+   {
+     d->mAddPlayerList.enqueue(newplayer);
+   }
+   sendSystemMessage(stream,(int)KGameMessage::IdAddPlayer, 0);
+ }
+}
+
+void KGame::systemAddPlayer(KPlayer* newplayer)
+{
+ if (!newplayer)
+ {
+   kdFatal(11001) << "trying to add NULL player in KGame::systemAddPlayer()" << endl;
+   return ;
+ }
+ if (newplayer->id() == 0)
+ {
+   kdWarning(11001) << k_funcinfo << "player " << newplayer << " has no ID" << endl;
+ }
+
+ if (findPlayer(newplayer->id()))
+ {
+   kdError(11001) << "ERROR: Double adding player !!!!! NOT GOOD !!!!!! " << newplayer->id() << "...I delete it again" << endl;
+   delete newplayer;
+ }
+ else
+ {
+   kdDebug(11001) << "Trying to add player " << newplayer <<" maxPlayers="<<maxPlayers()<<" playerCount="<<playerCount() << endl;
+   // Add the player to the game
+   d->mPlayerList.append(newplayer);
+   newplayer->setGame(this);
+   kdDebug(11001) << "Player: isVirtual=" << newplayer->isVirtual() << endl;
+   kdDebug(11001) << "        id=" << newplayer->id() << "  #Players="
+                  << d->mPlayerList.count() << " added " << newplayer
+                  << "  (virtual=" << newplayer->isVirtual() << ")" << endl;
+   emit signalPlayerJoinedGame(newplayer);
+ }
+}
+
+// Called by the KPlayer destructor
+void KGame::playerDeleted(KPlayer *player)
+{
+ kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
+
+ if (policy()==PolicyLocal || policy()==PolicyDirty)
+ {
+   systemRemovePlayer(player,false);
+ }
+ if (policy()==PolicyClean || policy()==PolicyDirty)
+ {
+   if (!player->isVirtual())
+   {
+     kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
+     sendSystemMessage(player->id(), KGameMessage::IdRemovePlayer, 0);
+   }
+ }
+}
+
+bool KGame::removePlayer(KPlayer * player, TQ_UINT32 receiver)
+{//transmit to all clients, or to receiver only
+ if (!player)
+ {
+   kdFatal(11001) << "trying to remove NULL player in KGame::removePlayer()" << endl;
+   return false;
+ }
+ kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
+
+ if (policy()==PolicyLocal || policy()==PolicyDirty)
+ {
+   systemRemovePlayer(player,true);
+ }
+ if (policy()==PolicyClean || policy()==PolicyDirty)
+ {
+   kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
+   sendSystemMessage(player->id(),KGameMessage::IdRemovePlayer, receiver);
+ }
+ return true;
+ // we will receive the message in networkTransmission()
+}
+
+void KGame::systemRemovePlayer(KPlayer* player,bool deleteit)
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ if (!player)
+ {
+   kdWarning(11001) << "cannot remove NULL player" << endl;
+   return;
+ }
+ if (!systemRemove(player,deleteit))
+ {
+   kdWarning(11001) << "player " << player << "(" << player->id() << ") Could not be found!" << endl;
+ }
+
+ if (gametqStatus()==(int)Run && playerCount()<minPlayers())
+ {
+   kdWarning(11001) << k_funcinfo ": not enough players, PAUSING game\n" << endl;
+   setGametqStatus(Pause);
+ }
+}
+
+bool KGame::systemRemove(KPlayer* p,bool deleteit)
+{
+ if (!p)
+ {
+   kdWarning(11001) << "cannot remove NULL player" << endl;
+   return false;
+ }
+ bool result;
+ kdDebug(11001) << k_funcinfo << ": Player (" << p->id() << ") to be removed " << p << endl;
+
+ if (d->mPlayerList.count() == 0)
+ {
+   result = false;
+ }
+ else
+ {
+   result = d->mPlayerList.remove(p);
+ }
+
+ emit signalPlayerLeftGame(p);
+
+ p->setGame(0);
+ if (deleteit)
+ {
+   delete p;
+ }
+
+ return result;
+}
+
+bool KGame::inactivatePlayer(KPlayer* player)
+{
+ if (!player)
+ {
+   return false;
+ }
+ kdDebug(11001) << "Inactivate player " << player->id() << endl;
+
+ if (policy()==PolicyLocal || policy()==PolicyDirty)
+ {
+   systemInactivatePlayer(player);
+ }
+ if (policy()==PolicyClean || policy()==PolicyDirty)
+ {
+   sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
+ }
+
+ return true;
+}
+
+bool KGame::systemInactivatePlayer(KPlayer* player)
+{
+ if (!player || !player->isActive())
+ {
+   return false;
+ }
+ kdDebug(11001) << " Inactivate player " << player->id() << endl;
+
+ int pid=player->id();
+ // Virtual players cannot be deactivated. They will be removed
+ if (player->isVirtual())
+ {
+   systemRemovePlayer(player,true);
+ }
+ else
+ {
+   d->mPlayerList.remove(player);
+   d->mInactivePlayerList.prepend(player);
+   player->setActive(false);
+ }
+ emit signalPlayerLeftGame(player);
+ if (isAdmin())
+ {
+   d->mInactiveIdList.prepend(pid);
+ }
+ return true;
+}
+
+bool KGame::activatePlayer(KPlayer * player)
+{
+  if (!player)
+  {
+    return false;
+  }
+  kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
+  if (policy()==PolicyLocal || policy()==PolicyDirty)
+  {
+    systemActivatePlayer(player);
+  }
+  if (policy()==PolicyClean || policy()==PolicyDirty)
+  {
+    sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer);
+  }
+ return true;
+}
+
+bool KGame::systemActivatePlayer(KPlayer* player)
+{
+ if (!player || player->isActive())
+ {
+   return false;
+ }
+ kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
+
+ d->mInactivePlayerList.remove(player);
+ player->setActive(true);
+ addPlayer(player);
+ if (isAdmin())
+ {
+   d->mInactiveIdList.remove(player->id());
+ }
+ return true;
+}
+
+// -------------------- Properties ---------------------------
+
+void KGame::setMaxPlayers(uint maxnumber)
+{ if (isAdmin()) { d->mMaxPlayer.changeValue(maxnumber); } }
+
+void KGame::setMinPlayers(uint minnumber)
+{ if (isAdmin()) { d->mMinPlayer.changeValue(minnumber); } }
+
+uint KGame::minPlayers() const
+{ return d->mMinPlayer.value(); }
+
+int KGame::maxPlayers() const
+{ return d->mMaxPlayer.value(); }
+
+uint KGame::playerCount() const
+{ return d->mPlayerList.count(); }
+
+int KGame::gametqStatus() const
+{ return d->mGametqStatus.value(); }
+
+bool KGame::isRunning() const
+{ return d->mGametqStatus.value() == Run; }
+
+KGamePropertyHandler* KGame::dataHandler() const
+{ return d->mProperties; }
+
+
+KGame::KGamePlayerList* KGame::inactivePlayerList()
+{ return &d->mInactivePlayerList; }
+
+const KGame::KGamePlayerList* KGame::inactivePlayerList() const
+{ return &d->mInactivePlayerList; }
+
+KGame::KGamePlayerList* KGame::playerList()
+{ return &d->mPlayerList; }
+
+const KGame::KGamePlayerList* KGame::playerList() const
+{ return &d->mPlayerList; }
+
+KRandomSequence* KGame::random() const
+{ return d->mRandom; }
+
+
+bool KGame::sendPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
+{
+ if (!player)
+ {
+   kdError(11001) << k_funcinfo << ": NULL player" << endl;
+   return false;
+ }
+ if (!isRunning())
+ {
+   kdError(11001) << k_funcinfo << ": game not running" << endl;
+   return false;
+ }
+
+ kdDebug(11001) << k_funcinfo << ": transmitting playerInput over network" << endl;
+ sendSystemMessage(msg, (int)KGameMessage::IdPlayerInput, player->id(), sender);
+ return true;
+}
+
+bool KGame::systemPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
+{
+ if (!player)
+ {
+   kdError(11001) << k_funcinfo << ": NULL player" << endl;
+   return false;
+ }
+ if (!isRunning())
+ {
+   kdError(11001) << k_funcinfo << ": game not running" << endl;
+   return false;
+ }
+ kdDebug(11001) << "KGame: Got playerInput from messageServer... sender: " << sender << endl;
+ if (playerInput(msg,player))
+ {
+   playerInputFinished(player);
+ }
+ else
+ {
+   kdDebug(11001) << k_funcinfo<<": switching off player input"<<endl;
+   // TODO: (MH 03-2003): We need an return option from playerInput so that
+   // the player's is not automatically disabled here 
+   if (!player->asyncInput())
+   {
+     player->setTurn(false); // in turn based games we have to switch off input now
+   }
+ }
+ return true;
+}
+
+
+KPlayer * KGame::playerInputFinished(KPlayer *player)
+{
+ kdDebug(11001) << k_funcinfo<<"player input finished for "<<player->id()<<endl;
+ // Check for game over and if not allow the next player to move
+ int gameOver = 0;
+ if (gameSequence())
+ {
+   gameSequence()->setCurrentPlayer(player);
+ }
+ // do not call gameSequence()->checkGameOver() to keep backward compatibility!
+ gameOver = checkGameOver(player);
+ if (gameOver!=0)
+ {
+   if (player)
+   {
+     player->setTurn(false);
+   }
+   setGametqStatus(End);
+   emit signalGameOver(gameOver,player,this);
+ }
+ else if (!player->asyncInput())
+ {
+   player->setTurn(false); // in turn based games we have to switch off input now
+   if (gameSequence())
+   {
+     TQTimer::singleShot(0,this,TQT_SLOT(prepareNext()));
+   }
+ }
+ return player;
+}
+
+// Per default we do not do anything
+int KGame::checkGameOver(KPlayer *player)
+{
+ if (gameSequence())
+ {
+   return gameSequence()->checkGameOver(player);
+ }
+ return 0;
+}
+
+void KGame::setGameSequence(KGameSequence* sequence)
+{
+ delete d->mGameSequence;
+ d->mGameSequence = sequence;
+ if (d->mGameSequence)
+ {
+   d->mGameSequence->setGame(this);
+ }
+}
+
+KGameSequence* KGame::gameSequence() const
+{
+  return d->mGameSequence;
+}
+
+void KGame::prepareNext()
+{
+ if (gameSequence())
+ {
+   // we don't call gameSequence->nextPlayer() to keep old code working
+   nextPlayer(gameSequence()->currentPlayer());
+ }
+}
+
+KPlayer *KGame::nextPlayer(KPlayer *last,bool exclusive)
+{
+ if (gameSequence())
+ {
+   return gameSequence()->nextPlayer(last, exclusive);
+ }
+ return 0;
+}
+
+void KGame::setGametqStatus(int status)
+{
+ kdDebug(11001) << k_funcinfo << ": GAMESTATUS CHANGED  to" << status << endl;
+ if (status==(int)Run && playerCount()<minPlayers()) 
+ {
+   kdDebug(11001) << k_funcinfo << ": not enough players, pausing game\n" << endl;
+   status=Pause;
+ }
+ d->mGametqStatus = status;
+}
+
+void KGame::networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 /*clientID*/)
+{//clientID is unused
+ // message targets a playerobject. If we find it we forward the message to the
+ // player. Otherwise we proceed here and hope the best that the user processes
+ // the message
+
+//  kdDebug(11001) << k_funcinfo << ": we="<<(int)gameId()<<" id="<<msgid<<" recv=" << receiver << " sender=" << sender << endl;
+
+ 
+ // *first* notice the game that something has changed - so no return prevents
+ // this
+ emit signalMessageUpdate(msgid, receiver, sender);
+ if (KGameMessage::isPlayer(receiver))
+ {
+   //kdDebug(11001) << "message id " << msgid << " seems to be for a player ("<<active=p->isActive()<<" recv="<< receiver << endl;
+   KPlayer *p=findPlayer(receiver);
+   if (p && p->isActive())
+   {
+     p->networkTransmission(stream,msgid,sender);
+     return;
+   }
+   if (p)
+   {
+      kdDebug(11001) << "player is here but not active" << endl;
+   }
+   else
+   {
+      kdDebug(11001) << "no player found" << endl;
+   }
+ }
+ // If it is not for a player it is meant for us!!!! Otherwise the
+ // gamenetwork would not have passed the message to us!
+
+ // GameProperties processed
+ if (d->mProperties->processMessage(stream, msgid, sender == gameId())) 
+ {
+//   kdDebug(11001 ) << "KGame: message taken by property - returning" << endl;
+   return ;
+ }
+
+ switch(msgid)
+ {
+   case KGameMessage::IdSetupGame:  // Client: First step in setup game
+   {
+     TQ_INT16 v;
+     TQ_INT32 c;
+     stream >> v >> c;
+     kdDebug(11001) << " ===================> (Client) " << k_funcinfo << ": Got IdSetupGame ================== " << endl;
+     kdDebug(11001) << "our game id is " << gameId() << " Lib version=" << v << " App Cookie=" << c << endl; 
+     // Verify identity of the network partners
+     if (c!=cookie())
+     {
+       kdError(11001) << "IdGameSetup: Negotiate Game: cookie mismatch I'am="<<cookie()<<" master="<<c<<endl;
+       sendError(KGameError::Cookie, KGameError::errCookie(cookie(), c));
+       disconnect(); // disconnect from master
+     }
+     else if (v!=KGameMessage::version())
+     {
+       sendError(KGameError::Version, KGameError::errVersion(v));
+       disconnect(); // disconnect from master
+     }
+     else
+     {
+       setupGame(sender);
+     }
+     kdDebug(11001) << "========== (Client) Setup game done\n";
+   }
+   break;
+   case KGameMessage::IdSetupGameContinue:  // Master: second step in game setup
+   {
+     kdDebug(11001) << "=====>(Master) " << k_funcinfo << " - IdSetupGameContinue" << endl;
+     setupGameContinue(stream, sender);
+   }
+   break;
+   case KGameMessage::IdActivatePlayer:  // Activate Player
+   {
+     int id;
+     stream >> id;
+     kdDebug(11001) << "Got IdActivatePlayer id=" << id << endl;
+     if (sender!=gameId()  || policy()!=PolicyDirty)
+     {
+       systemActivatePlayer(findPlayer(id));
+     }
+   }
+   break;
+   case KGameMessage::IdInactivatePlayer:  // Inactivate Player
+   {
+     int id;
+     stream >> id;
+     kdDebug(11001) << "Got IdInactivatePlayer id=" << id << endl;
+     if (sender!=gameId()  || policy()!=PolicyDirty)
+     {
+       systemInactivatePlayer(findPlayer(id));
+     }
+   }
+   break;
+   case KGameMessage::IdAddPlayer:
+   {
+     kdDebug(11001) << k_funcinfo << ": Got IdAddPlayer" << endl;
+     if (sender!=gameId()  || policy()!=PolicyDirty)
+     {
+       KPlayer *newplayer=0;
+       // We sent the message so the player is already available
+       if (sender==gameId())
+       {
+          kdDebug(11001) << "dequeue previously added player" << endl;
+          newplayer = d->mAddPlayerList.dequeue();
+       }
+       else
+       {
+         newplayer=loadPlayer(stream,true);
+       }
+       systemAddPlayer(newplayer);// the final, local, adding
+       //systemAddPlayer(stream);
+     }
+   }
+   break;
+   case KGameMessage::IdRemovePlayer: // Client should delete player id
+   {
+     int id;
+     stream >> id;
+     kdDebug(11001) << k_funcinfo << ": Got IdRemovePlayer " << id << endl;
+     KPlayer *p=findPlayer(id);
+     if (p)
+     {
+       // Otherwise the player is already removed
+       if (sender!=gameId()  || policy()!=PolicyDirty)
+       {
+         systemRemovePlayer(p,true);
+       }
+     }
+     else
+     {
+       kdWarning(11001) << k_funcinfo << "Cannot find player " << id << endl;
+     }
+   }
+   break;
+   case KGameMessage::IdGameLoad:
+   {
+     kdDebug(11001) << "====> (Client) " << k_funcinfo << ": Got IdGameLoad" << endl;
+     loadgame(stream,true,false);
+   }
+   break;
+   case KGameMessage::IdGameSetupDone:
+   {
+     int cid;
+     stream >> cid;
+     kdDebug(11001) << "====> (CLIENT) " << k_funcinfo << ": Got IdGameSetupDone for client "
+             << cid << " we are =" << gameId() << endl;
+     sendSystemMessage(gameId(), KGameMessage::IdGameConnected, 0);
+   }
+   break;
+   case KGameMessage::IdGameConnected:
+   {
+     int cid;
+     stream >> cid;
+     kdDebug(11001) << "====> (ALL) " << k_funcinfo << ": Got IdGameConnected for client "<< cid << " we are =" << gameId() << endl;
+     emit signalClientJoinedGame(cid,this);
+   }
+   break;
+
+   case KGameMessage::IdSyncRandom:  // Master forces a new random seed on us
+   {
+     int newseed;
+     stream >> newseed;
+     kdDebug(11001) << "CLIENT: setting random seed to " << newseed << endl;
+     d->mRandom->setSeed(newseed);
+   }
+   break;
+   case KGameMessage::IdDisconnect:
+   {
+   // if we disconnect we *always* start a local game. 
+   // this could lead into problems if we just change the message server
+     if (sender != gameId())
+     {
+         kdDebug(11001) << "client " << sender << " leaves game" << endl;
+         return;
+     }
+     kdDebug(11001) << "leaving the game" << endl;
+     // start a new local game
+     // no other client is by default connected to this so this call should be
+     // enough
+     setMaster();
+   }
+   break;
+   default:
+    {
+     if (msgid < KGameMessage::IdUser)
+     {
+       kdError(11001) << "incorrect message id " << msgid << " - emit anyway"
+                      << endl;
+     }
+     kdDebug(11001) << k_funcinfo << ": User data msgid " << msgid << endl;
+     emit signalNetworkData(msgid - KGameMessage::IdUser,((TQBuffer*)stream.device())->readAll(),receiver,sender);
+   }
+   break;
+ }
+
+}
+
+// called by the IdSetupGameContinue Message - MASTER SIDE
+// Here the master needs to decide which players can take part at the game
+// and which will be deactivated
+void KGame::setupGameContinue(TQDataStream& stream, TQ_UINT32 sender)
+{
+  KPlayer *player;
+  TQ_INT32 cnt;
+  int i;
+  stream >> cnt;
+
+  TQValueList<int> inactivateIds;
+
+  KGamePlayerList newPlayerList;
+  newPlayerList.setAutoDelete(true);
+  for (i=0;i<cnt;i++)
+  {
+    player=loadPlayer(stream,true);
+    kdDebug(11001) << " Master got player " << player->id() <<" rawgame=" << KGameMessage::rawGameId(player->id())  << " from sender " << sender << endl;
+    if (KGameMessage::rawGameId(player->id()) != sender)
+    {
+      kdError(11001) << "Client tries to add player with wrong game id - cheat possible" << endl;
+    }
+    else
+    {
+      newPlayerList.append(player);
+      kdDebug(11001) << " newplayerlist appended " << player->id() << endl;
+    }
+  }
+
+  newPlayersJoin(playerList(),&newPlayerList,inactivateIds);
+
+
+  kdDebug(11001) << " Master calculates how many players to activate client has cnt=" << cnt << endl;
+  kdDebug(11001) << " The game has " << playerCount() << " active players" << endl;
+  kdDebug(11001) << " The user deactivated "<< inactivateIds.count() << " player already " << endl;
+  kdDebug(11001) << " MaxPlayers for this game is " << maxPlayers() << endl;
+
+  // Do we have too many players? (After the programmer disabled some?)
+  // MH: We cannot use have player here as it CHANGES in the loop
+  // int havePlayers = cnt+playerCount()-inactivateIds.count();
+  kdDebug(11001) << " havePlayers " << cnt+playerCount()-inactivateIds.count() << endl;
+  while (maxPlayers() > 0 && maxPlayers() < (int)(cnt+playerCount() - inactivateIds.count()))
+  {
+    kdDebug(11001) << "  Still to deacticvate "
+            << (int)(cnt+playerCount()-inactivateIds.count())-(int)maxPlayers() 
+            << endl;
+    KPlayer *currentPlayer=0;
+    int currentPriority=0x7fff; // MAX_UINT (16bit?) to get the maximum of the list
+    // find lowest network priority which is not yet in the newPlayerList
+    // do this for the new players
+    for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() ) 
+    {
+      // Already in the list
+      if (inactivateIds.find(player->id())!=inactivateIds.end()) 
+      {
+        continue;
+      }
+      if (player->networkPriority()<currentPriority)
+      {
+        currentPriority=player->networkPriority();
+        currentPlayer=player;
+      }
+    }
+
+    // find lowest network priority which is not yet in the newPlayerList
+    // Do this for the network players
+    for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
+    {
+      // Already in the list
+      if (inactivateIds.find(player->id())!=inactivateIds.end()) 
+      {
+        continue;
+      }
+      if (player->networkPriority()<currentPriority)
+      {
+        currentPriority=player->networkPriority();
+        currentPlayer=player;
+      }
+    }
+
+    // add it to inactivateIds
+    if (currentPlayer)
+    {
+      kdDebug(11001) << "Marking player " << currentPlayer->id() << " for inactivation" << endl;
+      inactivateIds.append(currentPlayer->id());
+    }
+    else
+    {
+      kdError(11001) << "Couldn't find a player to dectivate..That is not so good..." << endl;
+      break;
+    }
+  }
+
+  kdDebug(11001) << "Alltogether deactivated " << inactivateIds.count() << " players" << endl;
+
+  TQValueList<int>::Iterator it;
+  for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
+  {
+    int pid=*it;
+    kdDebug(11001) << " pid=" << pid << endl;
+  }
+
+  // Now deactivate the network players from the inactivateId list
+  //TQValueList<int>::Iterator it;
+  for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
+  {
+    int pid=*it;
+    if (KGameMessage::rawGameId(pid) == sender)
+    {
+      continue; // client's player
+    }
+    kdDebug(11001) << " -> the network needs to deactivate " << pid <<endl;
+    player=findPlayer(pid);
+    if (player)
+    {
+      // We have to make REALLY sure that the player is gone. With any policy
+      systemInactivatePlayer(player);
+      if (policy()!=PolicyLocal)
+      {
+        sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
+      }
+    }
+    else
+    {
+      kdError(11001) << " We should deactivate a player, but cannot find it...not good." << endl;
+    }
+  }
+
+  // Now send out the player list which the client can activate
+  for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() )
+  {
+    kdDebug(11001) << " newplayerlist contains " << player->id() << endl;
+    // Only activate what is not in the list
+    if (inactivateIds.find(player->id())!=inactivateIds.end())
+    {
+      continue;
+    }
+    kdDebug(11001) << " -> the client can ******** reactivate ********  " << player->id() << endl;
+    sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer, sender);
+  }
+
+  // Save the game over the network
+  TQByteArray bufferS;
+  TQDataStream streamS(bufferS,IO_WriteOnly);
+  // Save game over netowrk and save players
+  savegame(streamS,true,true);
+  sendSystemMessage(streamS,KGameMessage::IdGameLoad,sender);
+
+
+  // Only to the client first , as the client will add players
+  sendSystemMessage(sender, KGameMessage::IdGameSetupDone, sender);
+}
+
+// called by the IdSetupGame Message - CLIENT SIDE
+// Client needs to prepare for network transfer
+void KGame::setupGame(TQ_UINT32 sender)
+{
+  TQByteArray bufferS;
+  TQDataStream streamS(bufferS,IO_WriteOnly);
+
+  // Deactivate all players
+  KGamePlayerList mTmpList(d->mPlayerList); // we need copy otherwise the removal crashes
+  TQ_INT32 cnt=mTmpList.count();
+  kdDebug(11001) << "Client: playerlistcount=" << d->mPlayerList.count() << " tmplistcout=" << cnt << endl;
+
+  streamS << cnt;
+
+  TQPtrListIterator<KPlayer> it(mTmpList);
+  KPlayer *player;
+  while (it.current())
+  {
+    player=it.current();
+    systemInactivatePlayer(player);
+    // Give the new game id to all players (which are inactivated now)
+    player->setId(KGameMessage::createPlayerId(player->id(),gameId()));
+
+    // Save it for the master to decide what to do
+    savePlayer(streamS,player);
+
+    ++it;
+    --cnt;
+  }
+  if (d->mPlayerList.count() > 0 || cnt!=0)
+  {
+    kdFatal(11001) << "KGame::setupGame(): Player list is not empty! or cnt!=0=" <<cnt << endl;
+  }
+
+  sendSystemMessage(streamS,KGameMessage::IdSetupGameContinue,sender);
+}
+
+// unused by KGame
+void KGame::syncRandom()
+{
+ int newseed=(int)d->mRandom->getLong(65535);
+ sendSystemMessage(newseed,KGameMessage::IdSyncRandom); // Broadcast
+ d->mRandom->setSeed(newseed);
+}
+
+void KGame::Debug()
+{
+ KGameNetwork::Debug();
+ kdDebug(11001) << "------------------- KGAME -------------------------" << endl;
+ kdDebug(11001) << "this:          " << this << endl;
+ kdDebug(11001) << "uniquePlayer   " << d->mUniquePlayerNumber << endl;
+ kdDebug(11001) << "gameStatus     " << gametqStatus() << endl;
+ kdDebug(11001) << "MaxPlayers :   " << maxPlayers() << endl;
+ kdDebug(11001) << "NoOfPlayers :  " << playerCount() << endl;
+ kdDebug(11001) << "NoOfInactive:  " << d->mInactivePlayerList.count() << endl;
+ kdDebug(11001) << "---------------------------------------------------" << endl;
+}
+
+void KGame::slotClientConnected(TQ_UINT32 clientID)
+{
+ if (isAdmin())
+ {
+   negotiateNetworkGame(clientID);
+ }
+}
+
+void KGame::slotServerDisconnected() // Client side
+{
+  kdDebug(11001) << "======= SERVER DISCONNECT ======="<<endl;
+  kdDebug(11001) << "+++ (CLIENT)++++++++" << k_funcinfo << ": our GameID="<<gameId() << endl;
+
+  int oldgamestatus=gametqStatus();
+
+  KPlayer *player;
+  KGamePlayerList removeList;
+  kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
+  kdDebug(11001) << "Inactive Playerlist of client=" << d->mInactivePlayerList.count() << " count" << endl;
+  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
+  {
+    // TODO: CHECK: id=0, could not connect to server in the first place??
+    if (KGameMessage::rawGameId(player->id()) != gameId() && gameId()!=0)
+    {
+      kdDebug(11001) << "Player " << player->id() << " belongs to a removed game" << endl;
+      removeList.append(player);
+    }
+  }
+
+  for ( player=removeList.first(); player != 0; player=removeList.next() )
+  {
+    bool remove = true;
+    emit signalReplacePlayerIO(player, &remove);
+    if (remove)
+    {
+      kdDebug(11001) << " ---> Removing player " << player->id() <<  endl;
+      systemRemovePlayer(player,true); // no network necessary
+    }
+  }
+
+  setMaster();
+  kdDebug(11001) << " our game id is after setMaster " << gameId() << endl;
+
+  KGamePlayerList mReList(d->mInactivePlayerList);
+  for ( player=mReList.first(); player != 0; player=mReList.next() )
+  {
+    // TODO ?check for priority? Sequence should be ok
+    if ((int)playerCount()<maxPlayers() || maxPlayers()<0)
+    {
+      systemActivatePlayer(player);
+    }
+  }
+  kdDebug(11001) << " Players activated player-cnt=" << playerCount() << endl;
+
+  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
+  {
+    int oldid=player->id();
+    d->mUniquePlayerNumber++;
+    player->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber,gameId()));
+    kdDebug(11001) << "Player id " << oldid <<" changed to " << player->id() << " as we are now local" << endl;
+  }
+  // TODO clear inactive lists ?
+  Debug();
+  for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() ) 
+  {
+    player->Debug();
+  }
+  kdDebug(11001) << "+++++++++++" << k_funcinfo << " DONE=" << endl;
+  emit signalClientLeftGame(0,oldgamestatus,this);
+}
+
+void KGame::slotClientDisconnected(TQ_UINT32 clientID,bool /*broken*/) // server side
+{
+ kdDebug(11001) << "++++(SERVER)+++++++" << k_funcinfo << " clientId=" << clientID << endl;
+
+ int oldgamestatus=gametqStatus();
+
+ KPlayer *player;
+ KGamePlayerList removeList;
+ kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
+ for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
+ {
+   if (KGameMessage::rawGameId(player->id())==clientID)
+   {
+     kdDebug(11001) << "Player " << player->id() << " belongs to the removed game" << endl;
+     removeList.append(player);
+   }
+ }
+
+ for ( player=removeList.first(); player != 0; player=removeList.next() )
+ {
+   // try to replace the KGameIO first
+   bool remove = true;
+   emit signalReplacePlayerIO(player, &remove);
+   if (remove) {
+     // otherwise (no new KGameIO) remove the player
+     kdDebug(11001) << " ---> Removing player " << player->id() <<  endl;
+     removePlayer(player,0);
+   }
+ }
+
+ // Now add inactive players - sequence should be ok
+ // TODO remove players from removed game
+ for (unsigned int idx=0;idx<d->mInactiveIdList.count();idx++)
+ {
+   TQValueList<int>::Iterator it1 = d->mInactiveIdList.at(idx);
+   player = findPlayer(*it1);
+   if (((int)playerCount() < maxPlayers() || maxPlayers() < 0) && player && KGameMessage::rawGameId(*it1) != clientID)
+   {
+     activatePlayer(player);
+   }
+ }
+  emit signalClientLeftGame(clientID,oldgamestatus,this);
+}
+
+
+// -------------------- Synchronisation -----------------------
+
+// this initializes a newly connected client.
+// we send the number of players (including type) as well as game status and
+// properties to the client. After the initialization has been completed both
+// clients should have the same status (ie players, properties, etc)
+void KGame::negotiateNetworkGame(TQ_UINT32 clientID)
+{
+ kdDebug(11001) << "===========================" << k_funcinfo << ": clientID=" << clientID << " =========================== "<< endl;
+ if (!isAdmin())
+ {
+   kdError(11001) << k_funcinfo << ": Serious WARNING..only gameAdmin should call this" << endl;
+   return ;
+ }
+
+ TQByteArray buffer;
+ TQDataStream streamGS(buffer,IO_WriteOnly);
+
+ // write Game setup specific data
+ //streamGS << (TQ_INT32)maxPlayers();
+ //streamGS << (TQ_INT32)minPlayers();
+
+ // send to the newly connected client *only*
+ TQ_INT16 v=KGameMessage::version();
+ TQ_INT32 c=cookie();
+ streamGS << v << c;
+ sendSystemMessage(streamGS, KGameMessage::IdSetupGame, clientID);
+}
+
+bool KGame::sendGroupMessage(const TQByteArray &msg, int msgid, TQ_UINT32 sender, const TQString& group)
+{
+// AB: group must not be i18n'ed!! we should better use an id for group and use
+// a groupName() for the name // FIXME
+ KPlayer *player;
+ for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
+ {
+   if (player && player->group()==group)
+   {
+     sendMessage(msg,msgid,player->id(), sender);
+   }
+ }
+ return true;
+}
+
+bool KGame::sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group)
+{ return sendGroupMessage(((TQBuffer*)msg.device())->buffer(), msgid, sender, group); }
+
+bool KGame::sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group)
+{
+ TQByteArray buffer;
+ TQDataStream stream(buffer, IO_WriteOnly);
+ stream << msg;
+ return sendGroupMessage(stream, msgid, sender, group);
+}
+
+bool KGame::addProperty(KGamePropertyBase* data)
+{ return dataHandler()->addProperty(data); }
+
+bool KGame::sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId)
+{ return sendSystemMessage(s, msgid, playerId); }
+
+void KGame::sendProperty(int msgid, TQDataStream& stream, bool* sent)
+{
+  bool s = sendSystemMessage(stream, msgid);
+  if (s)
+  {
+    *sent = true;
+  }
+}
+
+void KGame::emitSignal(KGamePropertyBase *me)
+{
+ emit signalPropertyChanged(me,this);
+}
+
+KGamePropertyBase* KGame::findProperty(int id) const
+{ return d->mProperties->find(id); }
+
+KGame::GamePolicy KGame::policy() const
+{
+ return d->mPolicy;
+}
+void KGame::setPolicy(GamePolicy p,bool recursive)
+{
+ // Set KGame policy
+ d->mPolicy=p;
+ if (recursive)
+ {
+   // Set all KGame property policy
+   dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
+
+   // Set all KPLayer (active or inactive) property policy
+   for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
+   {
+     it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
+   }
+   for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
+   {
+     it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
+   }
+ }
+}
+
+/*
+ * vim: et sw=2
+ */
diff --git a/libtdegames/kgame/kgame.h b/libtdegames/kgame/kgame.h
new file mode 100644
index 00000000..bf66dcb8
--- /dev/null
+++ b/libtdegames/kgame/kgame.h
@@ -0,0 +1,933 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAME_H_
+#define __KGAME_H_
+
+#include <tqstring.h>
+#include <tqptrlist.h>
+#include <tqvaluelist.h>
+
+#include "kgamenetwork.h"
+#include <kdemacros.h>
+class KRandomSequence;
+
+class KPlayer;
+class KGamePropertyBase;
+class KGamePropertyHandler;
+class KGameSequence;
+
+class KGamePrivate;
+
+/**
+ * @short The main KDE game object
+ *
+ * The KGame class is the central game object. A game basically
+ * consists of following features:
+ * - Player handling (add, remove,...)
+ * - Game status (end,start,pause,...)
+ * - load/save
+ * - Move (and message) handling
+ * - nextPlayer and gameOver()
+ * - Network connection (for KGameNetwork)
+ *
+ * Example:
+ * \code
+ * KGame *game=new KGame;
+ * \endcode
+ *
+ *
+ * @author Martin Heni <martin@heni-online.de>
+ *
+ */
+class KDE_EXPORT KGame : public KGameNetwork
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+	typedef TQPtrList<KPlayer> KGamePlayerList;
+
+	/**
+	 * The policy of the property. This can be PolicyClean (setVale uses
+	 * send), PolicyDirty (setValue uses changeValue) or
+	 * PolicyLocal (setValue uses setLocal).
+	 *
+	 * A "clean" policy means that the property is always the same on every
+	 * client. This is achieved by calling send which actually changes
+	 * the value only when the message from the MessageServer is received.
+	 *
+	 * A "dirty" policy means that as soon as setValue is called the
+	 * property is changed immediately. And additionally sent over network.
+	 * This can sometimes lead to bugs as the other clients do not
+	 * immediately have the same value. For more information see
+	 * changeValue.
+	 *
+	 * PolicyLocal means that a KGameProperty behaves like ever
+	 * "normal" variable. Whenever setValue is called (e.g. using "=")
+	 * the value of the property is changes immediately without sending it
+	 * over network. You might want to use this if you are sure that all
+	 * clients set the property at the same time.
+	 **/
+	enum GamePolicy
+	{
+		PolicyUndefined = 0,
+		PolicyClean = 1,
+		PolicyDirty = 2,
+		PolicyLocal = 3
+	};
+
+    /**
+     * Create a KGame object. The cookie is used to identify your
+     * game in load/save and network operations. Change this between
+     * games.
+     */
+    KGame(int cookie=42,TQObject* parent=0);
+
+    /**
+    * Destructs the game
+    */
+    virtual ~KGame();
+
+    /**
+     * Gives debug output of the game status
+     */
+    virtual void Debug();
+
+    /**
+     * Game status - Use this to Control the game flow.
+     * The KGame e.g. sets the status to Pause when you have
+     * less player than the minimum amount
+     */
+	enum GametqStatus
+	{
+		Init = 0,
+		Run = 1,
+		Pause = 2,
+		End = 3,
+		Abort = 4,
+		SystemPause = 5,
+		Intro = 6,
+		UsertqStatus = 7
+	};
+
+    // Properties
+    /**
+     * Returns a list of all active players
+     *
+     * @return the list of players
+     */
+    KGamePlayerList *playerList();
+
+    /**
+     * The same as @ref playerList but returns a const pointer.
+     **/
+    const KGamePlayerList *playerList() const;
+
+    /**
+     * Returns a list of all inactive players
+     * @return the list of players
+     */
+    KGamePlayerList *inactivePlayerList();
+
+    /**
+     * The same as @ref inactivePlayerList but returns a const pointer.
+     **/
+    const KGamePlayerList *inactivePlayerList() const;
+
+    /**
+     * Returns a pointer to the game's KRandomSequence. This sequence is
+     * identical for all network players!
+     * @return KRandomSequence pointer
+     */
+    KRandomSequence *random() const;
+
+    /**
+     * @return The KGameSequence object that is currently in use.
+     * @see setGameSequence
+     **/
+    KGameSequence *gameSequence() const;
+
+    /**
+     * Is the game running
+     * @return true/false
+     */
+    bool isRunning() const;
+
+    // Player handling
+    /**
+     * Returns the player object for a given player id
+     * @param id Player id
+     * @return player object
+     */
+    KPlayer *findPlayer(TQ_UINT32 id) const;
+
+    /**
+     * Set a new @ref KGameSequence to control player management. By default
+     * KGame uses a normal @ref KGameSequence object. You might want to subclass
+     * that and provide your own object.
+     *
+     * The previous sequence will get deleted.
+     * @param sequence The new game sequence object. KGame takes ownership and
+     * will delete it on destruction!
+     **/
+    void setGameSequence(KGameSequence* sequence);
+
+    /**
+     * Note that KPlayer::save must be implemented properly, as well as
+     * KPlayer::rtti
+     * This will only send a message to all clients. The player is _not_ added
+     * directly!
+     * See also playerInput which will be called as soon as the
+     * player really has been added.
+     *
+     * Note that an added player will first get into a "queue" and won't be in
+     * the game. It will be added to the game as soon as systemAddPlayer is
+     * called what will happen as soon as IdAddPlayer is received.
+     *
+     * Note: you probably want to connect to signalPlayerJoinedGame for
+     * further initialization!
+     * @param newplayer The player you want to add. KGame will send a message to
+     * all clients and add the player using systemAddPlayer
+     **/
+    void addPlayer(KPlayer* newplayer);
+
+    /**
+     * Sends a message over the network, msgid=IdRemovePlayer.
+     *
+     * As soon as this message is received by networkTransmission
+     * systemRemovePlayer is called and the player is removed.
+     **/
+    //AB: TODO: make sendMessage to return if the message will be able to be
+    //sent, eg if a socket is connected, etc. If sendMessage returns false
+    //remove the player directly using systemRemovePlayer
+    bool removePlayer(KPlayer * player) { return removePlayer(player, 0); }
+
+    /**
+     * Called by the destructor of KPlayer to remove itself from the game
+     *
+     **/
+    void playerDeleted(KPlayer * player);
+
+    /**
+     * sends activate player: internal use only?
+     */
+    bool activatePlayer(KPlayer *player);
+
+    /**
+     * sends inactivate player: internal use only?
+     */
+    bool inactivatePlayer(KPlayer *player);
+
+    /**
+     * Set the maximal number of players. After this is
+     * reached no more players can be added. You must be ADMIN to call this (@see
+     * isAdmin).
+     * @param maxnumber maximal number of players
+     */
+    void setMaxPlayers(uint maxnumber);
+
+    /**
+     * What is the maximal number of players?
+     * @return maximal number of players
+     */
+    int maxPlayers() const;
+
+    /**
+     * Set the minimal number of players. A game can not be started
+     * with less player resp. is paused when already running. You must be ADMIN
+     * to call this (see @ref isAdmin)!
+     * @param minnumber minimal number of players
+     */
+    void setMinPlayers(uint minnumber);
+
+    /**
+     * What is the minimal number of players?
+     * @return minimal number of players
+     */
+    uint minPlayers() const;
+
+    /**
+     * Returns how many players are plugged into the game
+     * @return number of players
+     */
+    uint playerCount() const;
+
+    /**
+     * @deprecated
+     * Use @ref KGameSequence::nextPlayer instead
+     **/
+    virtual KPlayer * nextPlayer(KPlayer *last,bool exclusive=true);
+
+    // Input events
+    /**
+     * Called by KPlayer to send a player input to the
+     * KMessageServer.
+     **/
+    virtual bool sendPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
+
+    /**
+     * Called when a player input arrives from KMessageServer.
+     *
+     * Calls prepareNext (using TQTimer::singleShot) if gameOver()
+     * returns 0. This function should normally not be used outside KGame.
+     * It could be made non-virtual,protected in a later version. At the
+     * moment it is a virtual function to give you more control over KGame.
+     *
+     * For documentation see playerInput.
+     **/
+    virtual bool systemPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
+
+    /**
+    * This virtual function is called if the KGame needs to create a new player.
+    * This happens only over a network and with load/save. Doing nothing
+    * will create a default KPlayer. If you want to have your own player
+    * you have to create one with the given rtti here.
+    * Note: If your game uses a player class derived from KPlayer you MUST
+    * override this function and create your player here. Otherwise the
+    * game will crash.
+    * Example:
+    * \code
+    *  KPlayer *MyGame::createPlayer(int rtti,int io,bool isvirtual)
+    *  {
+    *    KPlayer *player=new MyPlayer;
+    *    if (!isvirtual) // network player ?
+    *    {
+    *      // Define something like this to add the IO modules
+    *      createIO(player,(KGameIO::IOMode)io);
+    *    }
+    *    return player;
+    *    }
+    * \endcode
+    *
+    * @param rtti is the type of the player (0 means default KPlayer)
+    * @param io is the 'or'ed rtti of the KGameIO's
+    * @param isvirtual true if player is virtual
+    */
+    virtual KPlayer *createPlayer(int rtti,int io,bool isvirtual);
+
+    // load/save
+    /**
+     * Load a saved game, from file OR network. This function has
+     * to be overwritten or you need to connect to the load signal
+     * if you have game data other than KGameProperty.
+     * For file load you should reset() the game before any load attempt
+     * to make sure you load into an clear state.
+     *
+     * @param stream a data stream where you can stream the game from
+     * @param reset - shall the game be reset before loading
+     *
+     * @return true?
+     */
+    virtual bool load(TQDataStream &stream,bool reset=true);
+
+    /**
+     * Same as above function but with different parameters
+     *
+     * @param filename - the filename of the file to be opened
+     * @param reset - shall the game be reset before loading
+     *
+     * @return true?
+     **/
+    virtual bool load(TQString filename,bool reset=true);
+
+    /**
+     * Save a game to a file OR to network. Otherwise the same as
+     * the load function
+     *
+     * @param stream a data stream to load the game from
+     * @param saveplayers If true then all players wil be saved too
+     *
+     * @return true?
+     */
+    virtual bool save(TQDataStream &stream,bool saveplayers=true);
+
+    /**
+     * Same as above function but with different parameters
+     *
+     * @param filename the filename of the file to be saved
+     * @param saveplayers If true then all players wil be saved too
+     *
+     * @return true?
+     **/
+    virtual bool save(TQString filename,bool saveplayers=true);
+
+    /**
+     * Resets the game, i.e. puts it into a state where everything
+     * can be started from, e.g. a load game
+     * Right now it does only need to delete all players
+     *
+     * @return true on success
+     */
+    virtual bool reset();
+
+
+    // Game sequence
+    /**
+     * returns the game status, ie running,pause,ended,...
+     *
+     * @return game status
+     */
+    int gametqStatus() const;
+
+    /**
+     * sets the game status
+     *
+     * @param status the new status
+     */
+    void setGametqStatus(int status);
+
+    /**
+    *  docu: see KPlayer
+    **/
+    bool addProperty(KGamePropertyBase* data);
+
+    /**
+     * This is called by KPlayer::sendProperty only! Internal function!
+     **/
+    bool sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId);
+
+    /**
+    * This function allows to find the pointer to a player
+    * property when you know it's id
+    */
+    KGamePropertyBase* findProperty(int id) const;
+
+    /**
+     * Changes the consistency policy of a property. The
+     * GamePolicy is one of PolicyClean (default), PolicyDirty or PolicyLocal.
+     *
+     * It is up to you to decide how you want to work.
+     **/
+    void setPolicy(GamePolicy p,bool recursive=true);
+
+    /**
+     * @return The default policy of the property
+     **/
+    GamePolicy policy() const;
+
+    /**
+     * See KGameNetwork::sendMessage
+     *
+     * Send a network message msg with a given message ID msgid to all players of
+     * a given group (see KPlayer::group)
+     * @param msg the message which will be send. See messages.txt for contents
+     * @param msgid an id for this message
+     * @param sender the id of the sender
+     * @param group the group of the tqreceivers
+     * @return true if worked
+     */
+    bool sendGroupMessage(const TQByteArray& msg, int msgid, TQ_UINT32 sender, const TQString& group);
+    bool sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group);
+    bool sendGroupMessage(int msg, int msgid, TQ_UINT32 sender, const TQString& group);
+    bool sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group);
+
+    /**
+     * This will either forward an incoming message to a specified player
+     * (see KPlayer::networkTransmission) or
+     * handle the message directly (e.g. if msgif==IdRemovePlayer it will remove
+     * the (in the stream) specified player). If both is not possible (i.e. the
+     * message is user specified data) the signal signalNetworkData is
+     * emitted.
+     *
+     * This emits signalMessageUpdate <em>before</em> doing anything with
+     * the message. You can use this signal when you want to be notified about
+     * an update/change.
+     * @param msgid Specifies the kind of the message. See messages.txt for
+     * further information
+     * @param stream The message that is being sent
+     * @param receiver The is of the player this message is for. 0 For broadcast.
+     * @param sender
+     * @param clientID the client from which we received the transmission - hardly used
+     **/
+    virtual void networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 clientID);
+
+    /**
+     * Returns a pointer to the KGame property handler
+     **/
+    KGamePropertyHandler* dataHandler() const;
+
+protected slots:
+    /**
+     * Called by KGamePropertyHandler only! Internal function!
+     **/
+    void sendProperty(int msgid, TQDataStream& stream, bool* sent);
+
+    /**
+      * Called by KGamePropertyHandler only! Internal function!
+     **/
+    void emitSignal(KGamePropertyBase *me);
+
+    /**
+     * @deprecated
+     * Use KGameSequence::prepareNext() instead
+     **/
+    virtual void prepareNext();
+
+
+    /**
+     * Calls negotiateNetworkGame()
+     * See KGameNetwork::signalClientConnected
+     **/
+    void slotClientConnected(TQ_UINT32 clientId);
+
+    /**
+     * This slot is called whenever the connection to a client is lost (ie the
+     * signal KGameNetwork::signalClientDisconnected is emitted) and will remove
+     * the players from that client.
+     * @param clientId The client the connection has been lost to
+     * @param broken (ignore this - not used)
+     **/
+    void slotClientDisconnected(TQ_UINT32 clientId,bool broken);
+
+    /**
+     * This slot is called whenever the connection to the server is lost (ie the
+     * signal KGameNetwork::signalConnectionBroken is emitted) and will
+     * switch to local game mode
+     **/
+    void slotServerDisconnected();
+
+signals:
+    /**
+     * When a client disconnects from the game usually all players from that
+     * client are removed. But if you use completely the KGame structure you
+     * probably don't want this. You just want to replace the KGameIO of the
+     * (human) player by a computer KGameIO. So this player continues game but
+     * is from this point on controlled by the computer.
+     *
+     * You achieve this by connecting to this signal. It is emitted as soon as a
+     * client disconnects on <em>all</em> other clients. Make sure to add a new
+     * KGameIO only once! you might want to use @ref isAdmin for this. If you
+     * added a new KGameIO set *remove=false otherwise the player is completely
+     * removed.
+     * @param player The player that is about to be removed. Add your new
+     * KGameIO here - but only on <em>one</em> client!
+     * @param remove Set this to FALSE if you don't want this player to be
+     * removed completely.
+     **/
+    void signalReplacePlayerIO(KPlayer* player, bool* remove);
+
+    /**
+     * The game will be loaded from the given stream. Load from here
+     * the data which is NOT a game or player property.
+     * It is not necessary to use this signal for a full property game.
+     *
+     * This signal is emitted <em>before</em> the players are loaded by 
+     * KGame. See also signalLoad
+     *
+     * You must load <em>exactly</em> the same data from the stream that you have saved
+     * in signalSavePrePlayers. Otherwise player loading will not work
+     * anymore.
+     *
+     * @param stream the load stream
+     */
+    void signalLoadPrePlayers(TQDataStream &stream);
+
+    /**
+     * The game will be loaded from the given stream. Load from here
+     * the data which is NOT a game or player property.
+     * It is not necessary to use this signal for a full property game.
+     *
+     * @param stream the load stream
+     */
+    void signalLoad(TQDataStream &stream);
+
+    /**
+     * The game will be saved to the given stream. Fill this with data
+     * which is NOT a game or player property.
+     * It is not necessary to use this signal for a full property game.
+     *
+     * This signal is emitted <em>before</em> the players are saved by 
+     * KGame. See also signalSave
+     *
+     * If you can choose between signalSavePrePlayers and signalSave then
+     * better use signalSave
+     *
+     * @param stream the save stream
+     **/
+    void signalSavePrePlayers(TQDataStream &stream);
+    
+    /**
+     * The game will be saved to the given stream. Fill this with data
+     * which is NOT a game or player property.
+     * It is not necessary to use this signal for a full property game.
+     *
+     * @param stream the save stream
+     */
+    void signalSave(TQDataStream &stream);
+
+    /**
+     * Is emmited if a game with a different version cookie is loaded.
+     * Normally this should result in an error. But maybe you do support
+     * loading of older game versions. Here would be a good place to do a
+     * conversion.
+     *
+     * @param stream - the load stream
+     * @param network - true if this is a network connect. False for load game
+     * @param cookie - the saved cookie. It differs from KGame::cookie()
+     * @param result - set this to true if you managed to load the game
+     */
+    void signalLoadError(TQDataStream &stream,bool network,int cookie, bool &result);
+
+    /**
+     * We got an user defined update message. This is usually done
+     * by a sendData in a inherited KGame Object which defines its
+     * own methods and has to syncronise them over the network.
+     * Reaction to this is usually a call to a KGame function.
+     */
+    void signalNetworkData(int msgid,const TQByteArray& buffer, TQ_UINT32 receiver, TQ_UINT32 sender);
+
+    /**
+     * We got an network message. this can be used to notify us that something
+     * changed. What changed can be seen in the message id. Whether this is
+     * the best possible method to do this is unclear...
+     */
+    void signalMessageUpdate(int msgid,TQ_UINT32 receiver,TQ_UINT32 sender);
+
+    /**
+     * a player left the game because of a broken connection or so!
+     *
+     * Note that when this signal is emitted the player is not part of @ref
+     * playerList anymore but the pointer is still valid. You should do some
+     * final cleanups here since the player is usually deleted after the signal
+     * is emitted.
+     *
+     * @param player the player who left the game
+     */
+    void signalPlayerLeftGame(KPlayer *player);
+
+    /**
+     * a player joined the game
+     *
+     * @param player the player who joined the game
+     */
+    void signalPlayerJoinedGame(KPlayer *player);
+
+
+    /**
+    * This signal is emmited if a player property changes its value and
+    * the property is set to notify this change
+    */
+    void signalPropertyChanged(KGamePropertyBase *property, KGame *me);
+
+    /**
+     * Is emitted after a call to gameOver() returns a non zero
+     * return code. This code is forwarded to this signal as 'status'.
+     *
+     * @param status the return code of gameOver()
+     * @param current the player who did the last move
+     * @param me a pointer to the KGame object
+     */
+    void signalGameOver(int status, KPlayer *current, KGame *me);
+
+    /**
+    * Is emmited after a client is successfully connected to the game.
+    * The client id is the id of the new game client. An easy way to
+    * check whether that's us is
+    * \code
+    *   if (clientid==gameid()) .. // we joined
+    *   else ... // someone joined the game
+    * \endcode
+    * @param clientid - The id of the new client
+    * @param me - our game pointer
+    */
+    void signalClientJoinedGame(TQ_UINT32 clientid,KGame *me);
+
+    /**
+    * This signal is emitted after a network partner left the
+    * game (either by a broken connection or voluntarily).
+    * All changes to the network players have already be done.
+    * If there are not enough players left, the game might have
+    * been paused. To check this you get the old gamestatus
+    * before the disconnection as argument here. The id of the
+    * client who left the game allows to distinguish who left the
+    * game. If it is 0, the server disconnected and you were a client
+    * which has been switched back to local play.
+    * You can use this signal to, e.g. set some menues back to local
+    * player when they were network before.
+    *
+    * @param clientID - 0:server left, otherwise the client who left
+    * @param oldgamestatus - the gamestatus before the loss
+    * @param me - our game pointer
+    **/
+    void signalClientLeftGame(int clientID,int oldgamestatus,KGame *me);
+
+
+protected:
+    /**
+     * A player input occurred. This is the most important function
+     * as the given message will contain the current move made by
+     * the given player.
+     * Note that you HAVE to overwrite this function. Otherwise your
+     * game makes no sense at all.
+     * Generally you have to return TRUE in this function. Only then
+     * the game sequence is proceeded by calling @ref playerInputFinished
+     * which in turn will check for game over or the next player
+     * However, if you have a delayed move, because you e.g. move a
+     * card or a piece you want to return FALSE to pause the game sequence
+     * and then manually call @ref playerInputFinished to resume it.
+     * Example:
+     * \code
+     * bool MyClass::playerInput(TQDataStream &msg,KPlayer *player)
+     * {
+     *   TQ_INT32 move;
+     *   msg >>  move;
+     *   kdDebug() << "  Player " << player->id() << " moved to " << move <<
+     *   endl;
+     *   return true;
+     * }
+     * \endcode
+     *
+     * @param msg the move message
+     * @param player the player who did the move
+     * @return true - input ready, false: input manual
+     */
+    virtual bool playerInput(TQDataStream &msg,KPlayer *player)=0;
+
+
+    /**
+    * Called after the player input is processed by the game. Here the
+    * checks for game over and nextPlayer (in the case of turn base games)
+    * are processed.
+    * Call this manually if you have a delayed move, i.e. your playerInput
+    * function returns FALSE. If it returns true you need not do anything
+    * here.
+    *
+    * @return the current player
+    *
+    **/
+    KPlayer *playerInputFinished(KPlayer *player);
+
+
+    /**
+    * This virtual function can be overwritten for your own player management.
+    * It is called when a new game connects to an existing network game or
+    * to the network master. In case you do not want all players of both games
+    * to be present in the new network game, you can deactivate players here.
+    * This is of particular importance if you have a game with fixed number of
+    * player like e.g. chess. A network connect needs to disable one player of
+    * each game to make sense.
+    *
+    * Not overwriting this function will activate a default behaviour which
+    * will deactivate players until the @ref maxPlayers() numebr is reached
+    * according to the KPlayer::networkPriority() value. Players with a low
+    * value will be kicked out first. With equal priority players of the new
+    * client will leave first. This means, not setting this value and not
+    * overwriting this function will never allow a chess game to add client
+    * players!!!
+    * On the other hand setting one player of each game to a networkPriorty of
+    * say 10, already does most of the work for you.
+    *
+    * The parameters of this function are the playerlist of the network game,
+    * which is @ref playerList(). The second argument is the player list of
+    * the new client who wants to join and the third argument serves as return
+    * parameter. All <em>player ID's</em> which are written into this list
+    * will be <em>removed</em> from the created game. You do this by an
+    * \code
+    * inactivate.append(player->id());
+    * \endcode
+    *
+    * @param oldplayer - the list of the network players
+    * @param newplayer - the list of the client players
+    * @param inactivate - the value list of ids to be deactivated
+    *
+    **/
+    virtual void newPlayersJoin(KGamePlayerList *oldplayer,
+				KGamePlayerList *newplayer,
+				TQValueList<int> &inactivate) {
+		Q_UNUSED( oldplayer );
+		Q_UNUSED( newplayer );
+		Q_UNUSED( inactivate );
+	}
+
+    /**
+    * Save the player list to a stream. Used for network game and load/save.
+    * Can be overwritten if you know what you are doing
+    *
+    * @param stream is the stream to save the player ot
+    * @param list the optional list is the player list to be saved, default is playerList()
+    *
+    **/
+    void savePlayers(TQDataStream &stream,KGamePlayerList *list=0);
+
+    /**
+     * Prepare a player for being added. Put all data about a player into the
+     * stream so that it can be sent to the KGameCommunicationServer using
+     * addPlayer (e.g.)
+     *
+     * This function ensures that the code for adding a player is the same in
+     * addPlayer as well as in negotiateNetworkGame
+     * @param stream is the stream to add the player
+     * @param player The player to add
+     **/
+    void savePlayer(TQDataStream& stream,KPlayer* player);
+
+    /**
+    * Load the player list from a stream. Used for network game and load/save.
+    * Can be overwritten if you know what you are doing
+    *
+    * @param stream is the stream to save the player to
+    * @param isvirtual will set the virtual flag true/false
+    *
+    **/
+    KPlayer *loadPlayer(TQDataStream& stream,bool isvirtual=false);
+
+
+    /**
+     * inactivates player. Use @ref inactivatePlayer instead!
+     */
+    bool systemInactivatePlayer(KPlayer *player);
+
+    /**
+     * activates player. Use @ref activatePlayer instead!
+     */
+    bool systemActivatePlayer(KPlayer *player);
+
+    /**
+     * Adds a player to the game
+     *
+     * Use @ref addPlayer to send @ref KGameMessage::IdAddPlayer. As soon as
+     * this Id is received this function is called, where the player (see @ref
+     * KPlayer::rtti) is added as well as its properties (see @ref KPlayer::save
+     * and @ref KPlayer::load)
+     *
+     * This method calls the overloaded @ref systemAddPlayer with the created
+     * player as argument. That method will really add the player.
+     * If you need to do some changes to your newly added player just connect to
+     * @ref signalPlayerJoinedGame
+     */
+
+    /**
+     * Finally adds a player to the game and therefore to the list.
+     **/
+    void systemAddPlayer(KPlayer* newplayer);
+
+    /**
+     * Removes a player from the game
+     *
+     * Use removePlayer to send KGameMessage::IdRemovePlayer. As soon
+     * as this Id is received systemRemovePlayer is called and the player is
+     * removed directly.
+     **/
+    void systemRemovePlayer(KPlayer* player,bool deleteit);
+
+    /**
+     * This member function will transmit e.g. all players to that client, as well as
+     * all properties of these players (at least if they have been added by
+     * @ref KPlayer::addProperty) so that the client will finally have the same
+     * status as the master. You want to overwrite this function if you expand
+     * KGame by any properties which have to be known by all clients.
+     *
+     * Only the ADMIN is allowed to call this.
+     * @param clientID The ID of the message client which has connected
+     **/
+    virtual void negotiateNetworkGame(TQ_UINT32 clientID);
+
+    /**
+     * syncronise the random numbers with all network clients
+     * not used by KGame - if it should be kept then as public method
+     */
+    void syncRandom();
+
+    void deletePlayers();
+    void deleteInactivePlayers();
+
+    /**
+     * @deprecated
+     * Use @ref KGameSequence instead.
+     *
+     * @param player the player who made the last move
+     * @return anything else but 0 is considered as game over
+     */
+    virtual int checkGameOver(KPlayer *player);
+
+    /**
+     * Load a saved game, from file OR network. Internal. 
+     * Warning: loadgame must not rely that all players all already
+     * activated. Actually the network will activate a player AFTER
+     * the loadgame only. This is not true anymore. But be careful 
+     * anyway.
+     *
+     * @param stream a data stream where you can stream the game from
+     * @param network is it a network call -> make players virtual
+     * @param reset shall the game be reset before loading
+     *
+     * @return true?
+     */
+    virtual bool loadgame(TQDataStream &stream, bool network, bool reset);
+
+    /**
+     * Save a game, to file OR network. Internal. 
+     *
+     * @param stream a data stream where you can stream the game from
+     * @param network is it a call from the network or from a file (unused but informative)
+     * @param saveplayers shall the players be saved too (should be TRUE)
+     *
+     * @return true?
+     */
+    virtual bool savegame(TQDataStream &stream, bool network,bool saveplayers);
+
+private:
+    //AB: this is to hide the "receiver" parameter from the user. It shouldn't be
+    //used if possible (except for init).
+    /**
+     * This is an overloaded function. Id differs from the public one only in
+     * its parameters:
+     *
+     * @param receiver The Client that will receive the message. You will hardly
+     * ever need this. It it internally used to initialize a newly connected
+     * client.
+     **/
+    //void addPlayer(KPlayer* newplayer, TQ_UINT32 receiver);
+
+    /**
+     * Just the same as the public one except receiver:
+     * @param receiver 0 for broadcast, otherwise the receiver. Should only be
+     * used in special circumstances and not outside KGame.
+     **/
+    bool removePlayer(KPlayer * player, TQ_UINT32 receiver);
+
+    /**
+     * Helping function - game negotiation
+     **/
+    void setupGame(TQ_UINT32 sender);
+
+    /**
+     * Helping function - game negotiation
+     **/
+    void setupGameContinue(TQDataStream& msg, TQ_UINT32 sender);
+
+    /**
+     * Removes a player from all lists, removes the @ref KGame pointer from the
+     * @ref KPlayer and deletes the player. Used by (e.g.) @ref
+     * systemRemovePlayer
+     * @return True if the player has been removed, false if the current is not
+     * found
+     **/
+    bool systemRemove(KPlayer* player,bool deleteit);
+
+
+private:
+    KGamePrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/kgamechat.cpp b/libtdegames/kgame/kgamechat.cpp
new file mode 100644
index 00000000..11f47f7b
--- /dev/null
+++ b/libtdegames/kgame/kgamechat.cpp
@@ -0,0 +1,341 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kgamechat.h"
+#include "kgamechat.moc"
+
+#include "kgame.h"
+#include "kplayer.h"
+#include "kgameproperty.h"
+#include "kgamemessage.h"
+
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <tqmap.h>
+#include <tqintdict.h>
+
+//FIXME:
+#define FIRST_ID 2 // first id, that is free of use, aka not defined above
+
+class KGameChatPrivate
+{
+public:
+	KGameChatPrivate()
+	{
+		mFromPlayer = 0;
+		mGame = 0;
+
+		mToMyGroup = -1;
+	}
+	
+	KGame* mGame;
+	KPlayer* mFromPlayer;
+	int mMessageId;
+
+
+	TQIntDict<KPlayer> mIndex2Player;
+
+	TQMap<int, int> mSendId2PlayerId;
+	int mToMyGroup; // just as the above - but for the group, not for players
+};
+
+KGameChat::KGameChat(KGame* g, int msgid, TQWidget* parent) : KChatBase(parent)
+{
+ init(g, msgid); 
+}
+
+KGameChat::KGameChat(KGame* g, int msgid, KPlayer* fromPlayer, TQWidget* parent) : KChatBase(parent)
+{
+ init(g, msgid);
+ setFromPlayer(fromPlayer);
+}
+
+KGameChat::KGameChat(TQWidget* parent) : KChatBase(parent)
+{
+ init(0, -1);
+}
+
+KGameChat::~KGameChat()
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ delete d;
+}
+
+void KGameChat::init(KGame* g, int msgId)
+{
+ kdDebug(11001) << k_funcinfo << endl;
+ d = new KGameChatPrivate;
+ setMessageId(msgId);
+
+ setKGame(g);
+}
+
+void KGameChat::addMessage(int fromId, const TQString& text)
+{
+ if (!d->mGame) {
+	kdWarning(11001) << "no KGame object has been set" << endl;
+	addMessage(i18n("Player %1").tqarg(fromId), text);
+ } else {
+	KPlayer* p = d->mGame->findPlayer(fromId);
+	if (p) {
+		kdDebug(11001) << "adding message of player " << p->name() << "id=" << fromId << endl;
+		addMessage(p->name(), text);
+	} else {
+		kdWarning(11001) << "Could not find player id " << fromId << endl;
+		addMessage(i18n("Unknown"), text);
+	}
+ }
+}
+
+void KGameChat::returnPressed(const TQString& text)
+{
+ if (!d->mFromPlayer) {
+	kdWarning(11001) << k_funcinfo << ": You must set a player first!" << endl;
+	return;
+ }
+ if (!d->mGame) {
+	kdWarning(11001) << k_funcinfo << ": You must set a game first!" << endl;
+	return;
+ }
+
+ kdDebug(11001) << "from: " << d->mFromPlayer->id() << "==" << d->mFromPlayer->name() << endl;
+
+ int id = sendingEntry();
+
+ if (isToGroupMessage(id)) {
+	// note: there is currently no support for other groups than the players
+	// group! It might be useful to send to other groups, too
+	TQString group = d->mFromPlayer->group();
+	kdDebug(11001) << "send to group " << group << endl;
+	int sender = d->mFromPlayer->id();
+	d->mGame->sendGroupMessage(text, messageId(), sender, group);
+
+	//TODO
+	//AB: this message is never received!! we need to connect to
+	//KPlayer::networkData!!!
+	//TODO
+	
+ } else {
+	int toPlayer = 0;
+	if (!isSendToAllMessage(id) && isToPlayerMessage(id)) {
+		toPlayer = playerId(id);
+		if (toPlayer == -1) {
+			kdError(11001) << k_funcinfo << ": don't know that player "
+					<< "- internal ERROR" << endl;
+		}
+	} 
+	int receiver = toPlayer;
+	int sender = d->mFromPlayer->id();
+	d->mGame->sendMessage(text, messageId(), receiver, sender);
+ }
+}
+
+void KGameChat::setMessageId(int msgid)
+{ d->mMessageId = msgid; }
+
+int KGameChat::messageId() const
+{ return d->mMessageId; }
+
+bool KGameChat::isSendToAllMessage(int id) const
+{ return (id == KChatBase::SendToAll); }
+
+bool KGameChat::isToGroupMessage(int id) const
+{ return (id == d->mToMyGroup); }
+
+bool KGameChat::isToPlayerMessage(int id) const
+{
+return d->mSendId2PlayerId.contains(id); }
+
+TQString KGameChat::sendToPlayerEntry(const TQString& name) const
+{ return i18n("Send to %1").tqarg(name); }
+
+int KGameChat::playerId(int id) const
+{
+ if (!isToPlayerMessage(id)) {
+	return -1;
+ }
+
+ return d->mSendId2PlayerId[id];
+}
+
+int KGameChat::sendingId(int playerId) const
+{
+ TQMap<int, int>::Iterator it;
+ for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
+	if (it.data() == playerId) {
+		return it.key();
+	}
+ }
+ return -1;
+}
+
+const TQString& KGameChat::fromName() const
+{ return d->mFromPlayer ? d->mFromPlayer->name() : TQString(); }
+
+bool KGameChat::hasPlayer(int id) const
+{
+ return (sendingId(id) != -1);
+}
+
+void KGameChat::setFromPlayer(KPlayer* p)
+{
+ if (!p) {
+	kdError(11001) << k_funcinfo << ": NULL player" << endl;
+	removeSendingEntry(d->mToMyGroup);
+	d->mFromPlayer = 0;
+	return;
+ }
+ if (d->mFromPlayer) {
+	changeSendingEntry(p->group(), d->mToMyGroup);
+ } else {
+	if (d->mToMyGroup != -1) {
+		kdWarning(11001) << "send to my group exists already - removing" << endl;
+		removeSendingEntry(d->mToMyGroup);
+	}
+	d->mToMyGroup = nextId();
+	addSendingEntry(i18n("Send to My Group (\"%1\")").tqarg(p->group()), d->mToMyGroup);
+ }
+ d->mFromPlayer = p;
+ kdDebug(11001) << k_funcinfo << " player=" << p << endl;
+}
+
+
+void KGameChat::setKGame(KGame* g)
+{
+ if (d->mGame) {
+	slotUnsetKGame();
+ }
+ kdDebug(11001) << k_funcinfo << " game=" << g << endl;
+ d->mGame = g;
+
+ if (d->mGame) {
+	connect(d->mGame, TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)), 
+			this, TQT_SLOT(slotAddPlayer(KPlayer*)));
+	connect(d->mGame, TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)), 
+			this, TQT_SLOT(slotRemovePlayer(KPlayer*)));
+	connect(d->mGame, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)),
+			this, TQT_SLOT(slotReceiveMessage(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)));
+	connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
+
+	TQPtrList<KPlayer> playerList = *d->mGame->playerList();
+	for (int unsigned i = 0; i < playerList.count(); i++) {
+		slotAddPlayer(playerList.at(i));
+	}
+ }
+}
+
+KGame* KGameChat::game() const
+{
+ return d->mGame;
+}
+
+KPlayer* KGameChat::fromPlayer() const
+{
+ return d->mFromPlayer;
+}
+
+void KGameChat::slotUnsetKGame()
+{
+//TODO: test this method!
+
+ if (!d->mGame) {
+	return;
+ }
+ disconnect(d->mGame, 0, this, 0);
+ removeSendingEntry(d->mToMyGroup);
+ TQMap<int, int>::Iterator it;
+ for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
+	removeSendingEntry(it.data());
+ }
+}
+
+void KGameChat::slotAddPlayer(KPlayer* p)
+{
+ if (!p) {
+	kdError(11001) << k_funcinfo << ": cannot add NULL player" << endl;
+	return;
+ }
+ if (hasPlayer(p->id())) {
+	kdError(11001) << k_funcinfo << ": player was added before" << endl;
+	return;
+ }
+
+ int sendingId = nextId();
+ addSendingEntry(comboBoxItem(p->name()), sendingId);
+ d->mSendId2PlayerId.insert(sendingId, p->id());
+ connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
+		this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
+ connect(p, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, KPlayer*)),
+		this, TQT_SLOT(slotReceivePrivateMessage(int, const TQByteArray&, TQ_UINT32, KPlayer*)));
+}
+
+void KGameChat::slotRemovePlayer(KPlayer* p)
+{
+ if (!p) {
+	kdError(11001) << k_funcinfo << ": NULL player" << endl;
+	return;
+ }
+ if (!hasPlayer(p->id())) {
+	kdError(11001) << k_funcinfo << ": cannot remove non-existent player" << endl;
+	return;
+ }
+
+ int id = sendingId(p->id());
+ removeSendingEntry(id);
+ p->disconnect(this);
+ d->mSendId2PlayerId.remove(id);
+}
+
+void KGameChat::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
+{
+ if (prop->id() == KGamePropertyBase::IdName) {
+//	kdDebug(11001) << "new Name" << endl;
+	changeSendingEntry(player->name(), sendingId(player->id()));
+/*
+	mCombo->changeItem(comboBoxItem(player->name()), index);
+ */
+ } else if (prop->id() == KGamePropertyBase::IdGroup) {
+ //TODO
+ }
+}
+
+void KGameChat::slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me)
+{
+ if (!me || me != fromPlayer()) {
+	kdDebug() << k_funcinfo << "nope - not for us!"  << endl;
+	return;
+ }
+ slotReceiveMessage(msgid, buffer, me->id(), sender);
+}
+
+void KGameChat::slotReceiveMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 , TQ_UINT32 sender)
+{
+ TQDataStream msg(buffer, IO_ReadOnly);
+ if (msgid != messageId()) {
+	return;
+ }
+
+ TQString text;
+ msg >> text;
+
+ addMessage(sender, text);
+}
+
diff --git a/libtdegames/kgame/kgamechat.h b/libtdegames/kgame/kgamechat.h
new file mode 100644
index 00000000..88139d33
--- /dev/null
+++ b/libtdegames/kgame/kgamechat.h
@@ -0,0 +1,224 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMECHAT_H__
+#define __KGAMECHAT_H__
+
+#include <tqstring.h>
+
+#include "kchatbase.h"
+#include <kdemacros.h>
+class KPlayer;
+class KGame;
+class KGamePropertyBase;
+
+class KGameChatPrivate;
+
+/**
+ * @short A Chat widget for KGame-based games
+ *
+ * Call @ref setFromPlayer() first - this will be used as the "from" part of
+ * every message you will send. Otherwise it won't work! You can also use the
+ * fromPlayer parameter in the constructor though...
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KGameChat : public KChatBase
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	/**
+	 * Construct a @ref KGame chat widget on @p game that used @p msgid for
+	 * the chat message. The @p fromPlayer is the local player (see @ref
+	 * setFromPlayer).
+	 **/
+	KGameChat(KGame* game, int msgid, KPlayer* fromPlayer, TQWidget * parent);
+
+	/**
+	 * @overload
+	 * To make use of this widget you need to call @ref setFromPlayer
+	 * manually.
+	 **/
+	KGameChat(KGame* game, int msgId, TQWidget* parent);
+
+	/**
+	 * @overload
+	 * This constructs a widget that is not usable. You must call at least
+	 * setGame, setFromPlayer and setMessageId manually.
+	 * @since 3.2
+	 **/
+	KGameChat(TQWidget* parent);
+
+	virtual ~KGameChat();
+
+	enum SendingIds {
+		SendToGroup = 1
+	};
+
+	/**
+	 * This sets the fromPlayer to @p player. The fromPlayer is the
+	 * player that will appear as "from" when you send messages through this
+	 * widget.
+	 * @param player The player of this widget
+	 **/
+	void setFromPlayer(KPlayer* player);
+
+	KPlayer* fromPlayer() const;
+
+	/**
+	 * Set the @ref KGame object for this chat widget. All messages will be
+	 * sent through this object. You don't have to implement any send
+	 * functions, just call this function, call @ref setFromPlayer and be
+	 * done :-)
+	 * @param g The @ref KGame object the messages will be sent through
+	 **/
+	void setKGame(KGame* g);
+
+	KGame* game() const;
+
+	/**
+	 * @return The id of the messages produced by KGameChat. The id will be
+	 * used in @ref KGame as parameter msgid in the method @ref KGame::sendMessage
+	 **/
+	int messageId() const;
+
+	/**
+	 * Change the message id of the chat widget. It is recommended that you
+	 * don't use this but prefer the constructor instead, but in certain
+	 * situations (such as using this widget in TQt designer) it may be
+	 * useful to change the message id.
+	 *
+	 * See also @ref messageId
+	 * @since 3.2
+	 **/
+	void setMessageId(int msgid);
+
+	/**
+	 * reimplemented from @ref KChatBase
+	 * @return @ref KPlayer::name() for the player set by @ref setFromPlayer
+	 **/
+	virtual const TQString& fromName() const;
+
+
+public slots:
+	virtual void addMessage(const TQString& fromName, const TQString& text) { KChatBase::addMessage(fromName, text);}
+	virtual void addMessage(int fromId, const TQString& text);
+
+	void slotReceiveMessage(int, const TQByteArray&, TQ_UINT32 receiver, TQ_UINT32 sender);
+
+protected:
+	/**
+	 * @param id The ID of the sending entry, as returned by @ref
+	 * KChatBase::sendingEntry
+	 * @return True if the entry "send to all" was selected, otherwise false
+	 **/
+	bool isSendToAllMessage(int id) const;
+
+	/**
+	 * Used to indicate whether a message shall be sent to a group of
+	 * players. Note that this was not yet implemented when this doc was
+	 * written so this description might be wrong. (FIXME)
+	 * @param id The ID of the sending entry, as returned by @ref
+	 * KChatBase::sendingEntry
+	 * @return True if the message is meant to be sent to a group (see @ref
+	 * KPlayer::group), e.g. if "send to my group" was selected.
+	 **/
+	bool isToGroupMessage(int id) const;
+	
+
+	/**
+	 * Used to indicate whether the message shall be sent to a single player
+	 * only. Note that you can also call @ref isSendToAllMessage and @ref
+	 * isToGroupMessage - if both return false it must be a player message.
+	 * This behaviour might be changed later - so don't depend on it.
+	 *
+	 * See also toPlayerId
+	 * @param id The ID of the sending entry, as returned by 
+	 * KChatBase::sendingEntry
+	 * @return True if the message shall be sent to a special player,
+	 * otherwise false.
+	 **/
+	bool isToPlayerMessage(int id) const;
+
+	/**
+	 * @param id The ID of the sending entry, as returned by
+	 * KChatBase::sendingEntry
+	 * @return The ID of the player (see KPlayer::id) the sending entry
+	 * belongs to. Note that the parameter id is an id as returned by ref
+	 * KChatBase::sendingEntry and the id this method returns is a 
+	 * KPlayer ID. If isToPlayerMessage returns false this method
+	 * returns -1
+	 **/
+	int playerId(int id) const;
+
+	/**
+	 * @param playerId The ID of the KPlayer object
+	 * @return The ID of the sending entry (see KChatBase) or -1 if
+	 * the player id was not found.
+	 **/
+	int sendingId(int playerId) const;
+
+	/**
+	 * @return True if the player with this ID was added before (see 
+	 * slotAddPlayer)
+	 **/
+	bool hasPlayer(int id) const;
+
+	/**
+	 * @param name The name of the added player
+	 * @return A string that will be added as sending entry in @ref
+	 * KChatBase. By default this is "send to name" where name is the name
+	 * that you specify. See also KChatBase::addSendingEntry
+	 **/
+	virtual TQString sendToPlayerEntry(const TQString& name) const;
+
+
+protected slots:
+	/**
+	 * Unsets a KGame object that has been set using setKGame
+	 * before. You don't have to call this - this is usually done
+	 * automatically.
+	 **/
+	void slotUnsetKGame();
+
+
+	void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
+	void slotAddPlayer(KPlayer*);
+	void slotRemovePlayer(KPlayer*);
+
+	/**
+	 * Called when KPlayer::signalNetworkData is emitted. The message
+	 * gets forwarded to slotReceiveMessage if @p me equals
+	 * fromPlayer.
+	 **/
+	void slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me);
+
+protected:
+	virtual void returnPressed(const TQString& text);
+
+private:
+	void init(KGame* g, int msgid);
+
+private:
+	KGameChatPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/kgameerror.cpp b/libtdegames/kgame/kgameerror.cpp
new file mode 100644
index 00000000..ef6145fb
--- /dev/null
+++ b/libtdegames/kgame/kgameerror.cpp
@@ -0,0 +1,80 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgameerror.h"
+#include "kgamemessage.h"
+
+#include <klocale.h>
+
+TQByteArray KGameError::errVersion(int remoteVersion)
+{
+ TQByteArray b;
+ TQDataStream s(b, IO_WriteOnly);
+ s << (TQ_INT32)KGameMessage::version();
+ s << (TQ_INT32)remoteVersion;
+ return b;
+}
+
+TQByteArray KGameError::errCookie(int localCookie, int remoteCookie)
+{
+ TQByteArray b;
+ TQDataStream s(b, IO_WriteOnly);
+ s << (TQ_INT32)localCookie;
+ s << (TQ_INT32)remoteCookie;
+ return b;
+}
+
+TQString KGameError::errorText(int errorCode, const TQByteArray& message)
+{
+ TQDataStream s(message, IO_ReadOnly);
+ return errorText(errorCode, s);
+}
+
+TQString KGameError::errorText(int errorCode, TQDataStream& s)
+{
+ TQString text;
+ switch (errorCode) {
+	case Cookie:
+	{
+		TQ_INT32 cookie1; 
+		TQ_INT32 cookie2;
+		s >> cookie1;
+		s >> cookie2;
+		text = i18n("Cookie mismatch!\nExpected Cookie: %1\nReceived Cookie: %2").tqarg(cookie1).tqarg(cookie2);
+		break;
+	}
+	case Version:
+	{
+		TQ_INT32 version1;
+		TQ_INT32 version2;
+		s >> version1;
+		s >> version2;
+		text = i18n("KGame Version mismatch!\nExpected Version: %1\nReceived Version: %2\n").tqarg(version1).tqarg(version2);
+		break;
+	}
+	default:
+		text = i18n("Unknown error code %1").tqarg(errorCode);
+ }
+ return text;
+}
+
diff --git a/libtdegames/kgame/kgameerror.h b/libtdegames/kgame/kgameerror.h
new file mode 100644
index 00000000..071737cc
--- /dev/null
+++ b/libtdegames/kgame/kgameerror.h
@@ -0,0 +1,59 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEERROR_H_
+#define __KGAMEERROR_H_
+
+#include <tqstring.h>
+
+
+class KGameError
+{
+public:
+	KGameError() { }
+	~KGameError() { }
+
+	enum ErrorCodes {
+		Cookie = 0, // Cookie mismatch
+		Version = 1 // Version mismatch
+	};
+
+	/**
+	 * Generate an error message with Erorr Code = ErrCookie
+	 **/
+	static TQByteArray errCookie(int localCookie, int remoteCookie);
+	static TQByteArray errVersion(int remoteVersion);
+
+	/**
+	 * Create an erorr text using a TQDataStream (TQByteArray) which was
+	 * created using @ref KGameError. This is the opposite function to all
+	 * the errXYZ() function (e.g. @ref errVersion).
+	 * You want to use this to generate the message that shall be 
+	 * displayed to the user.
+	 * @return an error message 
+	 **/
+	static TQString errorText(int errorCode, TQDataStream& message);
+	static TQString errorText(int errorCode, const TQByteArray& message);
+
+};
+
+#endif
diff --git a/libtdegames/kgame/kgameio.cpp b/libtdegames/kgame/kgameio.cpp
new file mode 100644
index 00000000..5b736ea0
--- /dev/null
+++ b/libtdegames/kgame/kgameio.cpp
@@ -0,0 +1,539 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgameio.h"
+#include "kgameio.moc"
+#include "kgame.h"
+#include "kplayer.h"
+#include "kgamemessage.h"
+#include "kmessageio.h"
+
+#include <kdebug.h>
+
+#include <tqwidget.h>
+#include <tqbuffer.h>
+#include <tqtimer.h>
+
+#include <stdlib.h>
+
+// ----------------------- Generic IO -------------------------
+KGameIO::KGameIO() : TQObject(0,0)
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
+  mPlayer = 0;
+}
+
+KGameIO::KGameIO(KPlayer* player) : TQObject(0,0)
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
+  mPlayer = 0;
+  if (player)
+  {
+    player->addGameIO(this);
+  }
+}
+
+KGameIO::~KGameIO()
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+  // unregister ourselves
+  if (player())
+  {
+    player()->removeGameIO(this, false);
+  }
+}
+
+void KGameIO::initIO(KPlayer *p)
+{
+  setPlayer(p);
+}
+
+void KGameIO::notifyTurn(bool b)
+{
+  if (!player())
+  {
+    kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
+    return;
+  }
+  bool sendit=false;
+  TQByteArray buffer;
+  TQDataStream stream(buffer, IO_WriteOnly);
+  emit signalPrepareTurn(stream, b, this, &sendit);
+  if (sendit)
+  {
+    TQDataStream ostream(buffer,IO_ReadOnly);
+    TQ_UINT32 sender = player()->id();  // force correct sender
+    kdDebug(11001) << "Prepare turn sendInput" << endl;
+    sendInput(ostream, true, sender);
+  }
+}
+
+KGame* KGameIO::game() const
+{
+  if (!player())
+  {
+    return 0;
+  }
+  return player()->game();
+}
+
+bool KGameIO::sendInput(TQDataStream& s, bool transmit, TQ_UINT32 sender)
+{
+  if (!player())
+  {
+    return false;
+  }
+  return player()->forwardInput(s, transmit, sender);
+}
+
+void KGameIO::Debug()
+{
+  kdDebug(11001) << "------------------- KGAMEINPUT --------------------" << endl;
+  kdDebug(11001) << "this:    " << this << endl;
+  kdDebug(11001) << "rtti :   " << rtti() << endl;
+  kdDebug(11001) << "Player:  " << player() << endl;
+  kdDebug(11001) << "---------------------------------------------------" << endl;
+}
+
+
+// ----------------------- Key IO ---------------------------
+KGameKeyIO::KGameKeyIO(TQWidget *parent) 
+   : KGameIO()
+{
+  if (parent)
+  {
+    kdDebug(11001) << "Key Event filter installed" << endl;
+    parent->installEventFilter(this);
+  }
+}
+
+KGameKeyIO::~KGameKeyIO()
+{
+  if (parent())
+  {
+    parent()->removeEventFilter(this);
+  }
+}
+
+int KGameKeyIO::rtti() const { return KeyIO; }
+
+bool KGameKeyIO::eventFilter( TQObject *o, TQEvent *e )
+{
+  if (!player())
+  {
+    return false;
+  }
+
+  // key press/release
+  if ( e->type() == TQEvent::KeyPress ||
+       e->type() == TQEvent::KeyRelease )
+  {
+     TQKeyEvent *k = (TQKeyEvent*)e;
+  //   kdDebug(11001) << "KGameKeyIO " << this << " key press/release " <<  k->key() << endl ;
+     TQByteArray buffer;
+     TQDataStream stream(buffer,IO_WriteOnly);
+     bool eatevent=false;
+     emit signalKeyEvent(this,stream,k,&eatevent);
+     TQDataStream msg(buffer,IO_ReadOnly);
+
+     if (eatevent && sendInput(msg))
+     {
+       return eatevent;
+     }
+     return false; // do not eat otherwise
+  }
+  return TQObject::eventFilter( o, e );    // standard event processing
+}
+
+
+// ----------------------- Mouse IO ---------------------------
+KGameMouseIO::KGameMouseIO(TQWidget *parent,bool trackmouse) 
+   : KGameIO()
+{
+  if (parent)
+  {
+    kdDebug(11001) << "Mouse Event filter installed tracking=" << trackmouse << endl;
+    parent->installEventFilter(this);
+    parent->setMouseTracking(trackmouse);
+  }
+}
+
+KGameMouseIO::~KGameMouseIO()
+{
+  if (parent())
+  {
+    parent()->removeEventFilter(this);
+  }
+}
+
+int KGameMouseIO::rtti() const
+{
+  return MouseIO;
+}
+
+void KGameMouseIO::setMouseTracking(bool b)
+{
+  if (parent())
+  {
+    ((TQWidget*)parent())->setMouseTracking(b);
+  }
+}
+
+bool KGameMouseIO::eventFilter( TQObject *o, TQEvent *e )
+{
+  if (!player())
+  {
+    return false;
+  }
+//  kdDebug(11001) << "KGameMouseIO " << this  << endl ;
+
+  // mouse action
+  if ( e->type() == TQEvent::MouseButtonPress ||
+       e->type() == TQEvent::MouseButtonRelease ||
+       e->type() == TQEvent::MouseButtonDblClick ||
+       e->type() == TQEvent::Wheel ||
+       e->type() == TQEvent::MouseMove
+       )
+  {
+     TQMouseEvent *k = (TQMouseEvent*)e;
+     // kdDebug(11001) << "KGameMouseIO " << this  << endl ;
+     TQByteArray buffer;
+     TQDataStream stream(buffer,IO_WriteOnly);
+     bool eatevent=false;
+     emit signalMouseEvent(this,stream,k,&eatevent);
+//     kdDebug(11001) << "################# eatevent=" << eatevent << endl;
+     TQDataStream msg(buffer,IO_ReadOnly);
+     if (eatevent && sendInput(msg))
+     {
+       return eatevent;
+     }
+     return false; // do not eat otherwise
+  }
+  return TQObject::eventFilter( o, e );    // standard event processing
+}
+
+
+// ----------------------- KGameProcesPrivate ---------------------------
+class KGameProcessIO::KGameProcessIOPrivate
+{
+public:
+  KGameProcessIOPrivate()
+  {
+    //mMessageServer = 0;
+    //mMessageClient = 0;
+    mProcessIO=0;
+  }
+  //KMessageServer *mMessageServer;
+  //KMessageClient *mMessageClient;
+  KMessageProcess *mProcessIO;
+};
+
+// ----------------------- Process IO ---------------------------
+KGameProcessIO::KGameProcessIO(const TQString& name) 
+   : KGameIO()
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)=" << sizeof(KGameProcessIO) << endl;
+  d = new KGameProcessIOPrivate;
+
+  //kdDebug(11001) << "================= KMEssageServer ==================== " << endl;
+  //d->mMessageServer=new KMessageServer(0,this);
+  //kdDebug(11001) << "================= KMEssageClient ==================== " << endl;
+  //d->mMessageClient=new KMessageClient(this);
+  kdDebug(11001) << "================= KMEssageProcessIO ==================== " << endl;
+  d->mProcessIO=new KMessageProcess(this,name);
+  kdDebug(11001) << "================= KMEssage Add client ==================== " << endl;
+  //d->mMessageServer->addClient(d->mProcessIO);
+  //kdDebug(11001) << "================= KMEssage SetSErver ==================== " << endl;
+  //d->mMessageClient->setServer(d->mMessageServer);
+  kdDebug(11001) << "================= KMEssage: Connect ==================== " << endl;
+  //connect(d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
+  //        this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32)));
+  //connect(d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)),
+  //        this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)));
+  connect(d->mProcessIO, TQT_SIGNAL(received(const TQByteArray&)),
+          this, TQT_SLOT(receivedMessage(const TQByteArray&)));
+  //kdDebug(11001) << "Our client is id="<<d->mMessageClient->id() << endl;
+}
+
+KGameProcessIO::~KGameProcessIO()
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+  kdDebug(11001) << "player="<<player() << endl;
+  if (player())
+  {
+    player()->removeGameIO(this,false);
+  }
+  if (d->mProcessIO)
+  {
+    delete d->mProcessIO;
+    d->mProcessIO=0;
+  }
+  delete d;
+}
+
+int KGameProcessIO::rtti() const
+{
+  return ProcessIO;
+}
+
+void KGameProcessIO::initIO(KPlayer *p)
+{
+  KGameIO::initIO(p);
+  // Send 'hello' to process
+  TQByteArray buffer;
+  TQDataStream stream(buffer, IO_WriteOnly);
+  TQ_INT16 id = p->userId();
+  stream << id;
+
+  bool sendit=true;
+  if (p)
+  {
+    emit signalIOAdded(this,stream,p,&sendit);
+    if (sendit )
+    {
+      TQ_UINT32 sender = p->id();
+      kdDebug(11001) <<  "Sending IOAdded to process player !!!!!!!!!!!!!! " << endl;
+      sendSystemMessage(stream, KGameMessage::IdIOAdded, 0, sender);
+    }
+  }
+}
+
+void KGameProcessIO::notifyTurn(bool b)
+{
+  if (!player())
+  {
+    kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
+    return;
+  }
+  bool sendit=true;
+  TQByteArray buffer;
+  TQDataStream stream(buffer,IO_WriteOnly);
+  stream << (TQ_INT8)b;
+  emit signalPrepareTurn(stream,b,this,&sendit);
+  if (sendit)
+  {
+    TQ_UINT32 sender=player()->id();
+    kdDebug(11001) <<  "Sending Turn to process player !!!!!!!!!!!!!! " << endl;
+    sendSystemMessage(stream, KGameMessage::IdTurn, 0, sender);
+  }
+}
+
+void KGameProcessIO::sendSystemMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+  sendAllMessages(stream, msgid, receiver, sender, false);
+}
+
+void KGameProcessIO::sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+  sendAllMessages(stream, msgid, receiver, sender, true);
+}
+
+void KGameProcessIO::sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg)
+{
+  kdDebug(11001) << "==============>  KGameProcessIO::sendMessage (usermsg="<<usermsg<<")" << endl;
+  // if (!player()) return ;
+  //if (!player()->isActive()) return ;
+
+  if (usermsg)
+  {
+    msgid+=KGameMessage::IdUser;
+  }
+
+  kdDebug(11001) << "=============* ProcessIO (" << msgid << "," << receiver << "," << sender << ") ===========" << endl;
+
+  TQByteArray buffer;
+  TQDataStream ostream(buffer,IO_WriteOnly);
+  TQBuffer *device=(TQBuffer *)stream.device();
+  TQByteArray data=device->buffer();;
+
+  KGameMessage::createHeader(ostream,sender,receiver,msgid);
+  // ostream.writeRawBytes(data.data()+device->at(),data.size()-device->at());
+  ostream.writeRawBytes(data.data(),data.size());
+  kdDebug(11001) << "   Adding user data from pos="<< device->at() <<" amount= " << data.size() << " byte " << endl;
+  //if (d->mMessageClient) d->mMessageClient->sendBroadcast(buffer);
+  if (d->mProcessIO)
+  {
+    d->mProcessIO->send(buffer);
+  }
+}
+
+//void KGameProcessIO::clientMessage(const TQByteArray& receiveBuffer, TQ_UINT32 clientID, const TQValueList <TQ_UINT32> &recv)
+void KGameProcessIO::receivedMessage(const TQByteArray& receiveBuffer)
+{
+  TQDataStream stream(receiveBuffer,IO_ReadOnly);
+  int msgid;
+  TQ_UINT32 sender;
+  TQ_UINT32 receiver;
+  KGameMessage::extractHeader(stream,sender,receiver,msgid);
+
+  kdDebug(11001) << "************* Got process message sender =" << sender 
+          << " receiver=" << receiver << "   msgid=" << msgid << endl;
+
+
+  // Cut out the header part...to not confuse network code
+  TQBuffer *buf=(TQBuffer *)stream.device();
+  TQByteArray newbuffer;
+  newbuffer.setRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
+  TQDataStream ostream(newbuffer,IO_ReadOnly);
+  kdDebug(11001) << "Newbuffer size=" << newbuffer.size() << endl;
+
+
+
+// This is a dummy message which allows us the process to talk with its owner
+  if (msgid==KGameMessage::IdProcessQuery)
+  {
+    emit signalProcessQuery(ostream,this);
+  }
+  else if (player())
+  {
+    sender = player()->id();  // force correct sender
+    if (msgid==KGameMessage::IdPlayerInput) 
+    {
+      sendInput(ostream,true,sender);
+    }
+    else
+    {
+      player()->forwardMessage(ostream,msgid,receiver,sender);
+    }
+  }
+  else
+  {
+    kdDebug(11001) << k_funcinfo << ": Got message from process but no player defined!" << endl;
+  }
+  newbuffer.resetRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
+}
+
+
+// ----------------------- Computer IO --------------------------
+class KGameComputerIO::KGameComputerIOPrivate
+{
+//TODO: maybe these should be KGameProperties!!
+public:
+  KGameComputerIOPrivate()
+  {
+    mAdvanceCounter = 0;
+    mReactionPeriod = 0;
+
+    mPauseCounter = 0;
+
+    mAdvanceTimer = 0;
+  }
+  int mAdvanceCounter;
+  int mReactionPeriod;
+
+  int mPauseCounter;
+
+  TQTimer* mAdvanceTimer;
+};
+
+KGameComputerIO::KGameComputerIO() : KGameIO()
+{
+  init();
+}
+
+KGameComputerIO::KGameComputerIO(KPlayer* p) : KGameIO(p)
+{
+  init();
+}
+
+void KGameComputerIO::init()
+{
+  d = new KGameComputerIOPrivate;
+}
+
+KGameComputerIO::~KGameComputerIO()
+{
+  if (d->mAdvanceTimer)
+  {
+    delete d->mAdvanceTimer;
+  }
+  delete d;
+}
+
+int KGameComputerIO::rtti() const
+{
+  return ComputerIO;
+}
+
+void KGameComputerIO::setReactionPeriod(int calls)
+{
+ d->mReactionPeriod = calls;
+}
+
+int KGameComputerIO::reactionPeriod() const
+{
+  return d->mReactionPeriod;
+}
+
+void KGameComputerIO::setAdvancePeriod(int ms)
+{
+  stopAdvancePeriod();
+  d->mAdvanceTimer = new TQTimer(this);
+  connect(d->mAdvanceTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(advance()));
+  d->mAdvanceTimer->start(ms);
+}
+
+void KGameComputerIO::stopAdvancePeriod()
+{
+  if (d->mAdvanceTimer)
+  {
+    d->mAdvanceTimer->stop();
+    delete d->mAdvanceTimer;
+  }
+}
+
+void KGameComputerIO::pause(int calls)
+{
+  d->mPauseCounter = calls;
+}
+
+void KGameComputerIO::unpause()
+{
+  pause(0);
+}
+
+void KGameComputerIO::advance()
+{
+  if (d->mPauseCounter > 0)
+  {
+    d->mPauseCounter--;
+    return;
+  }
+  else if (d->mPauseCounter < 0)
+  {
+    return;
+  }
+  d->mAdvanceCounter++;
+  if (d->mAdvanceCounter >= d->mReactionPeriod)
+  {
+    d->mAdvanceCounter = 0;
+    reaction();
+  }
+}
+
+void KGameComputerIO::reaction()
+{
+  emit signalReaction();
+}
+
+
diff --git a/libtdegames/kgame/kgameio.h b/libtdegames/kgame/kgameio.h
new file mode 100644
index 00000000..510ab0b7
--- /dev/null
+++ b/libtdegames/kgame/kgameio.h
@@ -0,0 +1,571 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEIO_H__
+#define __KGAMEIO_H__
+
+#include <tqstring.h>
+#include <tqobject.h>
+#include <kdemacros.h>
+class KPlayer;
+class KGame;
+class KProcess;
+
+/**
+ *  \short Base class for IO devices for games
+ *
+ *  This is the master class for
+ *  creating IO game devices. You cannot use it directly.
+ *  Either take one of the classes derived from it or
+ *  you have to create your own IO class derived from it (more probably).
+ *
+ *  The idea behind this class is to provide a common interface
+ *  for input devices into your game. By programming a KGameIO
+ *  device you need not distinguish the actual IO in the game
+ *  anymore. All work is done by the IO's. This allows very
+ *  easy reuse in other games as well.
+ *  A further advantage of using the IO's is that you can exchange
+ *  the control of a player at runtime. E.g. you switch a player
+ *  to be controlled by the computer or vice versa.
+ *
+ *  To achieve this you have to make all of your player inputs through a
+ *  KGameIO. You will usually call KGameIO::sendInput to do so. 
+ *
+ *  @author Martin Heni <martin@heni-online.de>
+ */
+class KDE_EXPORT KGameIO : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+    /**
+     * Constructs a KGameIO object
+     */
+   KGameIO();
+   KGameIO(KPlayer*);
+   virtual ~KGameIO();
+
+    /**
+     * Gives debug output of the game status
+     */
+   void Debug();
+
+   /**
+    * Identifies the KGameIO via the rtti function
+    */
+   enum IOMode {GenericIO=1,KeyIO=2,MouseIO=4,ProcessIO=8,ComputerIO=16};
+   /**
+    * Run time idendification. Predefined values are from IOMode
+    * You MUST overwrite this in derived classes!
+    *
+    * @return rtti value
+    */
+   virtual int rtti() const = 0;  // Computer, network, local, ...
+   
+   /**
+    * This function returns the player who owns this IO
+    *
+    * @return the player this IO device is plugged into
+    */
+   KPlayer *player() const {return mPlayer;}
+
+   /**
+    * Equivalent to player()->game()
+    * @return the @ref KGame object of this player
+    **/
+   KGame* game() const;
+
+   /**
+    * Sets the player to which this IO belongs to. This
+    * is done automatically when adding a device to a 
+    * player
+    *
+    * @param p the player
+    */
+   void setPlayer(KPlayer *p) {mPlayer=p;}
+
+   /**
+    * Init this device by setting the player and e.g. sending an
+    * init message to the device. This initialisation message is
+    * very useful for computer players as you can transmit the
+    * game status to them and only update this status in the setTurn
+    * commands.
+    *
+    * Called by @ref KPlayer::addGameIO only!
+    */
+   virtual void initIO(KPlayer *p);
+
+    /**
+     * Notifies the IO device that the player's setTurn had been called
+     * Called by KPlayer
+     *
+     * This emits @ref signalPrepareTurn and sends the turn if the send
+     * parameter is set to true.
+     *
+     * @param b turn is true/false
+     */
+    virtual void notifyTurn(bool b);
+
+    /**
+     * Send an input message using @ref KPlayer::forwardInput
+     **/
+    bool sendInput(TQDataStream& stream, bool transmit = true, TQ_UINT32 sender = 0);
+
+signals:
+    /**
+     * Signal generated when @ref KPlayer::myTurn changes. This can either be
+     * when you get the turn status or when you lose it.
+     *
+     * The datastream has to be filled with a move. If you set (or leave) the
+     * send parameter to FALSE then nothing happens: the datastream will be
+     * ignored. If you set it to TRUE @ref sendInput is used to
+     * send the move.
+     *
+     * Often you want to ignore this signal (leave send=FALSE) and send the
+     * message later. This is usually the case for a human player as he probably
+     * doesn't react immediately. But you can still use this e.g. to notify the
+     * player about the turn change. 
+     *
+     * Example:
+     * \code
+     *  void GameWindow::slotPrepareTurn(TQDataStream &stream,bool b,KGameIO *input,bool * )
+     *  {
+     *    KPlayer *player=input->player();
+     *    if (!player->myTurn()) return ;
+     *    if (!b) return ;        // only do something on setTurn(true)
+     *    stream << 1 << 2 << 3;  // Some data for the process
+     *  }
+     * \endcode
+     *
+     * @param io the KGameIO object itself
+     * @param stream the stream into which the move will be written
+     * @param turn the argument of setTurn
+     * @param send set this to true to send the generated move using @ref
+     * sendInput
+     **/
+    void signalPrepareTurn(TQDataStream & stream, bool turn, KGameIO *io, bool * send);
+
+
+private:
+   KPlayer *mPlayer;
+};
+
+/**
+ *  The KGameKeyIO class. It is used to process keyboard input
+ *  from a widget and create moves for the player it belongs to.
+ *  @author Martin Heni <martin@heni-online.de>
+ */
+class KDE_EXPORT KGameKeyIO : public KGameIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+    /**
+     * Create a keyboard input devices. All keyboards
+     * inputs of the given widgets are passed through a signal
+     * handler signalKeyEvent and can be used to generate
+     * a valid move for the player.
+     * Note the widget you pass to the constructor must be
+     * the main window of your application, e.g. view->parentWidget()
+     * as QT does not forward your keyevents otherwise. This means
+     * that this might be a different widget comapred to the one you
+     * use for mouse inputs!
+     * Example:
+     * \code
+     * KGameKeyIO *input;
+     *  input=new KGameKeyIO(myWidget);
+     *  connect(input,TQT_SIGNAL(signalKeyEvent(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)),
+     *          this,TQT_SLOT(slotKeyInput(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)));
+     * \endcode
+     *
+     * @param parent The parents widget whose keyboard events * should be grabbed
+     */
+    KGameKeyIO(TQWidget *parent);
+    virtual ~KGameKeyIO();
+
+    /**
+     * The idendification of the IO
+     *
+     * @return KeyIO
+     */
+    virtual int rtti() const;
+
+signals:
+      /**
+       * Signal handler for keyboard events. This function is called
+       * on every keyboard event. If appropriate it can generate a
+       * move for the player the device belongs to. If this is done
+       * and the event is eaten eatevent needs to be set to true.
+       * What move you generate (i.e. what you write to the stream)
+       * is totally up to you as it will not be evaluated but forwared
+       * to the player's/game's  input move function
+       * Example:
+       * \code
+       * KPlayer *player=input->player(); // Get the player
+       * TQ_INT32 key=e->key();
+       * stream << key;
+       * eatevent=true;
+       * \endcode
+       *
+       * @param io the IO device we belong to
+       * @param stream the stream where we write our move into
+       * @param m The TQKeyEvent we can evaluate
+       * @param eatevent set this to true if we processed the event
+       */
+      void signalKeyEvent(KGameIO *io,TQDataStream &stream,TQKeyEvent *m,bool *eatevent);
+
+protected:
+       /**
+       * Internal method to process the events
+       */
+       bool eventFilter( TQObject *o, TQEvent *e );
+};
+
+/**
+ *  The KGameMouseIO class. It is used to process mouse input
+ *  from a widget and create moves for the player it belongs to.
+ *  @author Martin Heni <martin@heni-online.de>
+ */
+class KDE_EXPORT KGameMouseIO : public KGameIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+    
+public:
+    /**
+     * Creates a mouse IO device. It captures all mouse
+     * event of the given widget and forwards them to the
+     * signal handler signalMouseEvent.
+     * Example:
+     * \code
+     * KGameMouseIO *input;
+     * input=new KGameMouseIO(mView);
+     * connect(input,TQT_SIGNAL(signalMouseEvent(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)),
+     *        this,TQT_SLOT(slotMouseInput(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)));
+     * \endcode
+     *
+     * @param parent The widget whose events should be captured
+     * @param trackmouse enables mouse tracking (gives mouse move events)
+     */
+    KGameMouseIO(TQWidget *parent,bool trackmouse=false);
+    virtual ~KGameMouseIO();
+    
+    /**
+     * Manually activate or deactivate mouse tracking
+     *
+     * @param b true = tracking on
+     */
+    void setMouseTracking(bool b);
+    /**
+     * The idendification of the IO
+     *
+     * @return MouseIO
+     */
+    virtual int rtti() const; 
+
+signals:
+      /**
+       * Signal handler for mouse events. This function is called
+       * on every mouse event. If appropriate it can generate a
+       * move for the player the device belongs to. If this is done
+       * and the event is eaten eatevent needs to be set to true.
+       * @see signalKeyEvent
+       * Example:
+       * \code
+       * KPlayer *player=input->player(); // Get the player
+       * TQ_INT32 button=e->button();
+       * stream << button;
+       * eatevent=true;
+       * \endcode
+       *
+       * @param io the IO device we belong to
+       * @param stream the stream where we write our move into
+       * @param m The TQMouseEvent we can evaluate
+       * @param eatevent set this to true if we processed the event
+       */
+      void signalMouseEvent(KGameIO *io,TQDataStream &stream,TQMouseEvent *m,bool *eatevent);
+
+protected:
+      /**
+      * Internal event filter
+      */
+      bool eventFilter( TQObject *o, TQEvent *e );
+
+};
+
+
+/**
+ *  The KGameProcessIO class. It is used to create a computer player
+ *  via a separate process and communicate transparetly with it.
+ *  Its counterpart is the @ref KGameProcess class which needs
+ *  to be used by the computer player. See its documentation
+ *  for the definition of the computer player.
+ *  @author Martin Heni <martin@heni-online.de>
+ */
+class KDE_EXPORT KGameProcessIO : public KGameIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+    
+public:
+    /** 
+     * Creates a computer player via a separate process. The process
+     * name is given as fully qualified filename. 
+     * Example:
+     * \code
+     * KGameProcessIO *input;
+     *   input=new KGameProcessIO(executable_file);
+     *  connect(input,TQT_SIGNAL(signalPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)),
+     *          this,TQT_SLOT(slotPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)));
+     *  connect(input,TQT_SIGNAL(signalProcessQuery(TQDataStream &,KGameProcessIO *)),
+     *          this,TQT_SLOT(slotProcessQuery(TQDataStream &,KGameProcessIO *)));
+     * \endcode
+     *
+     * @param name the filename of the process to start
+     */
+    KGameProcessIO(const TQString& name);
+
+    /**
+     * Deletes the process input devices 
+     */
+    virtual ~KGameProcessIO();
+
+    /**
+     * The idendification of the IO
+     *
+     * @return ProcessIO
+     */
+    int rtti() const;
+    
+    /**
+     * Send a message to the process. This is analogous to the sendMessage
+     * commands of KGame. It will result in a signal of the computer player
+     * on which you can react in the process player.
+     *
+     * @param stream  - the actual data
+     * @param msgid - the id of the message
+     * @param receiver - not used
+     * @param sender - who send the message
+     */
+    void sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
+
+    /**
+     * Send a system message to the process. This is analogous to the sendMessage
+     * commands of KGame. It will result in a signal of the computer player
+     * on which you can react in the process player.
+     *
+     * @param stream  - the actual data
+     * @param msgid - the id of the message
+     * @param receiver - not used
+     * @param sender - who send the message
+     */
+    void sendSystemMessage(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
+
+    /** 
+     * Init this device by setting the player and e.g. sending an
+     * init message to the device. Calling this function will emit
+     * the IOAdded signal on which you can react and initilise the
+     * computer player. 
+     * This function is called automatically when adding the IO to
+     * a player.
+     */
+    void initIO(KPlayer *p);
+
+    /**
+     *  Notifies the IO device that the player's setTurn had been called
+     *  Called by KPlayer. You can react on the @ref signalPrepareTurn to
+     *  prepare a message for the process, i.e. either update it on
+     * the changes made to the game since the last turn or the initIO
+     * has been called or transmit your gamestatus now.
+     *
+     *  @param turn is true/false
+     */
+    virtual void notifyTurn(bool turn);
+
+  protected:
+    /**
+     * Internal ~ombined function for all message handling 
+     **/
+    void sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg);
+
+  protected slots:
+  /**
+  * Internal message handler to receive data from the process
+  */
+    void receivedMessage(const TQByteArray& receiveBuffer);
+
+  
+signals:
+  /**
+   * A computer query message is received. This is a 'dummy'
+   * message sent by the process if it needs to communicate
+   * with us. It is not forwarded over the network.
+   * Reacting to this message allows you to 'answer' questions
+   * of the process, e.g. sending addition data which the process
+   * needs to calculate a move.
+   *
+   * Example:
+   * \code
+   *  void GameWindow::slotProcessQuery(TQDataStream &stream,KGameProcessIO *reply)
+   *  {
+   *    int no;
+   *    stream >> no;  // We assume the process sends us an integer question numner
+   *    if (no==1)     // but YOU have to do this in the process player
+   *    {
+   *      TQByteArray buffer;
+   *      TQDataStream out(buffer,IO_WriteOnly);
+   *      reply->sendSystemMessage(out,4242,0,0);  // lets reply something...
+   *    }
+   *  }
+   * \endcode
+   */
+  void signalProcessQuery(TQDataStream &stream,KGameProcessIO *me);
+
+  /**
+  * Signal generated when the computer player is added. 
+  * You can use this to communicated with the process and
+  * e.g. send initialisation information to the process.
+  *
+  * @param game the KGameIO object itself
+  * @param stream the stream into which the move will be written
+  * @param p the player itself
+  * @param send set this to false if no move should be generated
+  */
+  void signalIOAdded(KGameIO *game,TQDataStream &stream,KPlayer *p,bool *send);
+
+
+protected:
+
+private:
+  class KGameProcessIOPrivate;
+  KGameProcessIOPrivate* d;
+};
+
+/**
+ *  \brief KGameIO variant for real-time games
+ *
+ *  The KGameComputerIO class. It is used to create a LOCAL computer player
+ *  and communicate transparently with it. 
+ *  Question: Is this needed or is it overwritten anyway for a real game?
+ *
+ *  You most probably don't want to use this if you want to design a turn based
+ *  game/player. You'll rather use @ref KGameIO directly, i.e. subclass it
+ *  yourself. You just need to use @ref KGameIO::signalPrepareTurn and/or @ref
+ *  KGameIO::notifyTurn there.
+ *
+ *  This is rather meant to be of use in real time games.
+ *
+ *  @author  <b_mann@gmx.de>
+ */
+class KDE_EXPORT KGameComputerIO : public KGameIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+    
+public:
+    /** 
+     * Creates a LOCAL computer player 
+     *
+     */
+    KGameComputerIO();
+    KGameComputerIO(KPlayer* player);
+    ~KGameComputerIO();
+
+    int rtti() const;
+
+    /**
+     * The number of advance calls until the player (or rather: the IO)
+     * does something (default: 1). 
+     **/
+    void setReactionPeriod(int advanceCalls);
+    int reactionPeriod() const;
+
+    /**
+     * Start a TQTimer which calls advance every @p ms milli seconds.
+     **/
+    void setAdvancePeriod(int ms);
+
+    void stopAdvancePeriod();
+
+    /**
+     * Ignore calls number of advance calls. if calls is -1 then all 
+     * following advance calls are ignored until unpause is called.
+     *
+     * This simply prevents the internal advance counter to be increased.
+     *
+     * You may want to use this to emulate a "thinking" computer player. Note
+     * that this means if you increase the advance period (see 
+     * setAdvancePeriod), i.e. if you change the speed of your game, your
+     * computer player thinks "faster".
+     * @param calls Number of advance calls to be ignored
+     **/
+    void pause(int calls = -1);
+
+    /**
+     * Equivalent to pause(0). Immediately continue to increase the internal
+     * advance counter.
+     **/
+    void unpause();
+    
+public slots:
+    /**
+     * Works kind of similar to TQCanvas::advance. Increase the internal
+     * advance counter. If @p reactionPeriod is reached the counter is set back to
+     * 0 and @ref signalReaction is emitted. This is when the player is meant 
+     * to do something (move its units or so).
+     *
+     * This is very useful if you use TQCanvas as you can use this in your
+     * TQCanvas::advance call. The advantage is that if you change the speed
+     * of the game (i.e. change TQCanvas::setAdvancePeriod) the computer
+     * player gets slower as well.
+     *
+     * If you don't use TQCanvas you can use setAdvancePeriod to get
+     * the same result. Alternatively you can just use a TQTimer.
+     * 
+     **/
+    virtual void advance();
+  
+signals:
+    /**
+     * This signal is emitted when your computer player is meant to do
+     * something, or better is meant to be allowed to do something.
+     **/
+    void signalReaction();
+
+protected:
+    /**
+     * Default implementation simply emits signalReaction
+     **/
+    virtual void reaction();
+
+private:
+    void init();
+ 
+private:
+    class KGameComputerIOPrivate;
+    KGameComputerIOPrivate* d;
+};
+
+
+#endif
diff --git a/libtdegames/kgame/kgamemessage.cpp b/libtdegames/kgame/kgamemessage.cpp
new file mode 100644
index 00000000..9f5e4694
--- /dev/null
+++ b/libtdegames/kgame/kgamemessage.cpp
@@ -0,0 +1,156 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgamemessage.h"
+
+#include <klocale.h>
+
+#define MESSAGE_VERSION 2
+
+TQ_UINT32 KGameMessage::createPlayerId(int oldplayerid,TQ_UINT32 gameid)
+{
+  int p;
+  p = oldplayerid & 0x3ff; // remove game id
+  p |= (gameid << 10);
+  return p;
+}
+
+int KGameMessage::rawPlayerId(TQ_UINT32 playerid)
+{
+  return playerid & 0x03ff;
+}
+
+TQ_UINT32 KGameMessage::rawGameId(TQ_UINT32 playerid)
+{
+  return (playerid & 0xfc00) >> 10;
+}
+
+bool KGameMessage::isPlayer(TQ_UINT32 msgid)
+{
+  if (msgid & 0xfc00) {
+	return true;
+  } else {
+	return false;
+  }
+}
+
+bool KGameMessage::isGame(TQ_UINT32 msgid)
+{
+  return !isPlayer(msgid);
+}
+
+
+void KGameMessage::createHeader(TQDataStream &msg,TQ_UINT32 sender,TQ_UINT32 receiver,int msgid)
+{
+  msg << (TQ_INT16)sender << (TQ_INT16)receiver << (TQ_INT16)msgid;
+}
+
+void KGameMessage::extractHeader(TQDataStream &msg,TQ_UINT32 &sender,TQ_UINT32 &receiver,int &msgid)
+{
+  TQ_INT16 d3,d4,d5;
+  msg >> d3 >> d4 >> d5;
+  sender=d3;receiver=d4;msgid=d5;
+}
+
+void KGameMessage::createPropertyHeader(TQDataStream &msg,int id)
+{
+  msg << (TQ_INT16)id;
+}
+
+void KGameMessage::extractPropertyHeader(TQDataStream &msg,int &id)
+{
+  TQ_INT16 d1;
+  msg >> d1;
+  id=d1;
+}
+
+void KGameMessage::createPropertyCommand(TQDataStream &msg,int cmdid,int pid,int cmd)
+{
+  createPropertyHeader(msg,cmdid);
+  msg << (TQ_INT16)pid ;
+  msg << (TQ_INT8)cmd ;
+}
+
+void KGameMessage::extractPropertyCommand(TQDataStream &msg,int &pid,int &cmd)
+{
+  TQ_INT16 d1;
+  TQ_INT8 d2;
+  msg >> d1 >> d2;
+  pid=d1;
+  cmd=d2;
+}
+
+int KGameMessage::version()
+{
+  return MESSAGE_VERSION;
+}
+
+TQString KGameMessage::messageId2Text(int msgid)
+{
+// this should contain all KGameMessage::GameMessageIds
+// feel free to add missing ones, to remove obsolete one and even feel free to
+// let it be ;-)
+  switch (msgid) {
+	case KGameMessage::IdSetupGame:
+		return i18n("Setup Game");
+	case KGameMessage::IdSetupGameContinue:
+		return i18n("Setup Game Continue");
+	case KGameMessage::IdGameLoad:
+		return i18n("Load Game");
+	case KGameMessage::IdGameConnected:
+		return i18n("Client game connected");
+	case KGameMessage::IdGameSetupDone:
+		return i18n("Game setup done");
+	case KGameMessage::IdSyncRandom:
+		return i18n("Synchronize Random");
+	case KGameMessage::IdDisconnect:
+		return i18n("Disconnect");
+	case KGameMessage::IdPlayerProperty:
+		return i18n("Player Property");
+	case KGameMessage::IdGameProperty:
+		return i18n("Game Property");
+	case KGameMessage::IdAddPlayer:
+		return i18n("Add Player");
+	case KGameMessage::IdRemovePlayer:
+		return i18n("Remove Player");
+	case KGameMessage::IdActivatePlayer:
+		return i18n("Activate Player");
+	case KGameMessage::IdInactivatePlayer:
+		return i18n("Inactivate Player");
+	case KGameMessage::IdTurn:
+		return i18n("Id Turn");
+	case KGameMessage::IdError:
+		return i18n("Error Message");
+	case KGameMessage::IdPlayerInput:
+		return i18n("Player Input");
+	case KGameMessage::IdIOAdded:
+		return i18n("An IO was added");
+	case KGameMessage::IdProcessQuery:
+		return i18n("Process Query");
+	case KGameMessage::IdPlayerId:
+		return i18n("Player ID");
+	case KGameMessage::IdUser: // IdUser must be unknown for use, too!
+	default:
+		return TQString();
+  }
+}
diff --git a/libtdegames/kgame/kgamemessage.h b/libtdegames/kgame/kgamemessage.h
new file mode 100644
index 00000000..f4029895
--- /dev/null
+++ b/libtdegames/kgame/kgamemessage.h
@@ -0,0 +1,173 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEMSG_H_
+#define __KGAMEMSG_H_
+
+#include <tqdatastream.h>
+#include <kdemacros.h>
+
+class KDE_EXPORT KGameMessage
+{
+  public:
+    /**
+     * Creates a fully qualified player ID which contains the original
+     * player id in the lower bits and the game number in the higher bits.
+     * Do not rely on the exact bit positions as they are internal.
+     *
+     * See also @ref rawPlayerId and @ref rawGameId which are the inverse
+     * operations
+     *
+     * @param playerid the player id - can include a gameid (will get removed)
+     * @param gameid The game id (<64). 0 For broadcast.
+     * @return the new player id
+     */
+    static TQ_UINT32 createPlayerId(int player, TQ_UINT32 game);
+
+    /**
+     * Returns the raw playerid, that is, a id which does not
+     * contain the game number encoded in it. See also @ref createPlayerId which
+     * is the inverse operation.
+     *
+     * @param the player id
+     * @return the raw player id
+     **/
+    static int rawPlayerId(TQ_UINT32 playerid);
+
+    /**
+     * Returns the raw game id, that is, the game id the player
+     * belongs to. Se also @ref createPlayerId which is the inverse operation.
+     *
+     * @param the player id
+     * @return the raw game id
+     **/
+    static TQ_UINT32 rawGameId(TQ_UINT32 playerid);
+
+    /**
+     * Checks whether a message receiver/sender is a player
+     *
+     * @param id The ID of the sender/receiver
+     * @return true/false
+     */
+    static bool isPlayer(TQ_UINT32 id);
+
+    /**
+     * Checks whether the sender/receiver of a message is a game
+     *
+     * @param id The ID of the sender/receiver
+     * @return true/false
+     */
+    static bool isGame(TQ_UINT32 id);
+
+    /**
+     * Creates a message header given cookie,sender,receiver,...
+     *
+     * Also puts "hidden" header into the stream which are used by KGameClient
+     * (message length and magic cookie). If you don't need them remove them
+     * with @ref dropExternalHeader
+     */
+    static void createHeader(TQDataStream &msg, TQ_UINT32 sender, TQ_UINT32 receiver, int msgid);
+
+    /**
+     * Retrieves the information like cookie,sender,receiver,... from a message header 
+     *
+     * Note that it could be necessary to call @ref dropExternalHeader first
+     */
+    static void extractHeader(TQDataStream &msg,TQ_UINT32 &sender, TQ_UINT32 &receiver, int &msgid);
+
+    /**
+     * Creates a property header  given the property id
+     */
+    static void createPropertyHeader(TQDataStream &msg, int id);
+
+    /**
+     * Retrieves the property id from a property message header
+     */
+    static void extractPropertyHeader(TQDataStream &msg, int &id);
+
+    /**
+     * Creates a property header given the property id
+     */
+    static void createPropertyCommand(TQDataStream &msg, int cmdid, int pid, int cmd);
+
+    /**
+     * Retrieves the property id from a property message header
+     */
+    static void extractPropertyCommand(TQDataStream &msg, int &pid, int &cmd);
+
+    /**
+     * @return Version of the network library
+     */
+    static int version();
+
+    /**
+     * This function takes a @ref GameMessageIds as argument and returns a
+     * suitable string for it. This string can't be used to identify a message
+     * (as it is i18n'ed) but it can make debugging more easy. See also @ref
+     * KGameDebugDialog.
+     * @return Either a i18n'ed string (the name of the id) or TQString() if
+     * the msgid is unknown
+     **/
+    static TQString messageId2Text(int msgid);
+
+
+  /**
+   * Message Ids used inside @ref KGame.
+   *
+   * You can use your own custom message Id by adding @p IdUser to it.
+   **/
+// please document every new id with a short comment
+  enum GameMessageIds {
+// game init, game load, disconnect, ...
+    IdSetupGame=1,         // sent to a newly connected player
+    IdSetupGameContinue=2, // continue the setup
+    IdGameLoad=3,          // load/save the game to the client
+    IdGameConnected=4,     // Client successfully connected to master
+    IdSyncRandom=5,        // new random seed set - sync games
+    IdDisconnect=6,        // KGame object disconnects from game
+    IdGameSetupDone=7,     // New game client is now operational
+
+// properties
+    IdPlayerProperty=20,   // a player property changed
+    IdGameProperty=21,     // a game property changed
+
+// player management
+    IdAddPlayer=30,         // add a player
+    IdRemovePlayer=31,      // the player will be removed
+    IdActivatePlayer=32,    // Activate a player
+    IdInactivatePlayer=33,  // Inactivate a player
+    IdTurn=34,              // Turn to be prepared
+
+// to-be-categorized
+    IdError=100,            // an error occurred
+    IdPlayerInput=101,      // a player input occurred
+    IdIOAdded=102,          // KGameIO got added to a player...init this IO
+
+// special ids for computer player
+    IdProcessQuery=220,     // Process queries data (process only)
+    IdPlayerId=221,         // PlayerId got changed (process only)
+
+    IdUser=256          // a user specified message
+  };
+};
+
+#endif
diff --git a/libtdegames/kgame/kgamenetwork.cpp b/libtdegames/kgame/kgamenetwork.cpp
new file mode 100644
index 00000000..a3548579
--- /dev/null
+++ b/libtdegames/kgame/kgamenetwork.cpp
@@ -0,0 +1,516 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgamenetwork.h"
+#include "kgamenetwork.moc"
+#include "kgamemessage.h"
+#include "kgameerror.h"
+
+#include "kmessageserver.h"
+#include "kmessageclient.h"
+#include "kmessageio.h"
+#include <dnssd/publicservice.h>
+
+#include <kdebug.h>
+
+#include <tqbuffer.h>
+
+
+class KGameNetworkPrivate
+{
+public:
+        KGameNetworkPrivate()
+        {
+                mMessageClient = 0;
+                mMessageServer = 0;
+                mDisconnectId = 0;
+		mService = 0;
+        }
+
+public:
+        KMessageClient* mMessageClient;
+        KMessageServer* mMessageServer;
+        TQ_UINT32 mDisconnectId;  // Stores gameId() over a disconnect process
+	DNSSD::PublicService* mService;
+	TQString mType;
+	TQString mName;
+
+        int mCookie;
+};
+
+// ------------------- NETWORK GAME ------------------------
+KGameNetwork::KGameNetwork(int c, TQObject* parent) : TQObject(parent, 0)
+{
+ d = new KGameNetworkPrivate;
+ d->mCookie = (TQ_INT16)c;
+
+ // Init the game as a local game, i.e.
+ // create your own KMessageServer and a KMessageClient connected to it.
+ setMaster();
+
+ kdDebug(11001) << k_funcinfo << "this=" << this <<", cookie=" << cookie() << " sizeof(this)="<<sizeof(KGameNetwork) << endl;
+}
+
+KGameNetwork::~KGameNetwork()
+{
+ kdDebug(11001) << k_funcinfo << "this=" << this << endl;
+// Debug();
+ delete d->mService;
+ delete d;
+}
+
+// ----------------------------- status methods
+bool KGameNetwork::isNetwork() const
+{ return isOfferingConnections() || d->mMessageClient->isNetwork();}
+
+TQ_UINT32 KGameNetwork::gameId() const
+{
+  //return d->mMessageClient->id() ;
+  // Return stored id in the case of disconnect. In any other
+  // case the disconnect id is 0
+  if (d->mMessageClient->id()!=0 ) {
+    return d->mMessageClient->id() ;
+  } else {
+    return d->mDisconnectId;
+  }
+}
+
+int KGameNetwork::cookie() const
+{ return d->mCookie; }
+
+bool KGameNetwork::isMaster() const
+{ return (d->mMessageServer != 0); }
+
+bool KGameNetwork::isAdmin() const
+{ return (d->mMessageClient->isAdmin()); }
+
+KMessageClient* KGameNetwork::messageClient() const
+{ return d->mMessageClient; }
+
+KMessageServer* KGameNetwork::messageServer() const
+{ return d->mMessageServer; }
+
+// ----------------------- network init
+void KGameNetwork::setMaster()
+{
+ if (!d->mMessageServer) {
+   d->mMessageServer = new KMessageServer (cookie(), this);
+ } else {
+   kdWarning(11001) << k_funcinfo << "Server already running!!" << endl;
+ }
+ if (!d->mMessageClient) {
+   d->mMessageClient = new KMessageClient (this);
+   connect (d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
+            this, TQT_SLOT(receiveNetworkTransmission(const TQByteArray&, TQ_UINT32)));
+   connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
+            this, TQT_SIGNAL(signalConnectionBroken()));
+   connect (d->mMessageClient, TQT_SIGNAL(aboutToDisconnect(TQ_UINT32)),
+            this, TQT_SLOT(aboutToLoseConnection(TQ_UINT32)));
+   connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
+            this, TQT_SLOT(slotResetConnection()));
+
+   connect (d->mMessageClient, TQT_SIGNAL(adminStatusChanged(bool)),
+            this, TQT_SLOT(slotAdminStatusChanged(bool)));
+   connect (d->mMessageClient, TQT_SIGNAL(eventClientConnected(TQ_UINT32)),
+            this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)));
+   connect (d->mMessageClient, TQT_SIGNAL(eventClientDisconnected(TQ_UINT32, bool)),
+            this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32, bool)));
+
+   // broacast and direct messages are treated equally on receive.
+   connect (d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList<TQ_UINT32>&)),
+            d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)));
+
+ } else {
+   // should be no problem but still has to be tested
+   kdDebug(11001) << k_funcinfo << "Client already exists!" << endl;
+ }
+ d->mMessageClient->setServer(d->mMessageServer);
+}
+
+void KGameNetwork::setDiscoveryInfo(const TQString& type, const TQString& name)
+{
+ kdDebug() << k_funcinfo << type << ":" << name << endl;
+ d->mType = type;
+ d->mName = name;
+ tryPublish();
+}
+
+void KGameNetwork::tryPublish()
+{
+ if (d->mType.isNull() || !isOfferingConnections()) return;
+ if (!d->mService) d->mService = new DNSSD::PublicService(d->mName,d->mType,port());
+ else {
+   if (d->mType!=d->mService->type()) d->mService->setType(d->mType);
+   if (d->mName!=d->mService->serviceName()) d->mService->setServiceName(d->mName);
+   }
+ if (!d->mService->isPublished()) d->mService->publishAsync();
+}
+
+void KGameNetwork::tryStopPublishing()
+{
+ if (d->mService) d->mService->stop();
+}
+
+bool KGameNetwork::offerConnections(TQ_UINT16 port)
+{
+ kdDebug (11001) << k_funcinfo << "on port " << port << endl;
+ if (!isMaster()) {
+   setMaster();
+ }
+
+ // Make sure this is 0
+ d->mDisconnectId = 0;
+
+ // FIXME: This debug message can be removed when the program is working correct.
+ if (d->mMessageServer && d->mMessageServer->isOfferingConnections()) {
+   kdDebug (11001) << k_funcinfo << "Already running as server! Changing the port now!" << endl;
+ }
+
+ tryStopPublishing();
+ kdDebug (11001) << k_funcinfo << "before Server->initNetwork" << endl;
+ if (!d->mMessageServer->initNetwork (port)) {
+   kdError (11001) << k_funcinfo << "Unable to bind to port " << port << "!" << endl;
+   // no need to delete - we just cannot listen to the port
+//   delete d->mMessageServer;
+//   d->mMessageServer = 0;
+//   d->mMessageClient->setServer((KMessageServer*)0);
+   return false;
+ }
+ kdDebug (11001) << k_funcinfo << "after Server->initNetwork" << endl;
+ tryPublish();
+ return true;
+}
+
+bool KGameNetwork::connectToServer (const TQString& host, TQ_UINT16 port)
+{
+ if (host.isEmpty()) {
+   kdError(11001) << k_funcinfo << "No hostname given" << endl;
+   return false;
+ }
+
+ // Make sure this is 0
+ d->mDisconnectId = 0;
+
+// if (!d->mMessageServer) {
+//   // FIXME: What shall we do here? Probably must stop a running game.
+//   kdWarning (11001) << k_funcinfo << "We are already connected to another server!" << endl;
+/// }
+
+ if (d->mMessageServer) {
+   // FIXME: What shall we do here? Probably must stop a running game.
+   kdWarning(11001) << "we are server but we are trying to connect to another server! "
+                    << "make sure that all clients connect to that server! "
+                    << "quitting the local server now..." << endl;
+   stopServerConnection();
+   d->mMessageClient->setServer((KMessageIO*)0);
+   delete d->mMessageServer;
+   d->mMessageServer = 0;
+ }
+
+ kdDebug(11001) << "    about to set server" << endl;
+ d->mMessageClient->setServer(host, port);
+ emit signalAdminStatusChanged(false); // as we delete the connection above isAdmin() is always false now!
+
+ // OK: We say that we already have connected, but this isn't so yet!
+ // If the connection cannot be established, it will look as being disconnected
+ // again ("slotConnectionLost" is called).
+ // Shall we differ between these?
+ kdDebug(11001) << "connected to " << host << ":" << port << endl;
+ return true;
+}
+
+TQ_UINT16 KGameNetwork::port() const
+{
+ if (isNetwork()) {
+   if (isOfferingConnections()) {
+     return d->mMessageServer->serverPort();
+   } else {
+     return d->mMessageClient->peerPort();
+   }
+ }
+ return 0;
+}
+
+TQString KGameNetwork::hostName() const
+{
+ return d->mMessageClient->peerName();
+}
+
+bool KGameNetwork::stopServerConnection()
+{
+ // We still are the Master, we just don't accept further connections!
+ tryStopPublishing();
+ if (d->mMessageServer) {
+   d->mMessageServer->stopNetwork();
+   return true;
+ }
+ return false;
+}
+
+bool KGameNetwork::isOfferingConnections() const
+{ return (d->mMessageServer && d->mMessageServer->isOfferingConnections()); }
+
+void KGameNetwork::disconnect()
+{
+ // TODO MH
+ kdDebug(11001) << k_funcinfo << endl;
+ stopServerConnection();
+ if (d->mMessageServer) {
+    TQValueList <TQ_UINT32> list=d->mMessageServer->clientIDs();
+    TQValueList<TQ_UINT32>::Iterator it;
+    for( it = list.begin(); it != list.end(); ++it )
+    {
+      kdDebug(11001) << "Client id=" << (*it) <<  endl;
+      KMessageIO *client=d->mMessageServer->findClient(*it);
+      if (!client)
+      {
+        continue;
+      }
+      kdDebug(11001) << "   rtti=" << client->rtti() <<  endl;
+      if (client->rtti()==2)
+      {
+        kdDebug(11001) << "DIRECT IO " << endl;
+      }
+      else
+      {
+        d->mMessageServer->removeClient(client,false);
+      }
+    }
+ }
+ else
+ {
+   kdDebug(11001) << k_funcinfo << "before client->disconnect() id="<<gameId()<< endl;
+   //d->mMessageClient->setServer((KMessageIO*)0);
+   kdDebug(11001) << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
+   d->mMessageClient->disconnect();
+
+   kdDebug(11001) << "++++++--------------------------------------------+++++"<<endl;
+ }
+ //setMaster();
+ /*
+ if (d->mMessageServer) {
+  //delete d->mMessageServer;
+  //d->mMessageServer=0;
+  server=true;
+  kdDebug(11001) << "  server true" << endl;
+  d->mMessageServer->deleteClients();
+  kdDebug(11001) << "  server deleteClients" << endl;
+ }
+ */
+ kdDebug(11001) << k_funcinfo << "DONE" << endl;
+}
+
+void KGameNetwork::aboutToLoseConnection(TQ_UINT32 clientID)
+{
+  kdDebug(11001) << "Storing client id of connection "<<clientID<<endl;
+  d->mDisconnectId = clientID;
+}
+
+void KGameNetwork::slotResetConnection()
+{
+  kdDebug(11001) << "Resseting client disconnect id"<<endl;
+  d->mDisconnectId = 0;
+}
+
+void KGameNetwork::electAdmin(TQ_UINT32 clientID)
+{
+ if (!isAdmin()) {
+	kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
+	return;
+ }
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_ADMIN_CHANGE );
+ stream << clientID;
+ d->mMessageClient->sendServerMessage(buffer);
+}
+
+void KGameNetwork::setMaxClients(int max)
+{
+ if (!isAdmin()) {
+	kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
+	return;
+ }
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_MAX_NUM_CLIENTS );
+ stream << (TQ_INT32)max;
+ d->mMessageClient->sendServerMessage(buffer);
+}
+
+void KGameNetwork::lock()
+{
+ if (messageClient()) {
+   messageClient()->lock();
+ }
+}
+
+void KGameNetwork::unlock()
+{
+ if (messageClient()) {
+   messageClient()->unlock();
+ }
+}
+
+// --------------------- send messages ---------------------------
+
+bool KGameNetwork::sendSystemMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ stream << data;
+ return sendSystemMessage(buffer,msgid,receiver,sender);
+}
+
+bool KGameNetwork::sendSystemMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+ TQByteArray buffer;
+ TQDataStream stream(buffer, IO_WriteOnly);
+ stream << msg;
+ return sendSystemMessage(buffer, msgid, receiver, sender);
+}
+
+bool KGameNetwork::sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{ return sendSystemMessage(((TQBuffer*)msg.device())->buffer(), msgid, receiver, sender); }
+
+bool KGameNetwork::sendSystemMessage(const TQByteArray& data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ if (!sender) {
+   sender = gameId();
+ }
+
+ TQ_UINT32 receiverClient = KGameMessage::rawGameId(receiver); // KGame::gameId()
+ int receiverPlayer = KGameMessage::rawPlayerId(receiver); // KPlayer::id()
+
+ KGameMessage::createHeader(stream, sender, receiver, msgid);
+ stream.writeRawBytes(data.data(), data.size());
+
+ /*
+ kdDebug(11001) << "transmitGameClientMessage msgid=" << msgid << " recv="
+                << receiver << " sender=" << sender << " Buffersize="
+                << buffer.size() << endl;
+  */
+
+ if (!d->mMessageClient) {
+   // No client created, this should never happen!
+   // Having a local game means we have our own
+   // KMessageServer and we are the only client.
+   kdWarning (11001) << k_funcinfo << "We don't have a client! Should never happen!" << endl;
+   return false;
+ }
+
+ if (receiverClient == 0 || receiverPlayer != 0)
+ {
+   // if receiverClient == 0 this is a broadcast message. if it is != 0 but
+   // receiverPlayer is also != 0 we have to send broadcast anyway, because the
+   // KPlayer object on all clients needs to receive the message.
+   d->mMessageClient->sendBroadcast(buffer);
+ }
+ else
+ {
+   d->mMessageClient->sendForward(buffer, receiverClient);
+ }
+ return true;
+}
+
+bool KGameNetwork::sendMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{ return sendSystemMessage(data,msgid+KGameMessage::IdUser,receiver,sender); }
+
+bool KGameNetwork::sendMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{ return sendSystemMessage(msg,msgid+KGameMessage::IdUser,receiver,sender); }
+
+bool KGameNetwork::sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
+
+bool KGameNetwork::sendMessage(const TQByteArray &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
+{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
+
+void KGameNetwork::sendError(int error,const TQByteArray& message, TQ_UINT32 receiver, TQ_UINT32 sender)
+{
+ TQByteArray buffer;
+ TQDataStream stream(buffer,IO_WriteOnly);
+ stream << (TQ_INT32) error;
+ stream.writeRawBytes(message.data(), message.size());
+ sendSystemMessage(stream,KGameMessage::IdError,receiver,sender);
+}
+
+
+// ----------------- receive messages from the network
+void KGameNetwork::receiveNetworkTransmission(const TQByteArray& receiveBuffer, TQ_UINT32 clientID)
+{
+ TQDataStream stream(receiveBuffer, IO_ReadOnly);
+ int msgid;
+ TQ_UINT32 sender; // the id of the KGame/KPlayer who sent the message
+ TQ_UINT32 receiver; // the id of the KGame/KPlayer the message is for 
+ KGameMessage::extractHeader(stream, sender, receiver, msgid);
+// kdDebug(11001) << k_funcinfo << "id=" << msgid << " sender=" << sender << " recv=" << receiver << endl;
+
+ // No broadcast : receiver==0
+ // No player isPlayer(receiver)
+ // Different game gameId()!=receiver
+ if (receiver &&  receiver!=gameId() && !KGameMessage::isPlayer(receiver) )
+ {
+   // receiver=0 is broadcast or player message
+   kdDebug(11001) << k_funcinfo << "Message not meant for us "
+            << gameId() << "!=" << receiver << " rawid="
+            << KGameMessage::rawGameId(receiver) << endl;
+   return;
+ }
+ else if (msgid==KGameMessage::IdError)
+ {
+   TQString text;
+   TQ_INT32 error;
+   stream >> error;
+   kdDebug(11001) << k_funcinfo << "Got IdError " << error << endl;
+   text = KGameError::errorText(error, stream);
+   kdDebug(11001) << "Error text: " << text.latin1() << endl;
+   emit signalNetworkErrorMessage((int)error,text);
+ }
+ else
+ {
+   networkTransmission(stream, msgid, receiver, sender, clientID);
+ }
+}
+
+// -------------- slots for the signals of the client
+void KGameNetwork::slotAdminStatusChanged(bool isAdmin)
+{
+ emit signalAdminStatusChanged(isAdmin);
+
+// TODO: I'm pretty sure there are a lot of things that should be done here...
+}
+
+void KGameNetwork::Debug()
+{
+ kdDebug(11001) << "------------------- KNETWORKGAME -------------------------" << endl;
+ kdDebug(11001) << "gameId         " << gameId() << endl;
+ kdDebug(11001) << "gameMaster     " << isMaster() << endl;
+ kdDebug(11001) << "gameAdmin      " << isAdmin() << endl;
+ kdDebug(11001) << "---------------------------------------------------" << endl;
+}
+
+/*
+ * vim: et sw=2
+ */
diff --git a/libtdegames/kgame/kgamenetwork.h b/libtdegames/kgame/kgamenetwork.h
new file mode 100644
index 00000000..b5975ffc
--- /dev/null
+++ b/libtdegames/kgame/kgamenetwork.h
@@ -0,0 +1,432 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMENETWORK_H_
+#define __KGAMENETWORK_H_
+
+#include <tqstring.h>
+#include <tqobject.h>
+#include <kdemacros.h>
+class KGameIO;
+class KMessageClient;
+class KMessageServer;
+
+class KGameNetworkPrivate;
+
+/**
+ * The KGameNetwork class is the KGame class with network
+ * support. All other features are the same but they are
+ * now network transparent. It is not used directly but
+ * only via a KGame object. So you do not really have
+ * to bother with this object.
+ *
+ * @short The main KDE game object
+ * @author Martin Heni <martin@heni-online.de>
+ * @version $Id$
+ */
+class KDE_EXPORT KGameNetwork : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+    /**
+     * Create a KGameNetwork object
+     */
+    KGameNetwork(int cookie=42,TQObject* parent=0);
+    virtual ~KGameNetwork();
+
+    /**
+     * Gives debug output of the game status
+     **/
+    virtual void Debug();
+
+    /**
+     * @return TRUE if this is a network game - i.e. you are either MASTER or
+     * connected to a remote MASTER.
+     **/
+    bool isNetwork() const;
+
+    /**
+     * Is this the game MASTER (i.e. has started theKMessageServer). A
+     * game has always exactly one MASTER. This is either a KGame object (i.e. a
+     * Client) or an own MessageServer-process. A KGame object that has the
+     * MASTER status is always admin.
+     *
+     * You probably don't want to use this. It is a mostly internal method which
+     * will probably become protected. Better use isAdmin
+     *
+     * @see isAdmin
+     * @return Whether this client has started the KMessageServer
+     **/
+    bool isMaster() const;
+
+    /**
+     * The admin of a game is the one who initializes newly connected clients
+     * using  negotiateNetworkGame and is allowed to configure the game.
+     * E.g. only the admin is allowed to use KGame::setMaxPlayers.
+     *
+     * If one KGame object in the game is MASTER then this client is the admin
+     * as well. isMaster and isAdmin differ only if the KMessageServer
+     * is running in an own process.
+     * @return Whether this client (KGame object) is the admin
+     **/
+    bool isAdmin() const;
+
+    /**
+     * The unique ID of this game
+     *
+     * @return int id
+     **/
+    TQ_UINT32 gameId() const;
+
+    /**
+     * Inits a network game as network MASTER. Note that if the
+     * KMessageServer is not yet started it will be started here (see 
+     * setMaster). Any existing connection will be disconnected.
+     *
+     * If you already offer connections the port is changed.
+     *
+     * @param port The port on which the service is offered
+     * @return true if it worked
+     **/
+    bool offerConnections (TQ_UINT16 port);
+    
+    /**
+     * Announces game MASTER on network using DNS-SD. Clients then can discover it using
+     * DNSSD::ServiceBrowser (or KGameConnectWidget) instead of manually entering 
+     * IP address.
+     * @param type service type (something like _kwin4._tcp). 
+     * It should be unique for application.
+     * @param name game name that will be displayed by clients.  If not
+     * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
+     * @since 3.4
+     **/
+    void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
+    
+    /**
+     * Inits a network game as a network CLIENT
+     *
+     * @param host the host to which we want to connect
+     * @param port the port we want to connect to
+     *
+     * @return true if connected
+     **/
+    bool connectToServer(const TQString& host, TQ_UINT16 port);
+
+    /**
+     * @since 3.2
+     * @return The port we are listening to if offerConnections was called
+     * or the port we are connected to if connectToServer was called.
+     * Otherwise 0.
+     **/
+    TQ_UINT16 port() const;
+
+    /**
+     * @since 3.2
+     * @return The name of the host that we are currently connected to is
+     * isNetwork is TRUE and we are not the MASTER, i.e. if connectToServer
+     * was called. Otherwise this will return "localhost".
+     **/
+    TQString hostName() const;
+
+    /**
+     * Stops offering server connections - only for game MASTER
+     * @return true
+     **/
+    bool stopServerConnection();
+
+    /**
+     * Changes the maximal connection number of the KMessageServer to max.
+     * -1 Means infinite connections are possible. Note that existing
+     * connections are not affected, so even if you set this to 0 in a running
+     * game no client is being disconnected. You can call this only if you are
+     * the ADMIN!
+     *
+     * @see KMessageServer::setMaxClients
+     * @param max The maximal number of connections possible.
+     **/
+    void setMaxClients(int max);
+
+    //AB: is this now internal only? Can we make it protected (maybe with
+    //friends)? sendSystemMessage AND sendMessage is very confusing to the
+    //user.
+    /**
+     * Sends a network message msg with a given msg id msgid to all clients.
+     * Use this to communicate with KGame (e.g. to add a player ot to configure
+     * the game - usually not necessary). 
+     *
+     * For your own messages use  sendMessage instead! This is mostly
+     * internal!
+     *
+     * @param buffer the message which will be send. See messages.txt for contents
+     * @param msgid an id for this message. See
+     * KGameMessage::GameMessageIds
+     * @param receiver the KGame / KPlayer this message is for.
+     * @param sender The KGame / KPlayer this message is from (i.e.
+     * you). You
+     * probably want to leave this 0, then KGameNetwork will create the correct
+     * value for you. You might want to use this if you send a message from a
+     * specific player.
+     * @return true if worked
+     */
+    // AB: TODO: doc on how "receiver" and "sender" should be created!
+    bool sendSystemMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * @overload
+     **/
+    bool sendSystemMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * @overload
+     **/
+    bool sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * @overload
+     **/
+    bool sendSystemMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * Sends a network message
+     * @param error The error code
+     * @param message The error message - use KGameError
+     * @param receiver the KGame / KPlayer this message is for. 0 For
+     * all
+     * @param sender The KGame / KPlayer this message is from (i.e.
+     * you). You probably want to leave this 0, then KGameNetwork will create 
+     * the correct value for you. You might want to use this if you send a 
+     * message from a specific player.
+     **/
+    void sendError(int error, const TQByteArray& message, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * Are we still offer offering server connections - only for game MASTER
+     * @return true/false
+     **/
+    bool isOfferingConnections() const;
+
+    /**
+     * Application cookie. this idendifies the game application. It
+     * help to distinguish between e.g. KPoker and KWin4
+     * @return the application cookie
+     **/
+    int cookie() const;
+
+    /**
+     * Send a network message msg with a given message ID msgid to all clients.
+     * You want to use this to send a message to the clients.
+     *
+     * Note that a message is always sent to ALL clients! This is necessary so
+     * that all clients always have the same data and can easily be changed from
+     * network to non-network without restarting the game. If you want a
+     * specific KGame / KPlayer to react to the message use the
+     * receiver and sender parameters. See KGameMessage::calsMessageId
+     *
+     * SendMessage differs from sendSystemMessage only by the msgid parameter.
+     * sendSystemMessage is thought as a KGame only mehtod while
+     * sendMessage is for public use. The msgid parameter will be
+     * +=KGameMessage::IdUser and in KGame::signalNetworkData msgid will
+     * be -= KGameMessage::IdUser again, so that one can easily distinguish
+     * between system and user messages.
+     *
+     * Use sendSystemMessage to comunicate with KGame (e.g. by adding a
+     * player) and sendMessage for your own user message.
+     *
+     * Note: a player should send messages through a KGameIO!
+     *
+     * @param buffer the message which will be send. See messages.txt for contents
+     * @param msgid an id for this message. See KGameMessage::GameMessageIds
+     * @param receiver the KGame / KPlayer this message is for.
+     * @param sender The KGame / KPlayer this message is from (i.e.
+     * you). You
+     * probably want to leave this 0, then KGameNetwork will create the correct
+     * value for you. You might want to use this if you send a message from a
+     * specific player.
+     * @return true if worked
+     **/
+    // AB: TODO: doc on how "receiver" and "sender" should be created!
+    bool sendMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * This is an overloaded member function, provided for convenience.
+     **/
+    bool sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * This is an overloaded member function, provided for convenience.
+     **/
+    bool sendMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+    /**
+     * This is an overloaded member function, provided for convenience.
+     **/
+    bool sendMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
+
+
+    /**
+     * Called by ReceiveNetworkTransmission(). Will be overwritten by
+     * KGame and handle the incoming message.
+     **/
+    virtual void networkTransmission(TQDataStream&, int, TQ_UINT32, TQ_UINT32, TQ_UINT32 clientID) = 0;
+
+
+    /**
+     * Disconnect the current connection and establish a new local one.
+     **/
+    void disconnect();
+
+
+    /**
+     * If you are the ADMIN of the game you can give the ADMIN status away to
+     * another client. Use this e.g. if you want to quit the game or if you want
+     * another client to administrate the game (note that disconnect calls
+     * this automatically).
+     * @param clientID the ID of the new ADMIN (note: this is the _client_ID
+     * which has nothing to do with the player IDs. See KMessageServer)
+     **/
+    void electAdmin(TQ_UINT32 clientID);
+
+    /**
+     * Don't use this unless you really know what youre doing! You might
+     * experience some strange behaviour if you send your messages directly
+     * through the KMessageClient!
+     *
+     * @return a pointer to the KMessageClient used internally to send the
+     * messages. You should rather use one of the send functions!
+     **/
+    KMessageClient* messageClient() const;
+
+    /**
+     * Don't use this unless you really know what you are doing! You might
+     * experience some strange behaviour if you use the message server directly!
+     *
+     * @return a pointer to the message server if this is the MASTER KGame
+     * object. Note that it might be possible that no KGame object contains
+     * the KMessageServer at all! It might even run stand alone!
+     **/
+    KMessageServer* messageServer() const;
+
+    /**
+     * You should call this before doing thigs like, e.g. tqApp->processEvents().
+     * Don't forget to call unlock once you are done!
+     * 
+     * @see KMessageClient::lock
+     **/
+    virtual void lock();
+
+    /**
+     * @see KMessageClient::unlock
+     **/
+    virtual void unlock();
+
+signals:
+    /**
+     * A network error occurred
+     * @param error the error code
+     * @param text the error text
+     */
+    void signalNetworkErrorMessage(int error, TQString text);
+
+    /**
+     * Our connection to the KMessageServer has broken.
+     * See KMessageClient::connectionBroken
+     **/
+    void signalConnectionBroken();
+
+    /**
+     * This signal is emitted whenever the KMessageServer sends us a message that a
+     * new client connected. KGame uses this to call KGame::negotiateNetworkGame
+     * for the newly connected client if we are admin (see isAdmin)
+     *
+     * @see KMessageClient::eventClientConnected
+     *
+     * @param clientID the ID of the newly connected client
+     **/
+    void signalClientConnected(TQ_UINT32 clientID);
+
+    /**
+     * This signal is emitted whenever the KMessageServer sends us a message
+     * that a connection to a client was detached. The second parameter can be used
+     * to distinguish between network errors or removing on purpose.
+     *
+     * @see KMessageClient::eventClientDisconnected
+     *
+     * @param clientID the client that has disconnected
+     * @param broken true if the connection was lost because of a network error, false
+     *        if the connection was closed by the message server admin.
+     */
+    void signalClientDisconnected(TQ_UINT32 clientID, bool broken);
+
+    /**
+     * This client gets or loses the admin status.
+     * @see KMessageClient::adminStatusChanged
+     * @param isAdmin True if this client gets the ADMIN status otherwise FALSE
+     **/
+    void signalAdminStatusChanged(bool isAdmin);
+
+protected:
+    /**
+     * @internal
+     * Start a KMessageServer object and use it as the MASTER of the game.
+     * Note that you must not call this if there is already another master
+     * running!
+     **/
+    void setMaster();
+
+protected slots:
+    /**
+     * Called by KMessageClient::broadcastReceived() and will check if the
+     * message format is valid. If it is not, it will generate an error (see
+     * signalNetworkVersionError and signalNetworkErorrMessage).
+     * If it is valid, the pure virtual method networkTransmission() is called.
+     * (This one is overwritten in KGame.)
+     **/
+    void receiveNetworkTransmission(const TQByteArray& a, TQ_UINT32 clientID);
+
+    /**
+     * This KGame object receives or loses the admin status.
+     * @param isAdmin Whether we are admin or not
+     **/
+    void slotAdminStatusChanged(bool isAdmin);
+
+    /**
+     * Called when the network connection is about to terminate. Is used
+     * to store the network parameter like the game id
+     */
+     void aboutToLoseConnection(TQ_UINT32 id);
+
+    /**
+     * Called when the network connection is terminated. Used to clean
+     * up the disconnect parameter
+     */
+     void slotResetConnection();
+
+
+private:
+     void tryPublish();
+     void tryStopPublishing();
+     KGameNetworkPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/kgameprocess.cpp b/libtdegames/kgame/kgameprocess.cpp
new file mode 100644
index 00000000..9dcc66c0
--- /dev/null
+++ b/libtdegames/kgame/kgameprocess.cpp
@@ -0,0 +1,158 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgameprocess.h"
+#include "kplayer.h"
+#include "kgame.h"
+#include "kgamemessage.h"
+#include "kmessageio.h"
+
+#include <krandomsequence.h>
+
+#include <tqbuffer.h>
+#include <tqdatastream.h>
+#include <tqcstring.h>
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#define READ_BUFFER_SIZE  1024
+
+// ----------------------- Process Child ---------------------------
+
+KGameProcess::KGameProcess() : TQObject(0,0)
+{
+  mTerminate=false;
+  // Check whether a player is set. If not create one!
+  rFile.open(IO_ReadOnly|IO_Raw,stdin);
+  wFile.open(IO_WriteOnly|IO_Raw,stdout);
+  mMessageIO=new KMessageFilePipe(this,&rFile,&wFile);
+//  mMessageClient=new KMessageClient(this);
+//  mMessageClient->setServer(mMessageIO);
+//  connect (mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
+//          this, TQT_SLOT(receivedMessage(const TQByteArray&, TQ_UINT32)));
+  connect (mMessageIO, TQT_SIGNAL(received(const TQByteArray&)),
+          this, TQT_SLOT(receivedMessage(const TQByteArray&)));
+  fprintf(stderr,"KGameProcess::constructor %p %p\n",&rFile,&wFile);
+ 
+  mRandom = new KRandomSequence;
+  mRandom->setSeed(0);
+}
+KGameProcess::~KGameProcess() 
+{
+  delete mRandom;
+  //delete mMessageClient;
+  //delete mMessageServer;
+  delete mMessageIO;
+  rFile.close();
+  wFile.close();
+  fprintf(stderr,"KGameProcess::destructor\n");
+}
+
+
+bool KGameProcess::exec(int argc, char *argv[])
+{
+  // Get id and cookie, ... from command line
+  processArgs(argc,argv);
+  do
+  {
+    mMessageIO->exec();
+  }  while(!mTerminate);
+  return true;
+}
+
+//    You have to do this to create a message 
+//    TQByteArray buffer;
+//    TQDataStream wstream(buffer,IO_WriteOnly);
+//    then stream data into the stream and call this function
+void KGameProcess::sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
+{
+  fprintf(stderr,"KGameProcess::sendMessage id=%d recv=%d",msgid,receiver);
+  TQByteArray a;
+  TQDataStream outstream(a,IO_WriteOnly);
+
+  TQBuffer *device=(TQBuffer *)stream.device();
+  TQByteArray data=device->buffer();;
+
+  KGameMessage::createHeader(outstream,0,receiver,msgid);
+  outstream.writeRawBytes(data.data(),data.size());
+
+  //if (mMessageClient) mMessageClient->sendBroadcast(a);
+  // TODO: The fixed received 2 will cause problems. But how to address the
+  // proper one?
+//  if (mMessageClient) mMessageClient->sendForward(a,2);
+  if (mMessageIO) mMessageIO->send(a);
+}
+
+void KGameProcess::sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
+{
+  sendSystemMessage(stream,msgid+KGameMessage::IdUser,receiver);
+}
+
+void KGameProcess::processArgs(int argc, char *argv[])
+{
+  int v=0;
+  if (argc>2)
+  {
+    v=atoi(argv[2]);
+    //kdDebug(11001) << "cookie (unused) " << v << endl;
+  }
+  if (argc>1)
+  {
+    v=atoi(argv[1]);
+    //kdDebug(11001) << "id (unused) " << v << endl;
+  }
+  fprintf(stderr,"processArgs \n");
+  fflush(stderr);
+}
+
+void KGameProcess::receivedMessage(const TQByteArray& receiveBuffer)
+{
+ TQDataStream stream(receiveBuffer, IO_ReadOnly);
+ int msgid;
+ TQ_UINT32 sender; 
+ TQ_UINT32 receiver; 
+ KGameMessage::extractHeader(stream, sender, receiver, msgid);
+ fprintf(stderr,"------ receiveNetworkTransmission(): id=%d sender=%d,recv=%d\n",msgid,sender,receiver);
+ switch(msgid)
+ {
+   case KGameMessage::IdTurn:
+     TQ_INT8 b;
+     stream >> b;
+     emit signalTurn(stream,(bool)b);
+   break;
+   case KGameMessage::IdIOAdded:
+     TQ_INT16 id;
+     stream >> id;
+     emit signalInit(stream,(int)id);
+   break;
+   default:
+      emit signalCommand(stream,msgid-KGameMessage::IdUser,receiver,sender);
+   break;
+ }
+}
+
+#include "kgameprocess.moc"
diff --git a/libtdegames/kgame/kgameprocess.h b/libtdegames/kgame/kgameprocess.h
new file mode 100644
index 00000000..b7e2d145
--- /dev/null
+++ b/libtdegames/kgame/kgameprocess.h
@@ -0,0 +1,243 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEPROCESS_H_
+#define __KGAMEPROCESS_H_
+
+#include <tqstring.h>
+#include <tqobject.h>
+#include <tqfile.h>
+
+#include "kgameproperty.h"
+#include <krandomsequence.h>
+#include <kdemacros.h>
+class KPlayer;
+class KMessageFilePipe;
+
+/**
+ * This is the process class used on the computer player
+ * side to communicate with its counterpart KProcessIO class.
+ * Using these two classes will give fully transparent communication
+ * via TQDataStreams.
+ */
+class KDE_EXPORT KGameProcess:  public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+  public:
+    /**
+     * Creates a KGameProcess class. Done only in the computer
+     * player. To activate the communication you have to call
+     * the exec function of this class which will listen
+     * to the communication and emit signals to notify you of
+     * any incoming messages.
+     * Note: This function will only return after you set
+     * setTerminate(true) in one of the received signals.
+     * So you can not do any computer calculation after the exec function.
+     * Instead you react on the signals which are emitted after a
+     * message is received and perform the calculations there!
+     * Example:
+     * \code
+     *  int main(int argc ,char * argv[])
+     *  {
+     *    KGameProcess proc;
+     *    connect(&proc,TQT_SIGNAL(signalCommand(TQDataStream &,int ,int ,int )),
+     *                    this,TQT_SLOT(slotCommand(TQDataStream & ,int ,int ,int )));
+     *    connect(&proc,TQT_SIGNAL(signalInit(TQDataStream &,int)),
+     *                    this,TQT_SLOT(slotInit(TQDataStream & ,int )));
+     *    connect(&proc,TQT_SIGNAL(signalTurn(TQDataStream &,bool )),
+     *                    this,TQT_SLOT(slotTurn(TQDataStream & ,bool )));
+     *    return proc.exec(argc,argv);
+     *  }
+     *  \endcode
+     */
+    KGameProcess();
+    /**
+     * Destruct the process
+     */
+    ~KGameProcess();
+
+    /**
+     * Enters the event loop of the computer process. Does only
+     * return on setTerminate(true)!
+     */
+    bool exec(int argc, char *argv[]);
+
+    /**
+     * Should the computer process leave its exec function?
+     * Activated if you setTerminate(true);
+     *
+     * @return true/false
+     */
+    bool terminate() const {return mTerminate;}
+
+    /**
+     * Set this to true if the computer process should end, ie
+     * leave its exec function.
+     *
+     * @param b true for exit the exec function
+     */
+    void setTerminate(bool b) {mTerminate=b;}
+
+    /**
+     * Sends a message to the corresponding KGameIO
+     * device. Works like the sendSystemMessage but
+     * for user id's
+     *
+     * @param stream the TQDataStream containing the message
+     * @param msgid the message id for the message
+     * @param receiver unused
+     */
+    void sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
+
+    /**
+     * Sends a system message to the corresonding KGameIO device.
+     * This will normally be either a performed move or a query
+     * (IdProcessQuery). The query option is a way to communicate
+     * with the KGameIO at the other side and e.g. retrieve some
+     * game relevant data from here.
+     * Exmaple for a query:
+     * \code
+     *  TQByteArray buffer;
+     *  TQDataStream out(buffer,IO_WriteOnly);
+     *  int msgid=KGameMessage::IdProcessQuery;
+     *  out << (int)1;
+     *  proc.sendSystemMessage(out,msgid,0);
+     * \endcode
+     *
+     * @param stream the TQDataStream containing the message
+     * @param msgid the message id for the message
+     * @param receiver unused
+     */
+    void sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
+
+    /**
+     * Returns a pointer to a KRandomSequence. You can generate
+     * random numbers via e.g.
+     * \code
+     *   random()->getLong(100);
+     * \endcode
+     * 
+     * @return KRandomSequence pointer
+     */
+    KRandomSequence *random() {return mRandom;}
+
+  protected:
+    /**
+     * processes the command line argumens to set up the computer player
+     * Pass the argumens exactely as given by main()
+     */
+    void processArgs(int argc, char *argv[]);
+
+  protected slots:
+    /**
+     * A message is received via the interprocess connection. The
+     * appropriate signals are called.
+     */
+      void receivedMessage(const TQByteArray& receiveBuffer);
+
+  signals:
+    /**
+     * The generic communication signal. You have to connect to this
+     * signal to generate a valid computer response onto arbitrary messages.
+     * All signals but IdIOAdded and IdTurn end up here!
+     * Example:
+     * \code
+     * void Computer::slotCommand(int &msgid,TQDataStream &in,TQDataStream &out)
+     * {
+     *   TQ_INT32 data,move;
+     *   in >> data;
+     *   // compute move ...
+     *   move=data*2;
+     *   out << move;
+     * }
+     * \endcode
+     *
+     * @param inputStream the incoming data stream
+     * @param msgid the message id of the message which got transmitted to the computer
+     * @param receiver the id of the receiver
+     * @param sender the id of the sender
+     */
+     void signalCommand(TQDataStream &inputStream,int msgid,int receiver,int sender);
+
+     /**
+      * This signal is emmited if the computer player should perform a turn.
+      * Calculations can be made here and the move can then be send back with
+      * sendSystemMessage with the message id KGameMessage::IdPlayerInput.
+      * These must provide a move which complies to your other move syntax as
+      * e.g. produces by keyboard or mouse input.
+      * Additonal data which have been written into the stream from the
+      * ProcessIO's signal signalPrepareTurn can be retrieved from the
+      * stream here.
+      * Example:
+      * \code
+      * void slotTurn(TQDataStream &in,bool turn)
+      * {
+      *   int id;
+      *   int recv;
+      *   TQByteArray buffer;
+      *   TQDataStream out(buffer,IO_WriteOnly);
+      *   if (turn)
+      *   {
+      *     // Create a move - the format is yours to decide
+      *     // It arrives exactly as this in the kgame inputMove function!!
+      *     TQ_INT8 x1,y1,pl;
+      *     pl=-1;
+      *     x1=proc.random()->getLong(8);
+      *     y1=proc.random()->getLong(8);
+      *     // Stream it
+      *     out << pl << x1 << y1;
+      *     id=KGameMessage::IdPlayerInput;
+      *     proc.sendSystemMessage(out,id,0);
+      *   }
+      * }
+      * \endcode
+      *
+      * @param stream The datastream which contains user data
+      * @param turn True or false whether the turn is activated or deactivated
+      *
+      */
+     void signalTurn(TQDataStream &stream,bool turn);
+
+     /**
+      * This signal is emmited when the process is initialized, i.e. added
+      * to a KPlayer. Initial initialisation can be performed here be reacting
+      * to the KProcessIO signal signalIOAdded and retrieving the data here
+      * from the stream. 
+      * It works just as the signalTurn() but is only send when the player is
+      * added to the game, i.e. it needs some initialization data
+      *
+      * @param stream The datastream which contains user data 
+      * @param userid The userId of the player. (Careful to rely on it yet)
+      */
+     void signalInit(TQDataStream &stream,int userid);
+
+  protected:
+    bool mTerminate;
+    KMessageFilePipe *mMessageIO;
+  private:
+    TQFile rFile;
+    TQFile wFile;
+    KRandomSequence* mRandom;
+};
+#endif
diff --git a/libtdegames/kgame/kgameproperty.cpp b/libtdegames/kgame/kgameproperty.cpp
new file mode 100644
index 00000000..49a8984f
--- /dev/null
+++ b/libtdegames/kgame/kgameproperty.cpp
@@ -0,0 +1,211 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgameproperty.h"
+#include "kgamepropertyhandler.h"
+#include "kgamemessage.h"
+#include "kplayer.h"
+#include "kgame.h"
+
+#define KPLAYERHANDLER_LOAD_COOKIE 6239
+
+KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
+{
+ init();
+ registerData(id, parent);
+}
+
+KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
+{
+ init();
+ registerData(id, parent);
+}
+
+KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
+{
+ init();
+ registerData(id, owner);
+}
+
+KGamePropertyBase::KGamePropertyBase()
+{
+ init();
+}
+
+KGamePropertyBase::~KGamePropertyBase()
+{
+ unregisterData();
+}
+
+void KGamePropertyBase::init()
+{
+ mOwner = 0;
+ setDirty(false);
+
+ // this is very useful and used by e.g. KGameDialog so
+ // it is activated by default. Big games may profit by deactivating it to get
+ // a better performance. 
+ setEmittingSignal(true);
+
+ setOptimized(false); 
+ 
+ //setReadOnly(false);
+ mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
+
+ // local is default
+ setPolicy(PolicyLocal);
+}
+
+int KGamePropertyBase::registerData(int id, KGame* owner, TQString name)
+{ return registerData(id, owner->dataHandler(), name);  }
+
+int KGamePropertyBase::registerData(int id, KPlayer* owner, TQString name)
+{ return registerData(id, owner->dataHandler(), name);  }
+
+int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
+{ return registerData(-1, owner,p, name);  }
+
+int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, TQString name)
+{ return registerData(id, owner,PolicyUndefined, name);  }
+
+int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
+{
+// we don't support changing the id
+ if (!owner) {
+	kdWarning(11001) << k_funcinfo << "Resetting owner=0. Sure you want to do this?" << endl;
+	mOwner=0;
+	return -1;
+ }
+ if (!mOwner) {
+	if (id==-1) {
+		id=owner->uniquePropertyId();
+	}
+	mId = id;
+	mOwner = owner;
+	mOwner->addProperty(this, name);
+	if (p!=PolicyUndefined) {
+		setPolicy(p);
+	} else {
+		setPolicy(mOwner->policy());
+	}
+ }
+ return mId;
+}
+
+void KGamePropertyBase::unregisterData()
+{
+ if (!mOwner) {
+	return;
+ }
+ mOwner->removeProperty(this);
+ mOwner = 0;
+}
+
+bool KGamePropertyBase::sendProperty()
+{
+ TQByteArray b;
+ TQDataStream s(b, IO_WriteOnly);
+ KGameMessage::createPropertyHeader(s, id());
+ save(s);
+ if (mOwner) {
+	return mOwner->sendProperty(s);
+ } else {
+	kdError(11001) << k_funcinfo << "Cannot send because there is no receiver defined" << endl;
+	return false;
+ }
+}
+
+bool KGamePropertyBase::sendProperty(const TQByteArray& data)
+{
+ TQByteArray b;
+ TQDataStream s(b, IO_WriteOnly);
+ KGameMessage::createPropertyHeader(s, id());
+ s.writeRawBytes(data.data(), data.size());
+ if (mOwner) {
+	return mOwner->sendProperty(s);
+ } else {
+	kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
+	return false;
+ }
+}
+
+bool KGamePropertyBase::lock()
+{
+ if (isLocked()) {
+	return false;
+ }
+ setLock(true);
+ return true;
+}
+
+bool KGamePropertyBase::unlock(bool force)
+{
+ if (isLocked() && !force) {
+	return false;
+ }
+ setLock(false);
+ return true;
+}
+
+void KGamePropertyBase::setLock(bool l)
+{
+ TQByteArray b;
+ TQDataStream s(b, IO_WriteOnly);
+ KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
+ 
+ s << (TQ_INT8)l;
+ if (mOwner) {
+	mOwner->sendProperty(s);
+ } else {
+	kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
+	return ;
+ }
+}
+
+void KGamePropertyBase::emitSignal()
+{
+ //kdDebug(11001) << k_funcinfo << ": mOwnerP="<< mOwner << " id=" << id()   << endl;
+ if (mOwner ) {
+	mOwner->emitSignal(this);
+ } else {
+	kdError(11001) << k_funcinfo << ":id="<<id()<<" Cannot emitSignal because there is no handler set" << endl;
+ }
+}
+
+void KGamePropertyBase::command(TQDataStream& s, int cmd, bool isSender)
+{
+ switch (cmd) {
+	case CmdLock:
+	{
+		if (!isSender) {
+			TQ_INT8 locked;
+			s >> locked;
+			mFlags.bits.locked = (bool)locked ;
+			break;
+		}
+	}
+	default: // probably in derived classes
+		break;
+ }
+}
+
diff --git a/libtdegames/kgame/kgameproperty.h b/libtdegames/kgame/kgameproperty.h
new file mode 100644
index 00000000..f02c4db0
--- /dev/null
+++ b/libtdegames/kgame/kgameproperty.h
@@ -0,0 +1,848 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEPROPERTY_H_
+#define __KGAMEPROPERTY_H_
+
+#include <tqdatastream.h>
+
+#include <kdebug.h>
+#include <typeinfo>
+#include <kdemacros.h>
+class KGame;
+class KPlayer;
+class KGamePropertyHandler;
+using namespace std;
+
+/**
+ * @short Base class of KGameProperty
+ *
+ * The KGamePropertyBase class is the base class of KGameProperty. See
+ * KGameProperty for further information.
+ * 
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KDE_EXPORT KGamePropertyBase
+{
+public:
+	enum PropertyDataIds  { // these belong to KPlayer/KGame!
+		//KPlayer
+		IdGroup=1,
+		IdUserId=2,
+		IdAsyncInput=3,
+		IdTurn=4,
+		IdName=5,
+
+		//KGame
+		IdGametqStatus=6,
+		IdMaxPlayer=7,
+		IdMinPlayer=8,
+
+    // Input Grabbing
+    IdGrabInput=16,
+    IdReleaseInput=17,
+
+		IdCommand, // Reserved for internal use
+		IdUser=256,
+
+		IdAutomatic=0x7000  // Id's from here on are automatically given (16bit)
+	};
+
+	/**
+	 * Commands for advanced properties (TQ_INT8)
+	 **/
+	enum PropertyCommandIds 
+	{
+		// General
+		CmdLock=1,
+		
+		// Array
+		CmdAt=51,
+		CmdResize=52,
+		CmdFill=53,
+		CmdSort=54,
+		// List (could be the same id's actually)
+		CmdInsert=61,
+		CmdAppend=62,
+		CmdRemove=63,
+		CmdClear=64
+	};
+
+	/**
+	 * The policy of the property. This can be PolicyClean (setValue uses
+	 * send), PolicyDirty (setValue uses changeValue) or
+	 * PolicyLocal (setValue uses setLocal).
+	 *
+	 * A "clean" policy means that the property is always the same on every
+	 * client. This is achieved by calling send which actually changes
+	 * the value only when the message from the MessageServer is received.
+	 *
+	 * A "dirty" policy means that as soon as setValue is called the
+	 * property is changed immediately. And additionally sent over network.
+	 * This can sometimes lead to bugs as the other clients do not 
+	 * immediately have the same value. For more information see 
+	 * changeValue.
+	 *
+	 * PolicyLocal means that a KGameProperty behaves like ever
+	 * "normal" variable. Whenever setValue is called (e.g. using "=")
+	 * the value of the property is changes immediately without sending it
+	 * over network. You might want to use this if you are sure that all
+	 * clients set the property at the same time.
+	 **/
+	enum PropertyPolicy
+	{
+		PolicyUndefined = 0,
+		PolicyClean = 1,
+		PolicyDirty = 2,
+		PolicyLocal = 3
+	};
+
+
+	/**
+	 * Constructs a KGamePropertyBase object and calls registerData.
+	 * @param id The id of this property. MUST be UNITQUE! Used to send and
+	 * receive changes in the property of the playere automatically via
+	 * network. 
+	 * @param owner The owner of the object. Must be a KGamePropertyHandler which manages
+	 * the changes made to this object, i.e. which will send the new data
+	 **/
+	KGamePropertyBase(int id, KGamePropertyHandler* owner);
+
+	KGamePropertyBase(int id, KGame* parent);
+	KGamePropertyBase(int id, KPlayer* parent);
+
+	/**
+	 * Creates a KGamePropertyBase object without an owner. Remember to call
+	 * registerData!
+	 **/
+	KGamePropertyBase();
+
+	virtual ~KGamePropertyBase();
+
+	/**
+	 * Changes the consistency policy of a property. The  
+	 * PropertyPolicy is one of PolicyClean (defaulz), PolicyDirty or PolicyLocal.
+	 *
+	 * It is up to you to decide how you want to work. 
+	 **/
+	void setPolicy(PropertyPolicy p) { mFlags.bits.policy = p; } 
+
+	/**
+	 * @return The default policy of the property
+	 **/
+	PropertyPolicy policy() const { return (PropertyPolicy)mFlags.bits.policy; }
+
+	/**
+	 * Sets this property to emit a signal on value changed.
+	 * As the proerties do not inehrit TQObject for optimisation
+	 * this signal is emited via the KPlayer or KGame object
+	 **/
+	void setEmittingSignal(bool p)	{ mFlags.bits.emitsignal=p; }
+
+	/**
+	 * See also setEmittingSignal
+	 * @return Whether this property emits a signal on value change
+	 **/
+	bool isEmittingSignal()	const { return mFlags.bits.emitsignal; }
+
+	/**
+	 * Sets this property to try to optimize signal and network handling
+	 * by not sending it out when the property value is not changed.
+	 **/
+	void setOptimized(bool p) { mFlags.bits.optimize = p ; }
+
+	/**
+	 * See also setOptimize
+	 * @return Whether the property optimizes access (signals,network traffic)
+	 **/
+	bool isOptimized() const { return mFlags.bits.optimize; }
+
+	/**
+	 * @return Whether this property is "dirty". See also setDirty
+	 **/
+	bool isDirty() const { return mFlags.bits.dirty; }
+
+	/**
+	 * A locked property can only be changed by the player who has set the
+	 * lock. See also setLocked
+	 * @return Whether this property is currently locked. 
+	 **/
+	bool isLocked() const { return mFlags.bits.locked; }
+
+	/**
+	 * A locked property can only be changed by the player who has set the
+	 * lock.
+	 *
+	 * You can only call this if isLocked is false. A message is sent
+	 * over network so that the property is locked for all players except
+	 * you.
+	 *
+	 * @return returns false if the property can not be locked, i.e. it is already locked
+	 *
+	 **/
+	bool lock();
+
+	/**
+	 * A locked property can only be changed by the player who has set the
+	 * lock.
+	 *
+	 * You can only call this if isLocked is false. A message is sent
+	 * over network so that the property is locked for all players except
+	 * you.
+	 *
+	 * @return returns false if the property can not be locked, i.e. it is already locked
+	 *
+	 **/
+	bool unlock(bool force=false);
+
+	/**
+	 * This will read the value of this property from the stream. You MUST
+	 * overwrite this method in order to use this class
+	 * @param s The stream to read from
+	 **/
+	virtual void load(TQDataStream& s) = 0;
+
+	/**
+	 * Write the value into a stream. MUST be overwritten
+	 **/
+	virtual void save(TQDataStream& s) = 0;
+
+	/** 
+	 * send a command to advanced properties like arrays
+	 * @param stream The stream containing the data of the comand
+	 * @param msgid The ID of the command - see PropertyCommandIds
+	 * @param isSender whether this client is also the sender of the command
+	 **/
+	virtual void command(TQDataStream &stream, int msgid, bool isSender=false);
+
+	/**
+	 * @return The id of this property
+	 **/
+	int id() const { return mId; }
+
+	/**
+	 * @return a type_info of the data this property contains. This is used
+	 * e.g. by KGameDebugDialog
+	 **/
+	virtual const type_info* typeinfo() { return &typeid(this); }
+
+	/**
+	 * You have to register a KGamePropertyBase before you can use it.
+	 *
+	 * You MUST call this before you can use KGamePropertyBase!
+	 *
+	 * @param id the id of this KGamePropertyBase object. The id MUST be
+	 * unique, i.e. you cannot have two properties with the same id for one
+	 * player, although (currently) nothing prevents you from doing so. But
+	 * you will get strange results!
+	 *
+	 * @param owner The owner of this data. This will send the data
+	 * using KPropertyHandler::sendProperty whenever you call send
+	 *
+	 * @param p If not 0 you can set the policy of the property here
+	 *
+	 * @param name if not 0 you can assign a name to this property
+	 *
+	 **/
+	int registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name=0);
+
+	/** 
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 **/
+	int registerData(int id, KGamePropertyHandler* owner, TQString name=0);
+
+	/** 
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 **/
+	int registerData(int id, KGame* owner, TQString name=0);
+
+	/** 
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 **/
+	int registerData(int id, KPlayer* owner, TQString name=0);
+
+	/** 
+	 * This is an overloaded member function, provided for convenience.
+	 * It differs from the above function only in what argument(s) it accepts.
+	 * In particular you can use this function to create properties which
+	 * will have an automatic id assigned. The new id is returned.
+	 **/
+	int registerData(KGamePropertyHandler* owner,PropertyPolicy p=PolicyUndefined, TQString name=0);
+
+	void unregisterData();
+
+ 
+protected:
+	/**
+	 * A locked property can only be changed by the player who has set the
+	 * lock.
+	 *
+	 * You can only call this if isLocked is false. A message is sent
+	 * over network so that the property is locked for all players except
+	 * you. 
+	 * Usually you use lock and unlock to access this property
+	 *
+	 **/
+	void setLock(bool l);
+
+	/**
+	 * Sets the "dirty" flag of the property. If a property is "dirty" i.e.
+	 * KGameProperty::setLocal has been called there is no guarantee
+	 * that all clients share the same value. You have to ensure this
+	 * yourself e.g. by calling KGameProperty::setLocal on every
+	 * client. You can also ignore the dirty flag and continue working withe
+	 * the property depending on your situation.
+	 **/
+	void setDirty(bool d) { mFlags.bits.dirty = d ; }
+
+	/**
+	 * Forward the data to the owner of this property which then sends it
+	 * over network. save is used to store the data into a stream so
+	 * you have to make sure that function is working properly if you
+	 * implement your own property!
+	 *
+	 * Note: this sends the <em>current</em> property!
+	 *
+	 * Might be obsolete - KGamePropertyArray still uses it. Is this a bug
+	 * or correct?
+	 **/
+	bool sendProperty();
+	
+	/**
+	 * Forward the data to the owner of this property which then sends it
+	 * over network. save is used to store the data into a stream so
+	 * you have to make sure that function is working properly if you
+	 * implement your own property!
+	 *
+	 * This function is used by send to send the data over network.
+	 * This does <em>not</em> send the current value but the explicitly
+	 * given value. 
+	 *
+	 * @return TRUE if the message could be sent successfully, otherwise
+	 * FALSE
+	 **/
+	bool sendProperty(const TQByteArray& b);
+	
+	/**
+	 * Causes the parent object to emit a signal on value change
+	 **/
+	void emitSignal();
+
+protected:
+	KGamePropertyHandler* mOwner;
+	
+	// Having this as a union of the bitfield and the char
+	// allows us to stream this quantity easily (if we need to)
+	// At the moment it is not yet transmitted
+	union Flags {
+		char flag;
+		struct {
+			// unsigned char dosave : 1;   // do save this property
+			// unsigned char delaytransmit : 1;   // do not send immediately on
+                                             // change but a KPlayer:TQTimer
+                                             // sends it later on - fast
+                                             // changing variables
+			unsigned char emitsignal : 1; // KPlayer notifies on variable change (true)
+			//unsigned char readonly : 1; // whether the property can be changed (false)
+			unsigned char optimize : 1; // whether the property tries to optimize send/emit (false)
+			unsigned char dirty: 1; // whether the property dirty (setLocal() was used)
+			unsigned char policy : 2; // whether the property is always consistent (see PropertyPolicy)
+			unsigned char locked: 1; // whether the property is locked (true)
+		} bits;
+	} mFlags;
+	
+private:
+	friend class KGamePropertyHandler;
+	void init();
+	
+private:
+	int mId;
+
+};
+
+/**
+ * @short A class for network transparent games
+ *
+ * Note: The entire API documentation is obsolete!
+ * 
+ * The class KGameProperty can store any form of data and will transmit it via
+ * network whenver you call send. This makes network transparent games
+ * very easy. You first have to register the data to a KGamePropertyHandler
+ * using KGamePropertyBase::registerData (which is called by the
+ * constructor). For the KGamePropertyHandler you can use
+ * KGame::dataHandler or KPlayer::dataHandler but you can also create your
+ * own data handler.
+ *
+ * There are several concepts you can follow when writing network games. These
+ * concepts differ completely from the way how data is transferred so you should
+ * decide which one to use. You can also mix these concepts for a single
+ * property but we do not recommend this. The concepts:
+ * <ul>
+ * <li> Always Consistent (clean)
+ * <li> Not Always Consistent (dirty)
+ * <li> A Mixture (very dirty)
+ * </ul>
+ * I repeat: we do <em>not</em> recommend the third option ("a mixture"). Unless
+ * you have a good reason for this you will probably introduce some hard to find
+ * (and to fix) bugs.
+ *
+ * @section Always consistent (clean):
+ * 
+ * This "policy" is default. Whenever you create a KGameProperty it is always
+ * consistent. This means that consistency is the most important thing for the
+ * property. This is achieved by using send to change the value of the
+ * property. send needs a running KMessageServer and therefore
+ * <em>MUST</em> be plugged into a KGamePropertyHandler using either
+ * registerData or the constructor. The parent of the dataHandler must be able
+ * to send messages (see above: the message server must be running). If you use
+ * send to change the value of a property you won't see the effect
+ * immediately: The new value is first transferred to the message server which
+ * queues the message. As soon as <em>all</em> messages in the message server
+ * which are before the changed property have been transferred the message
+ * server delivers the new value of the KGameProperty to all clients. A
+ * TQTimer::singleShot is used to queue the messages inside the
+ * KMessageServer. 
+ *
+ * This means that if you do the following:
+ * \code
+ * KGamePropertyInt myProperty(id, dataHandler());
+ * myProperty.initData(0);
+ * myProperty = 10;
+ * int value = myProperty.value();
+ * \endcode
+ * then "value" will be "0". initData is used to initialize the property
+ * (e.g. when the KMessageServer is not yet running or can not yet be
+ * reached). This is because "myProperty = 10" or "myProperty.send(10)" send a
+ * message to the KMessageServer which uses TQTimer::singleShot to
+ * queue the message. The game first has to go back into the event loop where
+ * the message is received. The KGamePropertyHandler receives the new value
+ * sets the property. So if you need the new value you need to store it in a
+ * different variable (see setLocal which creates one for you until the
+ * message is received). The KGamePropertyHandler emits a signal (unless
+ * you called setEmitSignal with false) when the new value is received:
+ * KGamePropertyHandler::signalPropertyChanged. You can use this to react
+ * to a changed property.
+ *
+ * This may look quite confusing but it has a <em>big</em> advantage: all
+ * KGameProperty objects are ensured to have the same value on all clients in
+ * the game at every time. This way you will save you a lot of trouble as
+ * debugging can be very difficult if the value of a property changes
+ * immediately on client A but only after one or two additianal messages
+ * (function calls, status changes, ...) on client B.
+ *
+ * The only disadvantage of this (clean) concept is that you cannot use a
+ * changed variable immediately but have to wait for the KMessageServer to
+ * change it. You probably want to use
+ * KGamePropertyHandler::signalPropertyChanged for this.
+ *
+ * @section Not Always Consistent (dirty):
+ * 
+ * There are a lot of people who don't want to use the (sometimes quite complex)
+ * "clean" way. You can use setAlwaysConsistent to change the default
+ * behaviour of the KGameProperty. If a property is not always consistent
+ * it will use changeValue to send the property.  changeValue also uses
+ * send to send the new value over network but it also uses
+ * setLocal to create a local copy of the property. This copy is created
+ * dynamically and is deleted again as soon as the next message from the network
+ * is received. To use the example above again:
+ * \code
+ * KGamePropertyInt myProperty(id, dataHandler());
+ * myProperty.setAlwaysConsistent(false);
+ * myProperty.initData(0);
+ * myProperty = 10;
+ * int value = myProperty.value();
+ * \endcode
+ * Now this example will "work" so value now is 10. Additionally the
+ * KMessageServer receives a message from the local client (just as explained
+ * above in "Always Consistent"). As soon as the message returns to the local
+ * client again the local value is deleted, as the "network value" has the same
+ * value as the local one. So you won't lose the ability to use the always
+ * consistent "clean" value of the property if you use the "dirty" way. Just use
+ * networkValue to access the value which is consistent among all clients. 
+ *
+ * The advantage of this concept is clear: you can use a KGameProperty as
+ * every other variable as the changes value takes immediate effect.
+ * Additionally you can be sure that the value is transferred to all clients.
+ * You will usually not experience serious bugs just because you use the "dirty"
+ * way. Several events have to happen at once to get these "strange errors"
+ * which result in inconsistent properties (like "game running" on client A but
+ * "game ended/paused" on client B).  But note that there is a very good reason
+ * for the existence of these different concepts of KGameProperty. I have
+ * myself experienced such a "strange error" and it took me several days to find
+ * the reason until I could fix it. So I personally recommend the "clean" way.
+ * On the other hand if you want to port a non-network game to a network game
+ * you will probably start with "dirty" properties as it is you will not have to
+ * change that much code...
+ *
+ * @section A Mixture (very dirty):
+ * 
+ * You can also mix the concepts above. Note that we really don't recommend
+ * this. With a mixture I mean something like this:
+ * \code
+ * KGamePropertyInt myProperty(id, dataHandler());
+ * myProperty.setAlwaysConsistent(false);
+ * myProperty.initData(0);
+ * myProperty = 10;
+ * myProperty.setAlwaysConsistent(true);
+ * myProperty = 20;
+ * \endcode
+ * (totally senseless example, btw) I.e. I am speaking of mixing both concepts
+ * for a single property. Things like
+ * \code
+ * KGamePropertyInt myProperty1(id1, dataHandler());
+ * KGamePropertyInt myProperty2(id2, dataHandler());
+ * myProperty1.initData(0);
+ * myProperty2.initData(0);
+ * myProperty1.setAlwaysConsistent(false);
+ * myProperty2.setAlwaysConsistent(true);
+ * myProperty1 = 10;
+ * myProperty2 = 20;
+ * \endcode
+ * are ok. But mixing the concepts for a single property will make it nearly
+ * impossible to you to debug your game. 
+ *
+ * So the right thing to do(tm) is to decide in the constructor whether you want
+ * a "clean" or "dirty" property. 
+ *
+ * Even if you have decided for one of the concepts you still can manually
+ * follow another concept than the "policy" of your property. So if you use an
+ * always consistent KGameProperty you still can manually call
+ * changeValue as if it was not always consistent. Note that although this is
+ * also kind of a "mixture" as described above this is very useful sometimes. In
+ * contrast to the "mixture" above you don't have the problem that you don't
+ * exactly know which concept you are currently following because you used the
+ * function of the other concept only once. 
+ *
+ * @section Custom classes:
+ *
+ * If you want to use a custum class with KGameProperty you have to implement the
+ * operators << and >> for TQDataStream:
+ * \code
+ * class Card
+ * {
+ * public:
+ * int type;
+ * int suite;
+ * };
+ * TQDataStream& operator<<(TQDataStream& stream, Card& card)
+ * {
+ * TQ_INT16 type = card.type;
+ * TQ_INT16 suite = card.suite;
+ * s << type;
+ * s << suite;
+ * return s;
+ * }
+ * TQDataStream& operator>>(TQDataStream& stream, Card& card)
+ * {
+ * TQ_INT16 type;
+ * TQ_INT16 suite;
+ * s >> type;
+ * s >> suite;
+ * card.type = (int)type;
+ * card.suite = (int)suite;
+ * return s;
+ * }
+ *
+ * class Player : KPlayer
+ * {
+ * [...]
+ * KGameProperty<Card> mCards;
+ * };
+ * \endcode
+ *
+ * Note: unlike most QT classes KGameProperty objects are *not* deleted
+ * automatically! So if you create an object using e.g. KGameProperty<int>* data =
+ * new KGameProperty(id, dataHandler()) you have to put a delete data into your
+ * destructor!
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+template<class type>
+class KGameProperty  : public KGamePropertyBase
+{
+public:
+	/**
+	 * Constructs a KGameProperty object. A KGameProperty object will transmit
+	 * any changes to the KMessageServer and then to all clients in the
+	 * game (including the one that has sent the new value)
+	 * @param id The id of this property. <em>MUST be UNITQUE</em>! Used to send and
+	 * receive changes in the property of the playere automatically via
+	 * network. 
+	 * @param owner The parent of the object. Must be a KGame which manages
+	 * the changes made to this object, i.e. which will send the new data.
+	 * Note that in contrast to most KDE/QT classes KGameProperty objects
+	 * are <em>not</em> deleted automatically!
+	 **/
+// TODO: ID: Very ugly - better use something like parent()->propertyId() or so which assigns a free id automatically.
+	KGameProperty(int id, KGamePropertyHandler* owner) : KGamePropertyBase(id, owner) { init(); }
+
+	/**
+	 * This constructor does nothing. You have to call 
+	 * KGamePropertyBase::registerData
+	 * yourself before using the KGameProperty object.
+	 **/
+	KGameProperty() : KGamePropertyBase() { init(); }
+
+	virtual ~KGameProperty() {}
+
+	/**
+	 * Set the value depending on the current policy (see 
+	 * setConsistent). By default KGameProperty just uses send to set
+	 * the value of a property. This behaviour can be changed by using
+	 * setConsistent.
+	 * @param v The new value of the property
+	 **/
+	void setValue(type v)
+	{
+		switch (policy()) {
+			case PolicyClean:
+				send(v);
+				break;
+			case PolicyDirty:
+				changeValue(v);
+				break;
+			case PolicyLocal:
+				setLocal(v);
+				break;
+			default: // NEVER!
+				kdError(11001) << "Undefined Policy in property " << id() << endl;
+				return;
+		}
+	}
+
+
+	/**
+	 * This function sends a new value over network.
+	 *
+	 * Note that the value DOES NOT change when you call this function. This
+	 * function saves the value into a TQDataStream and calls
+	 * sendProperty where it gets forwarded to the owner and finally the
+	 * value is sent over network. The KMessageServer now sends the
+	 * value to ALL clients - even the one who called this function. As soon
+	 * as the value from the message server is received load is called
+	 * and _then_ the value of the KGameProperty has been set.
+	 *
+	 * This ensures that a KGameProperty has _always_ the same value on
+	 * _every_ client in the network. Note that this means you can NOT do
+	 * something like
+	 * \code
+	 * myProperty.send(1);
+	 * doSomething(myProperty);
+	 * \endcode
+	 * as myProperty has not yet been set when doSomething is being called.
+	 *
+	 * You are informed about a value change by a singal from the parent of
+	 * the property which can be deactivated by setEmittingSignal because of
+	 * performance (you probably don't have to deactivate it - except you
+	 * want to write a real-time game like Command&Conquer with a lot of
+	 * acitvity). See emitSignal
+	 *
+	 * Note that if there is no KMessageServer accessible - before
+	 * the property has been registered to the KGamePropertyHandler (as
+	 * it is the case e.g. before a KPlayer has been plugged into the
+	 * KGame object) the property is *not* sent but set *locally* (see
+	 * setLocal)!
+	 * 
+	 * @param v The new value of the property
+	 * @return whether the property could be sent successfully
+	 * @see setValue setLocal changeValue value
+	 **/
+	bool send(type v)
+	{
+		if (isOptimized() && mData == v) {
+			return true;
+		}
+		if (isLocked()) {
+			return false;
+		}
+		TQByteArray b;
+		TQDataStream stream(b, IO_WriteOnly);
+		stream << v;
+		if (!sendProperty(b)) {
+			setLocal(v);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * This function sets the value of the property directly, i.e. it
+	 * doesn't send it to the network. 
+	 *
+	 * Int contrast to @see you change _only_ the local value when using
+	 * this function. You do _not_ change the value of any other client. You
+	 * probably don't want to use this if you are using a dedicated server
+	 * (which is the only "client" which is allowed to change a value) but
+	 * rather want to use send(). 
+	 *
+	 * But if you use your clients as servers (i.e. all clients receive a
+	 * players turn and then calculate the reaction of the game theirselves)
+	 * then you probably want to use setLocal as you can do things like
+	 * \code
+	 * myProperty.setLocal(1);
+	 * doSomething(myProperty);
+	 * \endcode
+	 * on every client.
+	 *
+	 * If you want to set the value locally AND send it over network you
+	 * want to call changeValue!
+	 *
+	 * You can also use setPolicy to set the default policy to
+	 * PolicyLocal.
+	 *
+	 * @see setValue send changeValue value
+	 **/
+	bool setLocal(type v) 
+	{
+		if (isOptimized() && mData == v) {
+			return false;
+		}
+		if (isLocked()) {
+			return false;
+		}
+		mData = v;
+		setDirty(true);
+		if (isEmittingSignal()) {
+			emitSignal();
+		}
+		return true;
+	}
+
+	/**
+	 * This function does both, change the local value and change the
+	 * network value. The value is sent over network first, then changed
+	 * locally.
+	 *
+	 * This function is a convenience function and just calls send
+	 * followed by setLocal
+	 *
+	 * Note that emitSignal is also called twice: once after
+	 * setLocal and once when the value from send is received
+	 *
+	 * @see send setLocal setValue value 
+	 **/
+	void changeValue(type v)
+	{
+		send(v);
+		setLocal(v);
+	}
+
+	/**
+	 * Saves the object to a stream.
+	 * @param stream The stream to save to
+	 **/
+	virtual void save(TQDataStream &stream)
+	{
+		stream << mData;
+	}
+
+	/**
+	 * @return The local value (see setLocal) if it is existing,
+	 * otherwise the network value which is always consistent on every
+	 * client.
+	 **/
+	const type& value() const
+	{
+		return mData;
+	}
+
+	/**
+	 * Reads from a stream and assigns the read value to this object.
+	 *
+	 * This function is called automatically when a new value is received
+	 * over network (i.e. it has been sent using send on this or any
+	 * other client) or when a game is loaded (and maybe on some other
+	 * events).
+	 *
+	 * Also calls emitSignal if isEmittingSignal is TRUE.
+	 * @param s The stream to read from
+	 **/
+	virtual void load(TQDataStream& s)
+	{
+		s >> mData;
+		setDirty(false);
+		if (isEmittingSignal()) {
+			emitSignal();
+		}
+	}
+
+	/**
+	 * This calls setValue to change the value of the property. Note
+	 * that depending on the policy (see setAlwaysConsistent) the
+	 * returned value might be different from the assigned value!!
+	 *
+	 * So if you use setPolicy(PolicyClean):
+	 * \code
+	 * int a, b = 10;
+	 * myProperty = b;
+	 * a = myProperty.value();
+	 * \endcode
+	 * Here a and b would differ!
+	 * The value is actually set as soon as it is received from the
+	 * KMessageServer which forwards it to ALL clients in the network.
+	 *
+	 * If you use a clean policy (see setPolicy) then
+	 * the returned value is the assigned value
+	 **/
+	const type& operator=(const type& t) 
+	{ 
+		setValue(t); 
+		return value();
+	}
+
+	/**
+	 * This copies the data of property to the KGameProperty object.
+	 *
+	 * Equivalent to setValue(property.value());
+	 **/
+	const type& operator=(const KGameProperty& property)
+	{
+		setValue(property.value());
+		return value();
+	}
+
+	/**
+	 * Yeah, you can do it!
+	 * \code
+	 * 	int a = myGamePropertyInt;
+	 * \endcode
+	 * If you don't see it: you don't have to use integerData.value()
+	 **/
+	operator type() const { return value(); }
+
+	virtual const type_info* typeinfo() { return &typeid(type); }
+
+private:
+	void init() { }
+
+private:
+	type mData;
+};
+
+
+typedef KGameProperty<int>   KGamePropertyInt;
+typedef KGameProperty<unsigned int>   KGamePropertyUInt;
+typedef KGameProperty<TQString>   KGamePropertyTQString;
+typedef KGameProperty<TQ_INT8>   KGamePropertyBool;
+
+#endif
diff --git a/libtdegames/kgame/kgamepropertyarray.h b/libtdegames/kgame/kgamepropertyarray.h
new file mode 100644
index 00000000..0bb1d1a1
--- /dev/null
+++ b/libtdegames/kgame/kgamepropertyarray.h
@@ -0,0 +1,309 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEPROPERTYARRAY_H_
+#define __KGAMEPROPERTYARRAY_H_
+
+#include <tqdatastream.h>
+#include <kdebug.h>
+
+#include "kgamemessage.h"
+#include "kgameproperty.h"
+#include "kgamepropertyhandler.h"
+
+
+template<class type>
+class KGamePropertyArray : public TQMemArray<type>, public KGamePropertyBase
+{
+public:
+  KGamePropertyArray() :TQMemArray<type>(), KGamePropertyBase()
+  {
+    //kdDebug(11001) << "KGamePropertyArray init" << endl;
+  }
+  
+  KGamePropertyArray( int size )
+  {
+    resize(size);
+  }
+  
+  KGamePropertyArray( const KGamePropertyArray<type> &a ) : TQMemArray<type>(a)
+  {
+  }
+  
+  bool  resize( uint size )
+  {
+    if (size!=TQMemArray<type>::size())
+    {
+      bool a=true;
+      TQByteArray b;
+      TQDataStream s(b, IO_WriteOnly);
+      KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdResize);
+      s << size ;
+      if (policy()==PolicyClean || policy()==PolicyDirty)
+      {
+        if (mOwner)
+        {
+          mOwner->sendProperty(s);
+        }
+      }
+      if (policy()==PolicyLocal || policy()==PolicyDirty)
+      {
+        extractProperty(b);
+//        a=TQMemArray<type>::resize(size);// FIXME: return value!
+      }
+      return a;
+    }
+    else return true;
+  }
+
+  void setAt(uint i,type data)
+  {
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAt);
+    s << i ;
+    s << data;
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      extractProperty(b);
+    }
+    //kdDebug(11001) << "KGamePropertyArray setAt send COMMAND for id="<<id() << " type=" << 1 << " at(" << i<<")="<<data  << endl;
+  }
+
+  type at( uint i ) const
+  {
+    return TQMemArray<type>::at(i);
+  }
+  
+  type operator[]( int i ) const
+  {
+    return TQMemArray<type>::at(i);
+  }
+
+  KGamePropertyArray<type> &operator=(const KGamePropertyArray<type> &a)
+  {
+    return assign(a);
+  }
+
+  bool  truncate( uint pos )
+  {
+    return resize(pos);
+  }
+  
+  bool  fill( const type &data, int size = -1 )
+  {
+    bool r=true;
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdFill);
+    s << data;
+    s << size ;
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      extractProperty(b);
+//      r=TQMemArray<type>::fill(data,size);//FIXME: return value!
+    }
+    return r;
+  }
+
+  KGamePropertyArray<type>& assign( const KGamePropertyArray<type>& a )
+  {
+// note: send() has been replaced by sendProperty so it might be broken now!
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      sendProperty();
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      TQMemArray<type>::assign(a);
+    }
+    return *this;
+  }
+  KGamePropertyArray<type>& assign( const type *a, uint n )
+  {
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      sendProperty();
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      TQMemArray<type>::assign(a,n);
+    }
+    return *this;
+  }
+  KGamePropertyArray<type>& duplicate( const KGamePropertyArray<type>& a )
+  {
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      sendProperty();
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      TQMemArray<type>::duplicate(a);
+    }
+    return *this;
+  }
+  KGamePropertyArray<type>& duplicate( const type *a, uint n )
+  {
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      sendProperty();
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      TQMemArray<type>::duplicate(a,n);
+    }
+    return *this;
+  }
+  KGamePropertyArray<type>& setRawData( const type *a, uint n )
+  {
+    if (policy()==PolicyClean || policy()==PolicyDirty)
+    {
+      sendProperty();
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      TQMemArray<type>::setRawData(a,n);
+    }
+    return *this;
+  }
+  void sort()
+  {
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdSort);
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy()==PolicyLocal || policy()==PolicyDirty)
+    {
+      extractProperty(b);
+    }
+  }
+
+  void load(TQDataStream& s)
+  {
+    //kdDebug(11001) << "KGamePropertyArray load " << id() << endl;
+    type data;
+    for (unsigned int i=0; i<TQMemArray<type>::size(); i++) 
+    {
+      s >> data;
+      TQMemArray<type>::at(i)=data;
+    }
+    if (isEmittingSignal())
+    {
+      emitSignal();
+    }
+  }
+  void save(TQDataStream &s)
+  {
+    //kdDebug(11001) << "KGamePropertyArray save "<<id() << endl;
+    for (unsigned int i=0; i<TQMemArray<type>::size(); i++) 
+    {
+      s << at(i);
+    }
+  }
+
+  void command(TQDataStream &s,int cmd,bool)
+  {
+    KGamePropertyBase::command(s, cmd);
+    //kdDebug(11001) << "Array id="<<id()<<" got command ("<<cmd<<") !!!" <<endl; 
+    switch(cmd)
+    {
+      case CmdAt:
+      {
+        uint i;
+        type data;
+        s >> i >> data;
+        TQMemArray<type>::at(i)=data;
+        //kdDebug(11001) << "CmdAt:id="<<id()<<" i="<<i<<" data="<<data <<endl; 
+        if (isEmittingSignal()) 
+        {
+          emitSignal();
+        }
+        break;
+      }
+      case CmdResize:
+      {
+        uint size;
+        s >> size;
+        //kdDebug(11001) << "CmdResize:id="<<id()<<" oldsize="<<TQMemArray<type>::size()<<" newsize="<<size <<endl; 
+        if (TQMemArray<type>::size() != size)
+        {
+          TQMemArray<type>::resize(size);
+        }
+        break;
+      }
+      case CmdFill:
+      {
+        int size;
+        type data;
+        s >> data >> size;
+        //kdDebug(11001) << "CmdFill:id="<<id()<<"size="<<size <<endl; 
+        TQMemArray<type>::fill(data,size);
+        if (isEmittingSignal()) 
+        {
+          emitSignal();
+        }
+        break;
+      }
+      case CmdSort:
+      {
+        //kdDebug(11001) << "CmdSort:id="<<id()<<endl; 
+        TQMemArray<type>::sort();
+        break;
+      }
+      default: 
+        kdError(11001) << "Error in KPropertyArray::command: Unknown command " << cmd << endl;
+        break;
+    }
+  }
+protected:
+  void extractProperty(const TQByteArray& b)
+  {
+    TQDataStream s(b, IO_ReadOnly);
+    int cmd;
+    int propId;
+    KGameMessage::extractPropertyHeader(s, propId);
+    KGameMessage::extractPropertyCommand(s, propId, cmd);
+    command(s, cmd, true);
+  }
+
+};
+
+#endif
diff --git a/libtdegames/kgame/kgamepropertyhandler.cpp b/libtdegames/kgame/kgamepropertyhandler.cpp
new file mode 100644
index 00000000..405d433e
--- /dev/null
+++ b/libtdegames/kgame/kgamepropertyhandler.cpp
@@ -0,0 +1,407 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgamepropertyhandler.h"
+#include "kgameproperty.h"
+#include "kgamemessage.h"
+
+#include <tqmap.h>
+#include <tqptrqueue.h>
+
+#include <klocale.h>
+#include <typeinfo>
+
+#define KPLAYERHANDLER_LOAD_COOKIE 6239
+
+//---------------------- KGamePropertyHandler -----------------------------------
+class KGamePropertyHandlerPrivate
+{
+public:
+	KGamePropertyHandlerPrivate()
+	{
+	}
+
+	TQMap<int, TQString> mNameMap;
+	TQIntDict<KGamePropertyBase> mIdDict;
+	int mUniqueId;
+	int mId;
+	KGamePropertyBase::PropertyPolicy mDefaultPolicy;
+	bool mDefaultUserspace;
+  int mIndirectEmit;
+  TQPtrQueue<KGamePropertyBase> mSignalQueue;
+};
+
+KGamePropertyHandler::KGamePropertyHandler(int id, const TQObject* receiver, const char * sendf, const char *emitf, TQObject* parent) : TQObject(parent)
+{
+ init();
+ registerHandler(id,receiver,sendf,emitf);
+}
+
+KGamePropertyHandler::KGamePropertyHandler(TQObject* parent) : TQObject(parent)
+{
+ init();
+}
+
+KGamePropertyHandler::~KGamePropertyHandler()
+{
+ clear();
+ delete d;
+}
+
+void KGamePropertyHandler::init()
+{
+ kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
+ d = new KGamePropertyHandlerPrivate; // for future use - is BC important to us?
+ d->mId = 0;
+ d->mUniqueId=KGamePropertyBase::IdAutomatic;
+ d->mDefaultPolicy=KGamePropertyBase::PolicyLocal;
+ d->mDefaultUserspace=true;
+ d->mIndirectEmit=0;
+}
+
+
+int KGamePropertyHandler::id() const
+{
+ return d->mId;
+}
+
+void KGamePropertyHandler::setId(int id)
+{
+ d->mId = id;
+}
+
+void KGamePropertyHandler::registerHandler(int id,const TQObject * receiver, const char * sendf, const char *emitf)
+{
+ setId(id); 
+ if (receiver && sendf) {
+	kdDebug(11001) << "Connecting TQT_SLOT " << sendf << endl;
+	connect(this, TQT_SIGNAL(signalSendMessage(int, TQDataStream &, bool*)), receiver, sendf);
+ }
+ if (receiver && emitf) {
+	kdDebug(11001) << "Connecting TQT_SLOT " << emitf << endl;
+	connect(this, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase *)), receiver, emitf);
+ }
+}
+
+bool KGamePropertyHandler::processMessage(TQDataStream &stream, int id, bool isSender)
+{
+// kdDebug(11001) << k_funcinfo << ": id=" << id << " mId=" << d->mId << endl;
+ if (id != d->mId) {
+ 	return false; // Is the message meant for us?
+ }
+ KGamePropertyBase* p;
+ int propertyId;
+ KGameMessage::extractPropertyHeader(stream, propertyId);
+// kdDebug(11001) << k_funcinfo << ": Got property " << propertyId << endl;
+ if (propertyId==KGamePropertyBase::IdCommand) {
+	int cmd;
+	KGameMessage::extractPropertyCommand(stream, propertyId, cmd);
+//kdDebug(11001) << k_funcinfo << ": Got COMMAND for id= "<<propertyId <<endl;
+	p = d->mIdDict.find(propertyId);
+	if (p) {
+		if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
+			p->command(stream, cmd, isSender);
+		}
+	} else {
+		kdError(11001) << k_funcinfo << ": (cmd): property " << propertyId << " not found" << endl;
+	}
+	return true;
+ }
+ p = d->mIdDict.find(propertyId);
+ if (p) {
+	//kdDebug(11001) << k_funcinfo << ": Loading " << propertyId << endl;
+	if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
+		p->load(stream);
+	}
+ } else {
+	kdError(11001) << k_funcinfo << ": property " << propertyId << " not found" << endl;
+ }
+ return true;
+}
+
+bool KGamePropertyHandler::removeProperty(KGamePropertyBase* data)
+{
+ if (!data) {
+	return false;
+ }
+ d->mNameMap.erase(data->id());
+ return d->mIdDict.remove(data->id());
+}
+
+bool KGamePropertyHandler::addProperty(KGamePropertyBase* data, TQString name)
+{
+ //kdDebug(11001) << k_funcinfo << ": " << data->id() << endl;
+ if (d->mIdDict.find(data->id())) {
+	// this id already exists
+	kdError(11001) << "  -> cannot add property " << data->id() << endl;
+	return false;
+ } else {
+	d->mIdDict.insert(data->id(), data);
+  // if here is a check for "is_debug" or so we can add the strings only in debug mode
+  // and save memory!!
+	if (!name.isNull()) {
+		d->mNameMap[data->id()] = name;
+		//kdDebug(11001) << k_funcinfo << ": nid="<< (data->id()) << " inserted in Map name=" << d->mNameMap[data->id()] <<endl;
+		//kdDebug(11001) << "Typeid=" << typeid(data).name() << endl;
+  	//kdDebug(11001) << "Typeid call=" << data->typeinfo()->name() << endl;
+	}
+ }
+ return true;
+}
+
+TQString KGamePropertyHandler::propertyName(int id) const
+{
+ TQString s;
+ if (d->mIdDict.find(id)) {
+	if (d->mNameMap.contains(id)) {
+		s = i18n("%1 (%2)").tqarg(d->mNameMap[id]).tqarg(id);
+	} else {
+		s = i18n("Unnamed - ID: %1").tqarg(id);
+	}
+ } else {
+	// Should _never_ happen
+	s = i18n("%1 unregistered").tqarg(id);
+ }
+ return s;
+}
+
+bool KGamePropertyHandler::load(TQDataStream &stream)
+{
+ // Prevent direct emmiting until all is loaded
+ lockDirectEmit();
+ uint count,i;
+ stream >> count;
+ kdDebug(11001) << k_funcinfo << ": " << count << " KGameProperty objects " << endl;
+ for (i = 0; i < count; i++) {
+	processMessage(stream, id(),false);
+ }
+ TQ_INT16 cookie;
+ stream >> cookie;
+ if (cookie == KPLAYERHANDLER_LOAD_COOKIE) {
+	kdDebug(11001) << "   KGamePropertyHandler loaded propertly"<<endl;
+ } else {
+	kdError(11001) << "KGamePropertyHandler loading error. probably format error"<<endl;
+ }
+ // Allow direct emmiting (if no other lock still holds)
+ unlockDirectEmit();
+ return true;
+}
+
+bool KGamePropertyHandler::save(TQDataStream &stream)
+{
+ kdDebug(11001) << k_funcinfo << ": " << d->mIdDict.count() << " KGameProperty objects " << endl;
+ stream << (uint)d->mIdDict.count();
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	KGamePropertyBase *base=it.current();
+	if (base) {
+		KGameMessage::createPropertyHeader(stream, base->id());
+		base->save(stream);
+	}
+	++it;
+ }
+ stream << (TQ_INT16)KPLAYERHANDLER_LOAD_COOKIE;
+ return true;
+}
+
+KGamePropertyBase::PropertyPolicy KGamePropertyHandler::policy()
+{
+// kdDebug(11001) << k_funcinfo << ": " << d->mDefaultPolicy << endl;
+ return d->mDefaultPolicy;
+}
+void KGamePropertyHandler::setPolicy(KGamePropertyBase::PropertyPolicy p,bool userspace)
+{
+ // kdDebug(11001) << k_funcinfo << ": " << p << endl;
+ d->mDefaultPolicy=p;
+ d->mDefaultUserspace=userspace;
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	if (!userspace || it.current()->id()>=KGamePropertyBase::IdUser) {
+		it.current()->setPolicy((KGamePropertyBase::PropertyPolicy)p);
+	}
+	++it;
+ }
+}
+
+void KGamePropertyHandler::unlockProperties()
+{
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	it.current()->unlock();
+	++it;
+ }
+}
+
+void KGamePropertyHandler::lockProperties()
+{
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	it.current()->lock();
+	++it;
+ }
+}
+
+int KGamePropertyHandler::uniquePropertyId()
+{
+ return d->mUniqueId++;
+}
+
+void KGamePropertyHandler::flush()
+{
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	if (it.current()->isDirty()) {
+		it.current()->sendProperty();
+	}
+	++it;
+ }
+}
+
+/* Fire all property signal changed which are collected in
+ * the queque
+ **/
+void KGamePropertyHandler::lockDirectEmit()
+{
+  d->mIndirectEmit++;
+}
+
+void KGamePropertyHandler::unlockDirectEmit()
+{
+  // If the flag is <=0 we emit the queued signals
+  d->mIndirectEmit--;
+  if (d->mIndirectEmit<=0)
+  {
+    KGamePropertyBase *prop;
+    while((prop=d->mSignalQueue.dequeue()) != 0)
+    {
+      // kdDebug(11001) << "emmiting signal for " << prop->id() << endl;
+      emit signalPropertyChanged(prop);
+    }
+  }
+}
+
+void KGamePropertyHandler::emitSignal(KGamePropertyBase *prop)
+{
+ // If the indirect flag is set (load and network transmit)
+ // we cannot emit the signals directly as it can happend that
+ // a sigal causes an access to a property which is e.g. not
+ // yet loaded or received
+
+ if (d->mIndirectEmit>0)
+ {
+  // Queque the signal
+  d->mSignalQueue.enqueue(prop);
+ }
+ else
+ {
+  // directly emit
+  emit signalPropertyChanged(prop);
+ }
+}
+
+bool KGamePropertyHandler::sendProperty(TQDataStream &s)
+{
+ bool sent = false;
+ emit signalSendMessage(id(), s, &sent);
+ return sent;
+}
+
+KGamePropertyBase *KGamePropertyHandler::find(int id)
+{
+ return d->mIdDict.find(id);
+}
+
+void KGamePropertyHandler::clear()
+{
+ kdDebug(11001) << k_funcinfo << id() << endl;
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.toFirst()) {
+	KGamePropertyBase* p = it.toFirst();
+	p->unregisterData();
+	if (d->mIdDict.find(p->id())) {
+		// shouldn't happen - but if mOwner in KGamePropertyBase is NULL
+		// this might be possible
+		removeProperty(p); 
+	}
+ }
+}
+
+TQIntDict<KGamePropertyBase>& KGamePropertyHandler::dict() const
+{ 
+ return d->mIdDict; 
+}
+
+TQString KGamePropertyHandler::propertyValue(KGamePropertyBase* prop)
+{
+ if (!prop) {
+         return i18n("NULL pointer");
+ }
+	   
+ int id = prop->id();
+ TQString name = propertyName(id);
+ TQString value;
+
+ const type_info* t = prop->typeinfo();
+ if (*t == typeid(int)) {
+	value = TQString::number(((KGamePropertyInt*)prop)->value());
+ } else if (*t == typeid(unsigned int)) {
+	value = TQString::number(((KGamePropertyUInt *)prop)->value());
+ } else if (*t == typeid(long int)) {
+	value = TQString::number(((KGameProperty<long int> *)prop)->value()); 
+ } else if (*t == typeid(unsigned long int)) {
+	value = TQString::number(((KGameProperty<unsigned long int> *)prop)->value());
+ } else if (*t == typeid(TQString)) { 
+	value = ((KGamePropertyTQString*)prop)->value();
+ } else if (*t == typeid(TQ_INT8)) { 
+	value = ((KGamePropertyBool*)prop)->value() ?  i18n("True") : i18n("False");
+ } else {
+	emit signalRequestValue(prop, value);
+ }
+		   
+ if (value.isNull()) {
+	value = i18n("Unknown");
+ }
+ return value;
+}
+
+void KGamePropertyHandler::Debug()
+{
+ kdDebug(11001) << "-----------------------------------------------------------" << endl;
+ kdDebug(11001) << "KGamePropertyHandler:: Debug this=" << this << endl;
+
+ kdDebug(11001) << "  Registered properties: (Policy,Lock,Emit,Optimized, Dirty)" << endl;
+ TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
+ while (it.current()) {
+	KGamePropertyBase *p=it.current();
+	kdDebug(11001) << "  "<< p->id() << ": p=" << p->policy() 
+			<< " l="<<p->isLocked()
+			<< " e="<<p->isEmittingSignal() 
+			<< " o=" << p->isOptimized() 
+			<< " d="<<p->isDirty() 
+			<< endl;
+	++it;
+ }
+ kdDebug(11001) << "-----------------------------------------------------------" << endl;
+}
+
+#include "kgamepropertyhandler.moc"
diff --git a/libtdegames/kgame/kgamepropertyhandler.h b/libtdegames/kgame/kgamepropertyhandler.h
new file mode 100644
index 00000000..c2a3429f
--- /dev/null
+++ b/libtdegames/kgame/kgamepropertyhandler.h
@@ -0,0 +1,354 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEPROPERTYHANDLER_H_
+#define __KGAMEPROPERTYHANDLER_H_
+
+#include <tqobject.h>
+#include <tqintdict.h>
+
+#include "kgameproperty.h"
+#include <kdemacros.h>
+
+class TQDataStream;
+class KGame;
+class KPlayer;
+//class KGamePropertyBase;
+
+class KGamePropertyHandlerPrivate; // wow - what a name ;-)
+
+/**
+ * @short A collection class for KGameProperty objects
+ *
+ * The KGamePropertyHandler class is some kind of a collection class for
+ * KGameProperty. You usually don't have to create one yourself, as both
+ * KPlayer and KGame provide a handler. In most cases you do not even have
+ * to care about the KGamePropertHandler. KGame and KPlayer implement
+ * all features of KGamePropertyHandler so you will rather use it there.
+ *
+ * You have to use the KGamePropertyHandler as parent for all KGameProperty
+ * objects but you can also use KPlayer or KGame as parent - then
+ * KPlayer::dataHandler or KGame::dataHandler will be used. 
+ *
+ * Every KGamePropertyHandler must have - just like every KGameProperty -
+ * a unique ID. This ID is provided either in the constructor or in
+ * registerHandler. The ID is used to assign an incoming message (e.g. a changed
+ * property) to the correct handler. Inside the handler the property ID is used
+ * to change the correct property. 
+ *
+ * The constructor or registerHandler takes 3 addittional arguments: a
+ * receiver and two slots. The first slot is connected to
+ * signalSendMessage, the second to signalPropertyChanged. You must provide
+ * these in order to use the KGamePropertyHandler. 
+ *
+ * The most important function of KGamePropertyHandler is processMessage
+ * which assigns an incoming value to the correct property. 
+ *
+ * A KGamePropertyHandler is also used - indirectly using emitSignal - to
+ * emit a signal when the value of a property changes. This is done this way
+ * because a KGameProperty does not inherit TQObject because of memory
+ * advantages. Many games can have dozens or even hundreds of KGameProperty
+ * objects so every additional variable in KGameProperty would be
+ * multiplied. 
+ *
+ **/
+class KDE_EXPORT KGamePropertyHandler : public TQObject
+{
+	Q_OBJECT
+  TQ_OBJECT
+
+public:
+	/**
+	 * Construct an unregistered KGamePropertyHandler
+	 *
+	 * You have to call registerHandler before you can use this
+	 * handler!
+	 **/
+	KGamePropertyHandler(TQObject* parent = 0);
+
+	/**
+	 * Construct a registered handler. 
+	 *
+	 * @see registerHandler
+	 **/
+	KGamePropertyHandler(int id, const TQObject* receiver, const char* sendf, const char* emitf, TQObject* parent = 0);
+	~KGamePropertyHandler();
+
+	/**
+	 * Register the handler with a parent. This is to use
+	 * if the constructor without arguments has been chosen.
+	 * Otherwise you need not call this.
+	 *
+	 * @param id The id of the message to listen for
+	 * @param receiver The object that will receive the signals of
+	 * KGamePropertyHandler
+	 * @param send A slot that is being connected to signalSendMessage
+	 * @param emit A slot that is being connected to signalPropertyChanged
+	 **/
+	void registerHandler(int id, const TQObject *receiver, const char * send, const char *emit); 
+
+	/**
+	 * Main message process function. This has to be called by
+	 * the parent's message event handler. If the id of the message
+	 * agrees with the id of the handler, the message is extracted 
+	 * and processed. Otherwise false is returned.
+	 * Example:
+	 * \code
+	 *   if (mProperties.processMessage(stream,msgid,sender==gameId())) return ;
+	 * \endcode
+	 * 
+	 * @param stream The data stream containing the message
+	 * @param id the message id of the message
+	 * @param isSender Whether the receiver is also the sender
+	 * @return true on message processed otherwise false
+	 **/
+	bool processMessage(TQDataStream &stream, int id, bool isSender );
+	
+	/**
+	 * @return the id of the handler
+	 **/
+	int id() const;
+	
+	/**
+	 * Adds a KGameProperty property to the handler
+	 * @param data the property
+	 * @param name A description of the property, which will be returned by
+	 * propertyName. This is used for debugging, e.g. in KGameDebugDialog
+	 * @return true on success
+	 **/
+	bool addProperty(KGamePropertyBase *data, TQString name=0);
+
+	/**
+	 * Removes a property from the handler
+	 * @param data the property
+	 * @return true on success
+	 **/
+	bool removeProperty(KGamePropertyBase *data);
+
+	/**
+	 * returns a unique property ID starting called usually with a base of
+	 * KGamePropertyBase::IdAutomatic. This is used internally by
+	 * the property base to assign automtic id's. Not much need to
+	 * call this yourself.
+	 **/
+	int uniquePropertyId();
+
+
+	/**
+	 * Loads properties from the datastream
+	 *
+	 * @param stream the datastream to load from
+	 * @return true on success otherwise false
+	 **/
+	virtual bool load(TQDataStream &stream);
+
+	/**
+	 * Saves properties into the datastream
+	 *
+	 * @param stream the datastream to save to
+	 * @return true on success otherwise false
+	 **/
+	virtual bool save(TQDataStream &stream);
+	
+	/**
+	 * called by a property to send itself into the
+	 * datastream. This call is simply forwarded to
+	 * the parent object
+	 **/ 
+	bool sendProperty(TQDataStream &s);
+
+	void sendLocked(bool l);
+
+	/**
+	 * called by a property to emit a signal 
+	 * This call is simply forwarded to
+	 * the parent object
+	 **/ 
+	void emitSignal(KGamePropertyBase *data);
+
+	/**
+	 * @param id The ID of the property
+	 * @return A name of the property which can be used for debugging. Don't
+	 * depend on this function! It it possible not to provide a name or to
+	 * provide the same name for multiple properties!
+	 **/
+	TQString propertyName(int id) const;
+
+	/**
+	 * @param id The ID of the property. See KGamePropertyBase::id
+	 * @return The KGameProperty this ID is assigned to
+	 **/
+	KGamePropertyBase *find(int id);
+
+	/**
+	 * Clear the KGamePropertyHandler. Note that the properties are
+	 * <em>not</em> deleted so if you created your KGameProperty
+	 * objects dynamically like
+	 * \code
+	 * KGamePropertyInt* myProperty = new KGamePropertyInt(id, dataHandler());
+	 * \endcode
+	 * you also have to delete it:
+	 * \code
+	 * dataHandler()->clear();
+	 * delete myProperty;
+	 * \endcode
+	 **/
+	void clear();
+
+	/**
+	 * Use id as new ID for this KGamePropertyHandler. This is used
+	 * internally only.
+	 **/
+	void setId(int id);//AB: TODO: make this protected in KGamePropertyHandler!!
+
+	/**
+	 * Calls KGamePropertyBase::setReadOnly(false) for all properties of this
+	 * player. See also lockProperties
+	 **/
+	void unlockProperties();
+
+	/**
+	 * Set the policy for all kgame variables which are currently registerd in
+	 * the KGame proeprty handler. See KGamePropertyBase::setPolicy
+	 *
+	 * @param p is the new policy for all properties of this handler
+	 * @param userspace if userspace is true (default) only user properties are changed.
+	 * Otherwise the system properties are also changed.
+	 **/
+	void setPolicy(KGamePropertyBase::PropertyPolicy p, bool userspace=true);
+
+	/**
+	 * Called by the KGame or KPlayer object or the handler itself to delay
+	 * emmiting of signals. Lockign keeps a counter and unlock is only achieved
+	 * when every lock is canceld by an unlock.
+	 * While this is set signals are  quequed and only emmited after this
+	 * is reset. Its deeper meaning is to prevent inconsistencies in a game
+	 * load or network transfer where a emit could access a property not
+	 * yet loaded or transmitted. Calling this by yourself you better know
+	 * what your are doing.
+	 **/
+	void lockDirectEmit();
+
+	/**
+	 * Removes the lock from the emitting of property signals. Corresponds to
+	 * the lockIndirectEmits
+	 **/
+	void unlockDirectEmit();
+  
+	/**
+	 * Returns the default policy for this property handler. All properties
+	 * registered newly, will have this property.
+	 **/
+	KGamePropertyBase::PropertyPolicy policy();
+
+	/**
+	 * Calls KGamePropertyBase::setReadOnly(true) for all properties of this
+	 * handler
+	 *
+	 * Use with care! This will even lock the core properties, like name,
+	 * group and myTurn!!
+	 *
+	 * @see unlockProperties
+	 **/
+	void lockProperties();
+
+	/**
+	 * Sends all properties which are marked dirty over the network. This will
+	 * make a forced synchornisation of the properties and mark them all not dirty.
+	 **/
+	void flush();
+
+	/**
+	 * Reference to the internal dictionary
+	 **/
+	TQIntDict<KGamePropertyBase> &dict() const;
+
+	/**
+	 * In several situations you just want to have a TQString of a
+	 * KGameProperty object. This is the case in the 
+	 * KGameDebugDialog where the value of all properties is displayed. This
+	 * function will provide you with such a TQString for all the types
+	 * used inside of all KGame classes. If you have a non-standard
+	 * property (probably a self defined class or something like this) you
+	 * also need to connect to signalRequestValue to make this function
+	 * useful.
+	 * @param property Return the value of this KGameProperty 
+	 * @return The value of a KGameProperty
+	 **/
+	TQString propertyValue(KGamePropertyBase* property);
+
+
+	/**
+	 * Writes some debug output to the console.
+	 **/ 
+	void Debug();
+
+
+signals:
+	/**
+	 * This is emitted by a property. KGamePropertyBase::emitSignal
+	 * calls emitSignal which emits this signal. 
+	 *
+	 * This signal is emitted whenever the property is changed. Note that
+	 * you can switch off this behaviour using 
+	 * KGamePropertyBase::setEmittingSignal in favor of performance. Note
+	 * that you won't experience any performance loss using signals unless
+	 * you use dozens or hundreds of properties which change very often.
+	 **/
+	void signalPropertyChanged(KGamePropertyBase *);
+
+	/**
+	 * This signal is emitted when a property needs to be sent. Only the
+	 * parent has to react to this.
+	 * @param msgid The id of the handler
+	 * @param sent set this to true if the property was sent successfully -
+	 * otherwise don't touch
+	 **/
+	void signalSendMessage(int msgid, TQDataStream &, bool* sent); // AB shall we change bool* into bool& again?
+
+	/**
+	 * If you call propertyValue with a non-standard KGameProperty
+	 * it is possible that the value cannot automatically be converted into a
+	 * TQString. Then this signal is emitted and asks you to provide the
+	 * correct value. You probably want to use something like this to achieve
+	 * this:
+	 * \code
+	 * #include <typeinfo>
+	 * void slotRequestValue(KGamePropertyBase* p, TQString& value)
+	 * {
+	 * 	if (*(p->typeinfo()) == typeid(MyType) {
+	 * 		value = TQString(((KGameProperty<MyType>*)p)->value());
+	 * 	}
+	 * }
+	 * \endcode
+	 *
+	 * @param property The KGamePropertyBase the value is requested for
+	 * @param value The value of this property. You have to set this.
+	 **/
+	void signalRequestValue(KGamePropertyBase* property, TQString& value);
+
+private:
+	void init();
+
+private:
+	KGamePropertyHandlerPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/kgamepropertylist.h b/libtdegames/kgame/kgamepropertylist.h
new file mode 100644
index 00000000..df8eb604
--- /dev/null
+++ b/libtdegames/kgame/kgamepropertylist.h
@@ -0,0 +1,258 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMEPROPERTYLIST_H_
+#define __KGAMEPROPERTYLIST_H_
+
+#include <tqvaluelist.h>
+
+#include <kdebug.h>
+
+#include "kgamemessage.h"
+#include "kgameproperty.h"
+#include "kgamepropertyhandler.h"
+
+// AB: also see README.LIB!
+
+template<class type>
+class KGamePropertyList : public TQValueList<type>, public KGamePropertyBase
+{
+public:
+     /**
+     * Typedefs
+     */
+    typedef TQValueListIterator<type> Iterator;
+    typedef TQValueListConstIterator<type> ConstIterator;
+
+  KGamePropertyList() :TQValueList<type>(), KGamePropertyBase()
+  {
+  }
+
+  KGamePropertyList( const KGamePropertyList<type> &a ) : TQValueList<type>(a)
+  {
+  }
+
+  uint findIterator(Iterator me)
+  {
+    Iterator it;
+    uint cnt=0;
+    for( it = this->begin(); it != this->end(); ++it )
+    {
+      if (me==it) 
+      {
+        return cnt;
+      }
+      cnt++;
+    }
+    return this->count();
+  }
+
+  Iterator insert( Iterator it, const type& d )
+  {
+    it=TQValueList<type>::insert(it,d);
+
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdInsert);
+    int i=findIterator(it);
+    s << i;
+    s << d;
+    if (policy() == PolicyClean || policy() == PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy() == PolicyDirty || policy() == PolicyLocal)
+    {
+      extractProperty(b);
+    }
+    return it;
+  }
+
+  void  prepend( const type& d) { insert(this->begin(),d); }
+  
+  void  append( const type& d ) 
+  {
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAppend);
+    s << d;
+    if (policy() == PolicyClean || policy() == PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy() == PolicyDirty || policy() == PolicyLocal)
+    {
+      extractProperty(b);
+    }
+  }
+
+  Iterator erase( Iterator it )
+  {
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdRemove);
+    int i=findIterator(it);
+    s << i;
+    if (policy() == PolicyClean || policy() == PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy() == PolicyDirty || policy() == PolicyLocal)
+    {
+      extractProperty(b);
+    }
+    //TODO: return value - is it correct for PolicyLocal|PolicyDirty?
+//    return TQValueList<type>::remove(it);
+    return it;
+  }
+
+  Iterator remove( Iterator it )
+  {
+    return erase(it);
+  }
+
+  void remove( const type& d )
+  {
+    Iterator it=find(d);
+    remove(it);
+  }
+
+  void clear()
+  {
+    TQByteArray b;
+    TQDataStream s(b, IO_WriteOnly);
+    KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdClear);
+    if (policy() == PolicyClean || policy() == PolicyDirty)
+    {
+      if (mOwner)
+      {
+        mOwner->sendProperty(s);
+      }
+    }
+    if (policy() == PolicyDirty || policy() == PolicyLocal)
+    {
+      extractProperty(b);
+    }
+  }
+
+  void load(TQDataStream& s)
+  {
+    kdDebug(11001) << "KGamePropertyList load " << id() << endl;
+    TQValueList<type>::clear();
+    uint size;
+    type data;
+    s >> size;
+
+    for (unsigned int i=0;i<size;i++)
+    {
+      s >> data;
+      TQValueList<type>::append(data);
+    }
+    if (isEmittingSignal()) emitSignal();
+  }
+
+  void save(TQDataStream &s)
+  {
+    kdDebug(11001) << "KGamePropertyList save "<<id() << endl;
+    type data;
+    uint size=this->count();
+    s << size;
+    Iterator it;
+    for( it = this->begin(); it != this->end(); ++it )
+    {
+      data=*it;
+      s << data;
+    }
+  }
+
+  void command(TQDataStream &s,int cmd,bool)
+  {
+    KGamePropertyBase::command(s, cmd);
+    kdDebug(11001) << "---> LIST id="<<id()<<" got command ("<<cmd<<") !!!" <<endl; 
+    Iterator it;
+    switch(cmd)
+    {
+      case CmdInsert:
+      {
+        uint i;
+        type data;
+        s >> i >> data;
+        it=this->at(i);
+        TQValueList<type>::insert(it,data);
+//        kdDebug(11001) << "CmdInsert:id="<<id()<<" i="<<i<<" data="<<data <<endl; 
+        if (isEmittingSignal()) emitSignal();
+        break;
+      }
+      case CmdAppend:
+      {
+        type data;
+	s >> data;
+        TQValueList<type>::append(data);
+//        kdDebug(11001) << "CmdAppend:id=" << id() << " data=" << data << endl; 
+        if (isEmittingSignal()) emitSignal();
+	break;
+      }
+      case CmdRemove:
+      {
+        uint i;
+        s >> i;
+        it=this->at(i);
+        TQValueList<type>::remove(it);
+        kdDebug(11001) << "CmdRemove:id="<<id()<<" i="<<i <<endl; 
+        if (isEmittingSignal()) emitSignal();
+        break;
+      }
+      case CmdClear:
+      {
+        TQValueList<type>::clear();
+        kdDebug(11001) << "CmdClear:id="<<id()<<endl; 
+        if (isEmittingSignal()) emitSignal();
+        break;
+      }
+      default: 
+        kdDebug(11001) << "Error in KPropertyList::command: Unknown command " << cmd << endl;
+    }
+  }
+
+protected:
+  void extractProperty(const TQByteArray& b)
+  // this is called for Policy[Dirty|Local] after putting the stuff into the
+  // stream
+  {
+    TQDataStream s(b, IO_ReadOnly);
+    int cmd;
+    int propId;
+    KGameMessage::extractPropertyHeader(s, propId);
+    KGameMessage::extractPropertyCommand(s, propId, cmd);
+    command(s, cmd, true);
+  }
+
+};
+
+#endif
diff --git a/libtdegames/kgame/kgamesequence.cpp b/libtdegames/kgame/kgamesequence.cpp
new file mode 100644
index 00000000..9391ee04
--- /dev/null
+++ b/libtdegames/kgame/kgamesequence.cpp
@@ -0,0 +1,125 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include "kgamesequence.h"
+#include "kgamesequence.moc"
+
+#include "kplayer.h"
+#include "kgame.h"
+
+KGameSequence::KGameSequence() : TQObject()
+{
+ mGame = 0;
+ mCurrentPlayer = 0;
+}
+
+KGameSequence::~KGameSequence()
+{
+}
+
+void KGameSequence::setGame(KGame* game)
+{
+ mGame = game;
+}
+
+void KGameSequence::setCurrentPlayer(KPlayer* player)
+{
+ mCurrentPlayer = player;
+}
+
+KPlayer *KGameSequence::nextPlayer(KPlayer *last,bool exclusive)
+{
+ kdDebug(11001) << "=================== NEXT PLAYER =========================="<<endl;
+ if (!game())
+ {
+   kdError() << k_funcinfo << "NULL game object" << endl;
+   return 0;
+ }
+ unsigned int minId,nextId,lastId;
+ KPlayer *nextplayer, *minplayer;
+ if (last)
+ {
+   lastId = last->id();
+ }
+ else
+ {
+   lastId = 0;
+ }
+
+ kdDebug(11001) << "nextPlayer: lastId="<<lastId<<endl;
+
+ // remove when this has been checked
+ minId = 0x7fff;  // we just need a very large number...properly MAX_UINT or so would be ok...
+ nextId = minId;
+ nextplayer = 0;
+ minplayer = 0;
+
+ KPlayer *player;
+ for (player = game()->playerList()->first(); player != 0; player=game()->playerList()->next() )
+ {
+   // Find the first player for a cycle
+   if (player->id() < minId)
+   {
+     minId=player->id();
+     minplayer=player;
+   }
+   if (player==last)
+   {
+     continue;
+   }
+   // Find the next player which is bigger than the current one
+   if (player->id() > lastId && player->id() < nextId)
+   {
+     nextId=player->id();
+     nextplayer=player;
+   }
+ }
+
+ // Cycle to the beginning
+ if (!nextplayer)
+ {
+   nextplayer=minplayer;
+ }
+
+ kdDebug(11001) << k_funcinfo << " ##### lastId=" << lastId << " exclusive="
+        << exclusive << "  minId=" << minId << " nextid=" << nextId
+        << " count=" << game()->playerList()->count()  << endl;
+ if (nextplayer)
+ {
+   nextplayer->setTurn(true,exclusive);
+ }
+ else
+ {
+   return 0;
+ }
+ return nextplayer;
+}
+
+// Per default we do not do anything
+int KGameSequence::checkGameOver(KPlayer*)
+{
+ return 0;
+}
+/*
+ * vim: et sw=2
+ */
diff --git a/libtdegames/kgame/kgamesequence.h b/libtdegames/kgame/kgamesequence.h
new file mode 100644
index 00000000..8047c642
--- /dev/null
+++ b/libtdegames/kgame/kgamesequence.h
@@ -0,0 +1,88 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMESEQUENCE_H_
+#define __KGAMESEQUENCE_H_
+
+#include <tqobject.h>
+
+class KPlayer;
+class KGame;
+
+/**
+ * This class takes care of round or move management as well of the gameover
+ * condition. It is especially used for round based games. For these games @ref
+ * nextPlayer and @ref checkGameOver are the most important methods.
+ *
+ * You can subclass KGameSequence and use @ref KGame::setGameSequence to use
+ * your own rules. Note that @ref KGame will take ownership and therefore will
+ * delete the object on destruction.
+ * @short Round/move management class
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ **/
+class KGameSequence : public TQObject
+{
+	Q_OBJECT
+  TQ_OBJECT
+public:
+	KGameSequence();
+	virtual ~KGameSequence();
+
+	/**
+	 * Select the next player in a turn based game. In an asynchronous game this
+	 * function has no meaning. Overwrite this function for your own game sequence.
+	 * Per default it selects the next player in the playerList
+	 */
+	virtual KPlayer* nextPlayer(KPlayer *last, bool exclusive = true);
+
+	virtual void setCurrentPlayer(KPlayer* p);
+
+	/**
+	 * @return The @ref KGame object this sequence is for, or NULL if none.
+	 **/
+	KGame* game() const { return mGame; }
+
+	KPlayer* currentPlayer() const { return mCurrentPlayer; }
+
+	/**
+	 * Set the @ref KGame object for this sequence. This is called
+	 * automatically by @ref KGame::setGameSequence and you should not call
+	 * it.
+	 **/
+	void setGame(KGame* game);
+
+	/**
+	 * Check whether the game is over. The default implementation always
+	 * returns 0.
+	 *
+	 * @param player the player who made the last move
+	 * @return anything else but 0 is considered as game over
+	**/
+	virtual int checkGameOver(KPlayer *player);
+
+private:
+	KGame* mGame;
+	KPlayer* mCurrentPlayer;
+};
+
+#endif
+
diff --git a/libtdegames/kgame/kgameversion.h b/libtdegames/kgame/kgameversion.h
new file mode 100644
index 00000000..c3147525
--- /dev/null
+++ b/libtdegames/kgame/kgameversion.h
@@ -0,0 +1,54 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
+    Copyright (C) 2003 Martin Heni (martin@heni-online.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEVERSION_H__
+#define __KGAMEVERSION_H__
+
+/**
+ * In this file you find a couple of defines that indicate whether a specific
+ * feature or function is present in this version of the KGame library.
+ *
+ * You don't need this for KDE CVS, but for games that live outside of KDE CVS
+ * it may be very helpful and a lot easier than writing configure scripts for
+ * this task.
+ *
+ * All defines are prefixed with KGAME_ to avoid conflicts.
+ **/
+
+// KGame::savegame() didn't exist in KDE 3.0
+#define KGAME_HAVE_KGAME_SAVEGAME 1
+
+// KGameNetwork::port(), KMessageIO::peerPort() and friends were added in KDE 3.2
+#define KGAME_HAVE_KGAME_PORT 1
+
+// KGameNetwork::hostName(), KMessageIO::peerName() and friends were added in KDE 3.2
+#define KGAME_HAVE_KGAME_HOSTNAME 1
+
+// KGameSequence class was added in KDE 3.2
+#define KGAME_HAVE_KGAMESEQUENCE 1
+
+// KGame::addPlayer() needs to assign an ID to new players, otherwise network is
+// broken. this is done in KDE 3.2.
+#define KGAME_HAVE_FIXED_ADDPLAYER_ID 1
+
+#endif
+
diff --git a/libtdegames/kgame/kmessageclient.cpp b/libtdegames/kgame/kmessageclient.cpp
new file mode 100644
index 00000000..0233884a
--- /dev/null
+++ b/libtdegames/kgame/kmessageclient.cpp
@@ -0,0 +1,373 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include <kdebug.h>
+#include <stdio.h>
+
+#include <tqbuffer.h>
+#include <tqtimer.h>
+
+#include "kmessageio.h"
+#include "kmessageserver.h"
+
+#include "kmessageclient.h"
+
+class KMessageClientPrivate
+{
+public:
+  KMessageClientPrivate ()
+    : adminID (0), connection (0)
+  {}
+
+  ~KMessageClientPrivate ()
+  {
+    delete connection;
+  }
+
+  TQ_UINT32 adminID;
+  TQValueList <TQ_UINT32> clientList;
+  KMessageIO *connection;
+
+  bool isLocked;
+  TQValueList <TQByteArray> delayedMessages;
+};
+
+KMessageClient::KMessageClient (TQObject *parent, const char *name)
+  : TQObject (parent, name)
+{
+  d = new KMessageClientPrivate ();
+  d->isLocked = false;
+}
+
+KMessageClient::~KMessageClient ()
+{
+  d->delayedMessages.clear();
+  delete d;
+}
+
+// -- setServer stuff
+
+void KMessageClient::setServer (const TQString &host, TQ_UINT16 port)
+{
+  setServer (new KMessageSocket (host, port));
+}
+
+void KMessageClient::setServer (KMessageServer *server)
+{
+  KMessageDirect *serverIO = new KMessageDirect ();
+  setServer (new KMessageDirect (serverIO));
+  server->addClient (serverIO);
+}
+
+void KMessageClient::setServer (KMessageIO *connection)
+{
+  if (d->connection)
+  {
+    delete d->connection;
+    kdDebug (11001) << k_funcinfo << ": We are changing the server!" << endl;
+  }
+
+  d->connection = connection;
+  if (connection )
+  {
+    connect (connection, TQT_SIGNAL (received(const TQByteArray &)),
+             this, TQT_SLOT (processIncomingMessage(const TQByteArray &)));
+    connect (connection, TQT_SIGNAL (connectionBroken()),
+             this, TQT_SLOT (removeBrokenConnection ()));
+  }
+}
+
+// -- id stuff
+
+TQ_UINT32 KMessageClient::id () const
+{
+  return (d->connection) ? d->connection->id () : 0;
+}
+
+bool KMessageClient::isAdmin () const
+{
+  return id() != 0 && id() == adminId();
+}
+
+TQ_UINT32 KMessageClient::adminId () const
+{
+  return d->adminID;
+}
+
+const TQValueList <TQ_UINT32> &KMessageClient::clientList() const
+{
+  return d->clientList;
+}
+
+bool KMessageClient::isConnected () const
+{
+  return d->connection && d->connection->isConnected();
+}
+
+bool KMessageClient::isNetwork () const
+{
+  return isConnected() ? d->connection->isNetwork() : false;
+}
+
+TQ_UINT16 KMessageClient::peerPort () const
+{
+ return d->connection ? d->connection->peerPort() : 0;
+}
+
+TQString KMessageClient::peerName () const
+{
+ return d->connection ? d->connection->peerName() : TQString::tqfromLatin1("localhost");
+}
+
+// --------------------- Sending messages
+
+void KMessageClient::sendServerMessage (const TQByteArray &msg)
+{
+  if (!d->connection)
+  {
+    kdWarning (11001) << k_funcinfo << ": We have no connection yet!" << endl;
+    return;
+  }
+  d->connection->send (msg);
+}
+
+void KMessageClient::sendBroadcast (const TQByteArray &msg)
+{
+  TQByteArray sendBuffer;
+  TQBuffer buffer (sendBuffer);
+  buffer.open (IO_WriteOnly);
+  TQDataStream stream (&buffer);
+
+  stream << static_cast<TQ_UINT32> ( KMessageServer::RETQ_BROADCAST );
+  TQT_TQIODEVICE(&buffer)->writeBlock (msg);
+  sendServerMessage (sendBuffer);
+}
+
+void KMessageClient::sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients)
+{
+  TQByteArray sendBuffer;
+  TQBuffer buffer (sendBuffer);
+  buffer.open (IO_WriteOnly);
+  TQDataStream stream (&buffer);
+
+  stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_FORWARD ) << clients;
+  TQT_TQIODEVICE(&buffer)->writeBlock (msg);
+  sendServerMessage (sendBuffer);
+}
+
+void KMessageClient::sendForward (const TQByteArray &msg, TQ_UINT32 client)
+{
+  sendForward (msg, TQValueList <TQ_UINT32> () << client);
+}
+
+
+// --------------------- Receiving and processing messages
+
+void KMessageClient::processIncomingMessage (const TQByteArray &msg)
+{
+  if (d->isLocked)
+  {
+    d->delayedMessages.append(msg);
+    return;
+  }
+  if (d->delayedMessages.count() > 0)
+  {
+    d->delayedMessages.append (msg);
+    TQByteArray first = d->delayedMessages.front();
+    d->delayedMessages.pop_front();
+    processMessage (first);
+  }
+  else
+  {
+    processMessage(msg);
+  }
+}
+
+void KMessageClient::processMessage (const TQByteArray &msg)
+{
+  if (d->isLocked)
+  { // must NOT happen, since we check in processIncomingMessage as well as in processFirstMessage
+    d->delayedMessages.append(msg);
+    return;
+  }
+  TQBuffer in_buffer (msg);
+  in_buffer.open (IO_ReadOnly);
+  TQDataStream in_stream (&in_buffer);
+
+
+  bool unknown = false;
+
+  TQ_UINT32 messageID;
+  in_stream >> messageID;
+  switch (messageID)
+  {
+    case KMessageServer::MSG_BROADCAST:
+      {
+        TQ_UINT32 clientID;
+        in_stream >> clientID;
+        emit broadcastReceived (in_buffer.readAll(), clientID);
+      }
+      break;
+
+    case KMessageServer::MSG_FORWARD:
+      {
+        TQ_UINT32 clientID;
+        TQValueList <TQ_UINT32> tqreceivers;
+        in_stream >> clientID >> tqreceivers;
+        emit forwardReceived (in_buffer.readAll(), clientID, tqreceivers);
+      }
+      break;
+
+    case KMessageServer::ANS_CLIENT_ID:
+      {
+        bool old_admin = isAdmin();
+        TQ_UINT32 clientID;
+        in_stream >> clientID;
+        d->connection->setId (clientID);
+        if (old_admin != isAdmin())
+          emit adminStatusChanged (isAdmin());
+      }
+      break;
+
+    case KMessageServer::ANS_ADMIN_ID:
+      {
+        bool old_admin = isAdmin();
+        in_stream >> d->adminID;
+        if (old_admin != isAdmin())
+          emit adminStatusChanged (isAdmin());
+      }
+      break;
+
+    case KMessageServer::ANS_CLIENT_LIST:
+      {
+        in_stream >> d->clientList;
+      }
+      break;
+
+    case KMessageServer::EVNT_CLIENT_CONNECTED:
+      {
+        TQ_UINT32 id;
+        in_stream >> id;
+
+        if (d->clientList.contains (id))
+          kdWarning (11001) << k_funcinfo << ": Adding a client that already existed!" << endl;
+        else
+          d->clientList.append (id);
+
+        emit eventClientConnected (id);
+      }
+      break;
+
+    case KMessageServer::EVNT_CLIENT_DISCONNECTED:
+      {
+        TQ_UINT32 id;
+        TQ_INT8 broken;
+        in_stream >> id >> broken;
+
+        if (!d->clientList.contains (id))
+          kdWarning (11001) << k_funcinfo << ": Removing a client that doesn't exist!" << endl;
+        else
+          d->clientList.remove (id);
+
+        emit eventClientDisconnected (id, bool (broken));
+      }
+      break;
+
+    default:
+      unknown = true;
+  }
+
+  if (!unknown && !in_buffer.atEnd())
+    kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
+
+  emit serverMessageReceived (msg, unknown);
+
+  if (unknown)
+    kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
+}
+
+void KMessageClient::processFirstMessage()
+{
+  if (d->isLocked)
+  {
+    return;
+  }
+  if (d->delayedMessages.count() == 0)
+  {
+    kdDebug(11001) << k_funcinfo << ": no messages delayed" << endl;
+    return;
+  }
+  TQByteArray first = d->delayedMessages.front();
+  d->delayedMessages.pop_front();
+  processMessage (first);
+}
+
+void KMessageClient::removeBrokenConnection ()
+{
+  kdDebug (11001) << k_funcinfo << ": timer single shot for removeBrokenConnection"<<this << endl;
+  // MH We cannot directly delete the socket. otherwise TQSocket crashes
+  TQTimer::singleShot( 0, this, TQT_SLOT(removeBrokenConnection2()) );
+  return;
+}
+
+
+void KMessageClient::removeBrokenConnection2 ()
+{
+  kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object"<<this << endl;
+
+  emit aboutToDisconnect(id());
+  delete d->connection;
+  d->connection = 0;
+  d->adminID = 0;
+  emit connectionBroken();
+  kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object DONE" << endl;
+}
+
+void KMessageClient::disconnect ()
+{
+  kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object" << endl;
+
+  emit aboutToDisconnect(id());
+  delete d->connection;
+  d->connection = 0;
+  d->adminID = 0;
+  emit connectionBroken();
+  kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object DONE" << endl;
+}
+
+void KMessageClient::lock ()
+{
+  d->isLocked = true;
+}
+
+void KMessageClient::unlock ()
+{
+  d->isLocked = false;
+  for (unsigned int i = 0; i < d->delayedMessages.count(); i++)
+  {
+    TQTimer::singleShot(0, this, TQT_SLOT(processFirstMessage()));
+  }
+}
+
+unsigned int KMessageClient::delayedMessageCount() const
+{
+  return d->delayedMessages.count();
+}
+
+#include "kmessageclient.moc"
diff --git a/libtdegames/kgame/kmessageclient.h b/libtdegames/kgame/kmessageclient.h
new file mode 100644
index 00000000..8a35234d
--- /dev/null
+++ b/libtdegames/kgame/kmessageclient.h
@@ -0,0 +1,423 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KMESSAGECLIENT_H__
+#define __KMESSAGECLIENT_H__
+
+#include <tqobject.h>
+#include <tqstring.h>
+#include <tqvaluelist.h>
+
+class KMessageIO;
+class KMessageServer;
+class KMessageClientPrivate;
+
+/**
+  @short A client to connect to a KMessageServer
+
+  This class implements a client that can connect to a KMessageServer object.
+  It can be used to exchange messages between clients.
+
+  Usually you will connect the signals broadcastReceived and forwardReceived to
+  some specific slots. In these slot methods you can analyse the messages that are
+  sent to you from other clients.
+
+  To send messages to other clients, use the methods sendBroadcast() (to send to all
+  clients) or sendForward() (to send to a list of selected clients).
+
+  If you want to communicate with the KMessageServer object directly (on a more low
+  level base), use the method sendServerMessage to send a command to the server and
+  connect to the signal serverMessageReceived to see all the incoming messages.
+  In that case the messages must be of the format specified in KMessageServer.
+  @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
+*/
+class KMessageClient : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+
+  /**
+    Constructor.
+    Creates an unconnected KMessageClient object. Use setServer() later to connect to a
+    KMessageServer object.
+  */
+  KMessageClient (TQObject *parent = 0, const char *name = 0);
+
+  /**
+    Destructor.
+    Disconnects from the server, if any connection was established.
+  */
+  ~KMessageClient ();
+
+  /**
+    @return The client ID of this client. Every client that is connected to a KMessageServer
+    has a unique ID number.
+
+    NOTE: As long as the object is not yet connected to the server, and as long as the server
+    hasn't sent the client ID, this method returns 0.
+  */
+  TQ_UINT32 id () const;
+
+  /**
+    @return Whether or not this client is the server admin.
+    One of the clients connected to the server is the admin and can administrate the server
+    (set maximum number of clients, remove clients, ...).
+
+    If you use admin commands without being the admin, these commands are simply ignored by
+    the server.
+
+    NOTE: As long as you are not connected to a server, this method returns false.
+  */
+  bool isAdmin () const;
+
+  /**
+    @return The ID of the admin client on the message server.
+  */
+  TQ_UINT32 adminId() const;
+
+  /**
+    @return The list of the IDs of all the message clients connected to the message server.
+  */
+  const TQValueList <TQ_UINT32> &clientList() const;
+
+  /**
+    Connects the client to (another) server.
+
+    Tries to connect via a TCP/IP socket to a KMessageServer object
+    on the given host, listening on the specified port.
+
+    If we were already connected, the old connection is closed.
+    @param host The name of the host to connect to. Must be either a hostname which can 
+    be resolved to an IP or just an IP
+    @param port The port to connect to
+  */
+  void setServer (const TQString &host, TQ_UINT16 port);
+
+  /**
+    Connects the client to (another) server.
+
+    Connects to the given server, using KMessageDirect.
+    (The server object has to be in the same process.)
+
+    If we were already connected, the old connection is closed.
+    @param server The KMessageServer to connect to
+  */
+  void setServer (KMessageServer *server);
+
+  /**
+   * Corresponds to setServer(0); but also emits the connectionBroken signal
+   **/
+  void disconnect();
+
+  /**
+    Connects the client to (another) server.
+
+    To use this method, you have to create a KMessageIO object with new (indeed you must
+    create an instance of a subclass of KMessageIO, e.g. KMessageSocket or KMessageDirect).
+    This object must already be connected to the new server.
+
+    Calling this method disconnects any earlier connection, and uses the new KMessageIO
+    object instead. This object gets owned by the KMessageClient object, so don't delete
+    or manipulate it afterwards.
+
+    With this method it is possible to change the server on the fly. But be careful that
+    there are no important messages from the old server not yet delivered.
+
+    NOTE: It is very likely that we will have another client ID on the new server. The
+    value returned by clientID may be a little outdated until the new server tells us
+    our new ID.
+
+    NOTE: The two other setServer methods are for convenience. If you use them, you don't
+    have to create a KMessageIO object yourself.
+  */
+  virtual void setServer (KMessageIO *connection);
+
+  /**
+    @return True, if a connection to a KMessageServer has been started, and if the
+    connection is ready for transferring data. (It will return false e.g. as long as
+    a socket connection hasn't been established, and it will also return false after
+    a socket connection is broken.)
+  */
+  bool isConnected () const;
+
+  /**
+    @return TRUE if isConnected() is true AND this is not a local (like
+    KMessageDirect) connection.
+  */
+  bool isNetwork () const;
+
+  /**
+    @return 0 if isConnected() is FALSE, otherwise the port number this client is
+    connected to. See also KMessageIO::peerPort and TQSocket::peerPort.
+    @since 3.2
+  */
+  TQ_UINT16 peerPort () const;
+
+  /**
+    @since 3.2
+    @return "localhost" if isConnected() is FALSE, otherwise the hostname this client is
+    connected to. See also KMessageIO::peerName() and TQSocket::peerName().
+  */
+  TQString peerName() const;
+
+  /**
+    Sends a message to the KMessageServer. If we are not yet connected to one, nothing
+    happens.
+
+    Use this method to send a low level command to the server. It has to be in the
+    format specified in KMessageServer.
+
+    If you want to send messages to other clients, you should use sendBroadcast()
+    and sendForward().
+    @param msg The message to be sent to the server. Must be in the format specified in KMessageServer.
+  */
+  void sendServerMessage (const TQByteArray &msg);
+
+  /**
+    Sends a message to all the clients connected to the server, including ourself.
+    The message consists of an arbitrary block of data with arbitrary length.
+
+    All the clients will receive an exact copy of this block of data, which will be
+    processed in their processBroadcast() method.
+    @param msg The message to be sent to the clients
+  */
+  //AB: processBroadcast doesn't exist!! is processIncomingMessage meant?
+  void sendBroadcast (const TQByteArray &msg);
+
+  /**
+    Sends a message to all the clients in a list.
+    The message consists of an arbitrary block of data with arbitrary length.
+
+    All clients will receive an exact copy of this block of data, which will be
+    processed in their processForward() method.
+
+    If the list contains client IDs that are not defined, they are ignored. If
+    it contains an ID several times, that client will receive the message several
+    times.
+
+    To send a message to the admin of the KMessageServer, you can use 0 as clientID,
+    instead of using the real client ID.
+    @param msg The message to be sent to the clients
+    @param clients A list of clients the message should be sent to
+  */
+  //AB: processForward doesn't exist!! is processIncomingMessage meant?
+  void sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients);
+
+  /**
+    Sends a message to a single client. This is a convenieance method. It calls
+    sendForward (const TQByteArray &msg, const TQValueList &ltTQ_UINT32> &clients)
+    with a list containing only one client ID.
+
+    To send a message to the admin of the  KMessageServer, you can use 0 as clientID,
+    instead of using the real client ID.
+    @param msg The message to be sent to the client
+    @param client The id of the client the message shall be sent to
+  */
+  void sendForward (const TQByteArray &msg, TQ_UINT32 client);
+
+  /**
+    Once this function is called no message will be received anymore.
+    processIncomingMessage() gets delayed until unlock() is called.
+
+    Note that all messages are still received, but their delivery (like
+    broadcastReceived()) get delayed only.
+   */
+  void lock();
+
+  /**
+    Deliver every message that was delayed by lock() and actually deliver 
+    all messages that get received from now on.
+   */
+  void unlock();
+
+  /**
+    @return The number of messages that got delayed since lock() was called
+   */
+  unsigned int delayedMessageCount() const;
+
+signals:
+  /**
+    This signal is emitted when the client receives a broadcast message from the
+    KMessageServer, sent by another client. Connect to this signal to analyse the
+    received message and do the right reaction.
+
+    senderID contains the ID of the client that sent the broadcast message. You can
+    use this e.g. to send a reply message to only that client. Or you can use it
+    to ignore broadcast messages that were sent by yourself:
+
+    \code
+      void myObject::myBroadcastSlot (const TQByteArray &msg, TQ_UINT32 senderID)
+      {
+        if (senderID == ((KMessageClient *)sender())->id())
+          return;
+        ...
+      }
+    \endcode
+    @param msg The message that has been sent to us
+    @param senderID The ID of the client which sent the message
+  */
+  void broadcastReceived (const TQByteArray &msg, TQ_UINT32 senderID);
+
+  /**
+    This signal is emitted when the client receives a forward message from the
+    KMessageServer, sent by another client. Connect to this signal to analyse the
+    received message and do the right reaction.
+
+    senderID contains the ID of the client that sent the broadcast message. You can
+    use this e.g. to send a reply message to only that client.
+
+    tqreceivers contains the list of the clients that got the message. (If this list
+    only contains one number, this will be your client ID, and it was exclusivly
+    sent to you.)
+
+    If you don't want to distinguish between broadcast and forward messages and
+    treat them the same, you can connect forwardReceived signal to the
+    broadcastReceived signal. (Yes, that's possible! You can connect a TQt signal to
+    a TQt signal, and the second one can have less parameters.)
+
+    \code
+      KMessageClient *client = new KMessageClient ();
+      connect (client, TQT_SIGNAL (forwardReceived (const TQByteArray &, TQ_UINT32, const TQValueList <TQ_UINT32>&)),
+               client, TQT_SIGNAL (broadcastReceived (const TQByteArray &, TQ_UINT32)));
+    \endcode
+
+    Then connect the broadcast signal to your slot that analyzes the message.
+    @param msg The message that has been sent to us
+    @param senderID The ID of the client which sent the message
+    @param tqreceivers All clients which receive this message
+  */
+  void forwardReceived (const TQByteArray &msg, TQ_UINT32 senderID, const TQValueList <TQ_UINT32> &tqreceivers);
+
+  /**
+    This signal is emitted when the connection to the KMessageServer is broken.
+    Reasons for this can be: a network error, a server breakdown, or you were just kicked
+    from the server.
+
+    When this signal is sent, the connection is already lost and the client is unconnected.
+    You can connect to another server by calling setServer() afterwards. But keep in mind that
+    some important messages might have vanished.
+  */
+  void connectionBroken ();
+
+  /**
+    This signal is emitted right before the client disconnects. It can be used
+    to this store the id of the client which is about to be lost.
+  */
+  void aboutToDisconnect(TQ_UINT32 id);
+
+  /**
+    This signal is emitted when this client becomes the admin client or when it loses
+    the admin client status. Connect to this signal if you have to do any initialization
+    or cleanup.
+    @param isAdmin Whether we are now admin or not
+  */
+  void adminStatusChanged (bool isAdmin);
+
+  /**
+    This signal is emitted when another client has connected
+    to the server. Connect to this method if that clients needs initialization.
+    This should usually only be done in one client, e.g. the admin client.
+    @param clientID The ID of the client that has newly connectd.
+  */
+  void eventClientConnected (TQ_UINT32 clientID);
+
+  /**
+    This signal is emitted when the server has lost the
+    connection to one of the clients (This could be because of a bad internet connection
+    or because the client disconnected on purpose).
+    @param clientID The ID of the client that has disconnected
+    @param broken true if it was disconnected because of a network error
+  */
+  void eventClientDisconnected (TQ_UINT32 clientID, bool broken);
+
+  /**
+    This signal is emitted on every message that came from the server. You can connect to this
+    signal to see the messages directly. They are in the format specified in KMessageServer.
+
+    @param msg The message that has been sent to us
+    @param unknown True when KMessageClient didn't recognize the message, i.e. it contained an unknown
+    message ID. If you want to add additional message types to the client, connect to this signal,
+    and if unknown is true, analyse the message by yourself. If you recognized the message,
+    set unknown to false (Otherwise a debug message will be printed).
+  */
+  //AB: maybe add a setNoEmit() so that the other signals can be deactivated?
+  //Could be a performance benefit (note: KMessageClient is a time critical
+  //class!!!)
+  void serverMessageReceived (const TQByteArray &msg, bool &unknown);
+
+protected:
+  /**
+    This slot is called from processIncomingMessage or 
+    processFirstMessage, depending on whether the client is locked or a delayed
+    message is still here (see lock)
+
+    It processes the message and analyses it. If it is a broadcast or a forward message from
+    another client, it emits the signal processBroadcast or processForward accordingly.
+
+    If you want to treat additional server messages, you can overwrite this method. Don't
+    forget to call processIncomingMessage of your superclass!
+
+    At the moment, the following server messages are interpreted:
+
+    MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
+    @param msg The incoming message
+  */
+
+  virtual void processMessage (const TQByteArray& msg);
+
+protected slots:
+  /**
+    This slot is called from the signal KMessageIO::received whenever a message from the
+    KMessageServer arrives.
+
+    It processes the message and analyses it. If it is a broadcast or a forward message from
+    another client, it emits the signal processBroadcast or processForward accordingly.
+
+    If you want to treat additional server messages, you can overwrite this method. Don't
+    forget to call processIncomingMessage() of your superclass!
+
+    At the moment, the following server messages are interpreted:
+
+    MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
+    @param msg The incoming message
+  */
+  virtual void processIncomingMessage (const TQByteArray &msg);
+
+  /**
+    Called from unlock() (using TQTimer::singleShot) until all delayed 
+    messages are delivered.
+  */
+  void processFirstMessage();
+
+  /**
+    This slot is called from the signal KMessageIO::connectionBroken.
+
+    It deletes the internal KMessageIO object, and resets the client to default
+    values. To connect again to another server, use setServer.
+  */
+  virtual void removeBrokenConnection ();
+  void removeBrokenConnection2 ();
+
+private:
+  KMessageClientPrivate *d;
+};
+
+#endif
diff --git a/libtdegames/kgame/kmessageio.cpp b/libtdegames/kgame/kmessageio.cpp
new file mode 100644
index 00000000..b35382b0
--- /dev/null
+++ b/libtdegames/kgame/kmessageio.cpp
@@ -0,0 +1,482 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+/*
+     KMessageIO class and subclasses KMessageSocket and KMessageDirect
+*/
+
+#include "kmessageio.h"
+#include <tqsocket.h>
+#include <kdebug.h>
+#include <kprocess.h>
+#include <tqfile.h>
+
+// ----------------------- KMessageIO -------------------------
+
+KMessageIO::KMessageIO (TQObject *parent, const char *name)
+  : TQObject (parent, name), m_id (0)
+{}
+
+KMessageIO::~KMessageIO ()
+{}
+
+void KMessageIO::setId (TQ_UINT32 id)
+{
+  m_id = id;
+}
+
+TQ_UINT32 KMessageIO::id ()
+{
+  return m_id;
+}
+
+// ----------------------KMessageSocket -----------------------
+
+KMessageSocket::KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent, 
+const char *name)
+  : KMessageIO (parent, name)
+{
+  mSocket = new TQSocket ();
+  mSocket->connectToHost (host, port);
+  initSocket ();
+}
+
+KMessageSocket::KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject 
+*parent, const char *name)
+  : KMessageIO (parent, name)
+{
+  mSocket = new TQSocket ();
+  mSocket->connectToHost (host.toString(), port);
+  initSocket ();
+}
+
+KMessageSocket::KMessageSocket (TQSocket *socket, TQObject *parent, const char 
+*name)
+  : KMessageIO (parent, name)
+{
+  mSocket = socket;
+  initSocket ();
+}
+
+KMessageSocket::KMessageSocket (int socketFD, TQObject *parent, const char 
+*name)
+  : KMessageIO (parent, name)
+{
+  mSocket = new TQSocket ();
+  mSocket->setSocket (socketFD);
+  initSocket ();
+}
+
+KMessageSocket::~KMessageSocket ()
+{
+  delete mSocket;
+}
+
+bool KMessageSocket::isConnected () const
+{
+  return mSocket->state() == TQSocket::Connection;
+}
+
+void KMessageSocket::send (const TQByteArray &msg)
+{
+  TQDataStream str (mSocket);
+  str << TQ_UINT8 ('M');  // magic number for begin of message
+  str.writeBytes (msg.data(), msg.size());  // writes the length (as TQ_UINT32) and the data
+}
+
+void KMessageSocket::processNewData ()
+{
+  if (isRecursive)
+    return;
+  isRecursive = true;
+
+  TQDataStream str (mSocket);
+  while (mSocket->bytesAvailable() > 0)
+  {
+    if (mAwaitingHeader)
+    {
+      // Header = magic number + packet length = 5 bytes
+      if (mSocket->bytesAvailable() < 5)
+      {
+        isRecursive = false;
+        return;
+      }
+
+      // Read the magic number first. If something unexpected is found,
+      // start over again, ignoring the data that was read up to then.
+
+      TQ_UINT8 v;
+      str >> v;
+      if (v != 'M')
+      {
+        kdWarning(11001) << k_funcinfo << ": Received unexpected data, magic number wrong!" << endl;
+        continue;
+      }
+
+      str >> mNextBlockLength;
+      mAwaitingHeader = false;
+    }
+    else
+    {
+      // Data not completely read => wait for more
+      if (mSocket->bytesAvailable() < (TQ_ULONG) mNextBlockLength)
+      {
+        isRecursive = false;
+        return;
+      }
+
+      TQByteArray msg (mNextBlockLength);
+      str.readRawBytes (msg.data(), mNextBlockLength);
+
+      // send the received message
+      emit received (msg);
+
+      // Waiting for the header of the next message
+      mAwaitingHeader = true;
+    }
+  }
+
+  isRecursive = false;
+}
+
+void KMessageSocket::initSocket ()
+{
+  connect (mSocket, TQT_SIGNAL (error(int)), TQT_SIGNAL (connectionBroken()));
+  connect (mSocket, TQT_SIGNAL (connectionClosed()), TQT_SIGNAL (connectionBroken()));
+  connect (mSocket, TQT_SIGNAL (readyRead()), TQT_SLOT (processNewData()));
+  mAwaitingHeader = true;
+  mNextBlockLength = 0;
+  isRecursive = false;
+}
+
+TQ_UINT16 KMessageSocket::peerPort () const
+{
+  return mSocket->peerPort();
+}
+
+TQString KMessageSocket::peerName () const
+{
+  return mSocket->peerName();
+}
+
+// ----------------------KMessageDirect -----------------------
+
+KMessageDirect::KMessageDirect (KMessageDirect *partner, TQObject *parent, 
+const char *name)
+  : KMessageIO (parent, name), mPartner (0)
+{
+  // 0 as first parameter leaves the object unconnected
+  if (!partner)
+    return;
+
+  // Check if the other object is already connected
+  if (partner && partner->mPartner)
+  {
+    kdWarning(11001) << k_funcinfo << ": Object is already connected!" << endl;
+    return;
+  }
+
+  // Connect from us to that object
+  mPartner = partner;
+
+  // Connect the other object to us
+  partner->mPartner = this;
+}
+
+KMessageDirect::~KMessageDirect ()
+{
+  if (mPartner)
+  {
+    mPartner->mPartner = 0;
+    emit mPartner->connectionBroken();
+  }
+}
+
+bool KMessageDirect::isConnected () const
+{
+  return mPartner != 0;
+}
+
+void KMessageDirect::send (const TQByteArray &msg)
+{
+  if (mPartner)
+    emit mPartner->received (msg);
+  else
+    kdError(11001) << k_funcinfo << ": Not yet connected!" << endl;
+}
+
+
+// ----------------------- KMessageProcess ---------------------------
+
+KMessageProcess::~KMessageProcess()
+{
+  kdDebug(11001) << "@@@KMessageProcess::Delete process" << endl;
+  if (mProcess)
+  {
+    mProcess->kill();
+    delete mProcess;
+    mProcess=0;
+    // Remove not send buffers
+    mQueue.setAutoDelete(true);
+    mQueue.clear();
+    // Maybe todo: delete mSendBuffer
+  }
+}
+KMessageProcess::KMessageProcess(TQObject *parent, TQString file) : KMessageIO(parent,0)
+{
+  // Start process
+  kdDebug(11001) << "@@@KMessageProcess::Start process" << endl;
+  mProcessName=file;
+  mProcess=new KProcess;
+  int id=0;
+  *mProcess << mProcessName << TQString("%1").tqarg(id);
+  kdDebug(11001) << "@@@KMessageProcess::Init:Id= " << id << endl;
+  kdDebug(11001) << "@@@KMessgeProcess::Init:Processname: " << mProcessName << endl;
+  connect(mProcess, TQT_SIGNAL(receivedStdout(KProcess *, char *, int )),
+                        this, TQT_SLOT(slotReceivedStdout(KProcess *, char * , int )));
+  connect(mProcess, TQT_SIGNAL(receivedStderr(KProcess *, char *, int )),
+                        this, TQT_SLOT(slotReceivedStderr(KProcess *, char * , int )));
+  connect(mProcess, TQT_SIGNAL(processExited(KProcess *)),
+                        this, TQT_SLOT(slotProcessExited(KProcess *)));
+  connect(mProcess, TQT_SIGNAL(wroteStdin(KProcess *)),
+                        this, TQT_SLOT(slotWroteStdin(KProcess *)));
+  mProcess->start(KProcess::NotifyOnExit,KProcess::All);
+  mSendBuffer=0;
+  mReceiveCount=0;
+  mReceiveBuffer.resize(1024);
+}
+bool KMessageProcess::isConnected() const
+{
+  kdDebug(11001) << "@@@KMessageProcess::Is conencted" << endl;
+  if (!mProcess) return false;
+  return mProcess->isRunning();
+}
+void KMessageProcess::send(const TQByteArray &msg)
+{
+  kdDebug(11001) << "@@@KMessageProcess:: SEND("<<msg.size()<<") to process" << endl;
+  unsigned int size=msg.size()+2*sizeof(long);
+
+  char *tmpbuffer=new char[size];
+  long *p1=(long *)tmpbuffer;
+  long *p2=p1+1;
+  kdDebug(11001)  << "p1="<<p1 << "p2="<< p2 << endl;
+  memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
+  *p1=0x4242aeae;
+  *p2=size;
+  
+  TQByteArray *buffer=new TQByteArray();
+  buffer->assign(tmpbuffer,size);
+  // buffer->duplicate(msg);
+  mQueue.enqueue(buffer);
+  writeToProcess(); 
+}
+void KMessageProcess::writeToProcess()
+{
+  // Previous send ok and item in queue
+  if (mSendBuffer || mQueue.isEmpty()) return ;
+  mSendBuffer=mQueue.dequeue();
+  if (!mSendBuffer) return ;
+
+  // write it out to the process
+  //  kdDebug(11001) << " @@@@@@ writeToProcess::SEND to process " << mSendBuffer->size() << " BYTE " << endl;
+  //  char *p=mSendBuffer->data();
+  //  for (int i=0;i<16;i++) printf("%02x ",(unsigned char)(*(p+i)));printf("\n");
+  mProcess->writeStdin(mSendBuffer->data(),mSendBuffer->size());
+
+}
+void KMessageProcess::slotWroteStdin(KProcess * )
+{
+  kdDebug(11001) << k_funcinfo << endl;
+  if (mSendBuffer)
+  {
+    delete mSendBuffer;
+    mSendBuffer=0;
+  }
+  writeToProcess();
+}
+
+void KMessageProcess::slotReceivedStderr(KProcess * proc, char *buffer, int buflen)
+{
+  int pid=0;
+  int len;
+  char *p;
+  char *pos;
+//  kdDebug(11001)<<"############# Got stderr " << buflen << " bytes" << endl;
+
+  if (!buffer || buflen==0) return ; 
+  if (proc) pid=proc->pid();
+
+
+  pos=buffer;
+  do
+  {
+    p=(char *)memchr(pos,'\n',buflen);
+    if (!p) len=buflen;
+    else len=p-pos;
+
+    TQByteArray a;
+    a.setRawData(pos,len);
+    TQString s(a);
+    kdDebug(11001) << "PID" <<pid<< ":" << s << endl;
+    a.resetRawData(pos,len);
+    if (p) pos=p+1;
+    buflen-=len+1;
+  }while(buflen>0);
+}
+
+
+void KMessageProcess::slotReceivedStdout(KProcess * , char *buffer, int buflen)
+{
+  kdDebug(11001) << "$$$$$$ " << k_funcinfo << ": Received " << buflen << " bytes over inter process communication" << endl;
+
+  // TODO Make a plausibility check on buflen to avoid memory overflow
+  while (mReceiveCount+buflen>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
+  memcpy(mReceiveBuffer.data()+mReceiveCount,buffer,buflen);
+  mReceiveCount+=buflen;
+
+  // Possbile message
+  while (mReceiveCount>2*sizeof(long))
+  {
+    long *p1=(long *)mReceiveBuffer.data();
+    long *p2=p1+1;
+    unsigned int len;
+    if (*p1!=0x4242aeae)
+    {
+      kdDebug(11001) << k_funcinfo << ": Cookie error...transmission failure...serious problem..." << endl;
+//      for (int i=0;i<mReceiveCount;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
+    }
+    len=(int)(*p2);
+    if (len<2*sizeof(long))
+    {
+      kdDebug(11001) << k_funcinfo << ": Message size error" << endl;
+      break;
+    }
+    if (len<=mReceiveCount)
+    {
+      kdDebug(11001) << k_funcinfo << ": Got message with len " << len << endl;
+
+      TQByteArray msg;
+    //  msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+      msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+      emit received(msg);
+     // msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+      // Shift buffer
+      if (len<mReceiveCount)
+      {
+        memmove(mReceiveBuffer.data(),mReceiveBuffer.data()+len,mReceiveCount-len);
+      }
+      mReceiveCount-=len;
+    }
+    else break;
+  }
+}
+
+void KMessageProcess::slotProcessExited(KProcess * /*p*/)
+{
+  kdDebug(11001) << "Process exited (slot)" << endl;
+  emit connectionBroken();
+  delete mProcess;
+  mProcess=0;
+}
+
+
+// ----------------------- KMessageFilePipe ---------------------------
+KMessageFilePipe::KMessageFilePipe(TQObject *parent,TQFile *readfile,TQFile *writefile) : KMessageIO(parent,0)
+{
+  mReadFile=readfile;
+  mWriteFile=writefile;
+  mReceiveCount=0;
+  mReceiveBuffer.resize(1024);
+}
+
+KMessageFilePipe::~KMessageFilePipe()
+{
+}
+
+bool KMessageFilePipe::isConnected () const
+{
+  return (mReadFile!=0)&&(mWriteFile!=0);
+}
+
+void KMessageFilePipe::send(const TQByteArray &msg)
+{
+  unsigned int size=msg.size()+2*sizeof(long);
+
+  char *tmpbuffer=new char[size];
+  long *p1=(long *)tmpbuffer;
+  long *p2=p1+1;
+  memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
+  *p1=0x4242aeae;
+  *p2=size;
+  
+  TQByteArray buffer;
+  buffer.assign(tmpbuffer,size);
+  mWriteFile->writeBlock(buffer);
+  mWriteFile->flush();
+  /*
+  fprintf(stderr,"+++ KMessageFilePipe:: SEND(%d to parent) realsize=%d\n",msg.size(),buffer.size());
+  for (int i=0;i<buffer.size();i++) fprintf(stderr,"%02x ",buffer[i]);fprintf(stderr,"\n");
+  fflush(stderr);
+  */
+}
+
+void KMessageFilePipe::exec()
+{
+
+  // According to BL: Blocking read is ok
+  // while(mReadFile->atEnd()) { usleep(100); }
+
+   int ch=mReadFile->getch();
+
+   while (mReceiveCount>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
+   mReceiveBuffer[mReceiveCount]=(char)ch;
+   mReceiveCount++;
+
+   // Change for message 
+   if (mReceiveCount>=2*sizeof(long))
+   {
+     long *p1=(long *)mReceiveBuffer.data();
+     long *p2=p1+1;
+     unsigned int len;
+     if (*p1!=0x4242aeae)
+     {
+       fprintf(stderr,"KMessageFilePipe::exec:: Cookie error...transmission failure...serious problem...\n");
+//       for (int i=0;i<16;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
+     }
+     len=(int)(*p2);
+     if (len==mReceiveCount)
+     {
+       //fprintf(stderr,"KMessageFilePipe::exec:: Got Message with len %d\n",len);
+
+       TQByteArray msg;
+       //msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+       msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+       emit received(msg);
+       //msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
+       mReceiveCount=0;
+     }
+   }
+   
+
+   return ;
+
+  
+}
+
+#include "kmessageio.moc"
diff --git a/libtdegames/kgame/kmessageio.h b/libtdegames/kgame/kmessageio.h
new file mode 100644
index 00000000..326476ff
--- /dev/null
+++ b/libtdegames/kgame/kmessageio.h
@@ -0,0 +1,421 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+/*
+     KMessageIO class and subclasses KMessageSocket and KMessageDirect
+*/
+
+#ifndef _KMESSAGEIO_H_
+#define _KMESSAGEIO_H_
+
+#include <tqcstring.h>
+#include <tqhostaddress.h>
+#include <tqobject.h>
+#include <tqstring.h>
+#include <tqptrqueue.h>
+#include <tqfile.h>
+#include <kdebug.h>
+
+class TQSocket;
+class KProcess;
+//class TQFile;
+
+
+/**
+  This abstract base class represents one end of a message connections
+  between two clients. Each client has one object of a subclass of
+  KMessageIO. Calling /e send() on one object will emit the signal
+  /e received() on the other object, and vice versa.
+
+  For each type of connection (TCP/IP socket, COM port, direct connection
+  within the same class) a subclass of KMessageIO must be defined that
+  implements the pure virtual methods /e send() and /e isConnected(),
+  and sends the signals. (See /e KMessageSocket for an example implementation.)
+
+  Two subclasses are already included: /e KMessageSocket (connection using
+  TCP/IP sockets) and /e KMessageDirect (connection using method calls, both
+  sides must be within the same process).
+*/
+
+class KMessageIO : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+  /**
+   * The usual TQObject constructor, does nothing else.
+   **/
+  KMessageIO (TQObject *parent = 0, const char *name = 0);
+
+  /**
+   * The usual destructor, does nothing special.
+   **/
+  ~KMessageIO ();
+
+  /**
+  * The runtime idendifcation
+  */
+  virtual int rtti() const {return 0;}
+
+  /**
+   * @return Whether this KMessageIO is a network IO or not.
+   **/
+  //virtual bool isNetwork () const = 0;
+  virtual bool isNetwork () const
+  {
+   kdError(11001) << "Calling PURE virtual isNetwork...BAD" << endl;
+   return false;
+  }
+
+  /**
+    This method returns the status of the object, whether it is already
+    (or still) connected to another KMessageIO object or not.
+
+    This is a pure virtual method, so it has to be implemented in a subclass
+    of KMessageIO.
+  */
+  //virtual bool isConnected () const = 0;
+  virtual bool isConnected () const
+  {
+   kdError(11001) << "Calling PURE virtual isConencted...BAD" << endl;
+   return false;
+  }
+
+  /**
+    Sets the ID number of this object. This number can for example be used to
+    distinguish several objects in a server.
+
+    NOTE: Sometimes it is useful to let two connected KMessageIO objects
+    have the same ID number. You have to do so yourself, KMessageIO doesn't
+    change this value on its own!
+  */
+  void setId (TQ_UINT32 id);
+
+  /**
+    Queries the ID of this object.
+  */
+  TQ_UINT32 id ();
+
+  /**
+    @since 3.2
+    @return 0 in the default implementation. Reimplemented in @ref KMessageSocket.
+  */
+  virtual TQ_UINT16 peerPort () const { return 0; }
+
+  /**
+    @since 3.2
+    @return "localhost" in the default implementation. Reimplemented in @ref KMessageSocket
+  */
+  virtual TQString peerName () const { return TQString::tqfromLatin1("localhost"); }
+
+
+signals:
+  /**
+    This signal is emitted when /e send() on the connected KMessageIO
+    object is called. The parameter contains the same data array in /e msg
+    as was used in /e send().
+  */
+  void received (const TQByteArray &msg);
+
+  /**
+    This signal is emitted when the connection is closed. This can be caused
+    by a hardware error (e.g. broken internet connection) or because the other
+    object was killed.
+
+    Note: Sometimes a broken connection can be undetected for a long time,
+    or may never be detected at all. So don't rely on this signal!
+  */
+  void connectionBroken ();
+
+public slots:
+
+  /**
+    This slot sends the data block in /e msg to the connected object, that will
+    emit /e received().
+
+    For a concrete class, you have to subclass /e KMessageIO and overwrite this
+    method. In the subclass, implement this method as an ordinary method, not
+    as a slot! (Otherwise another slot would be defined. It would work, but uses
+    more memory and time.) See /e KMessageSocket for an example implementation.
+  */
+  virtual void send (const TQByteArray &msg) = 0;
+
+protected:
+  TQ_UINT32 m_id;
+};
+
+
+/**
+  This class implements the message communication using a TCP/IP socket. The
+  object can connect to a server socket, or can use an already connected socket.
+*/
+
+class KMessageSocket : public KMessageIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+  /**
+    Connects to a server socket on /e host with /e port. host can be an
+    numerical (e.g. "192.168.0.212") or symbolic (e.g. "wave.peter.org")
+    IP address. You can immediately use the /e sendSystem() and
+    /e sendBroadcast() methods. The messages are stored and sent to the
+    receiver after the connection is established.
+
+    If the connection could not be established (e.g. unknown host or no server
+    socket at this port), the signal /e connectionBroken is emitted.
+  */
+  KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent = 0,
+                  const char *name = 0);
+
+  /**
+    Connects to a server socket on /e host with /e port. You can immediately
+    use the /e sendSystem() and /e sendBroadcast() methods. The messages are
+    stored and sent to the receiver after the connection is established.
+
+    If the connection could not be established (e.g. unknown host or no server
+    socket at this port), the signal /e connectionBroken is emitted.
+  */
+  KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject *parent = 0,
+                  const char *name = 0);
+
+  /**
+    Uses /e socket to do the communication.
+
+    The socket should already be connected, or at least be in /e connecting
+    state.
+
+    Note: The /e socket object is then owned by the /e KMessageSocket object.
+    So don't use it otherwise any more and don't delete it. It is deleted
+    together with this KMessageSocket object. (Use 0 as parent for the TQSocket
+    object t ensure it is not deleted.)
+  */
+  KMessageSocket (TQSocket *socket, TQObject *parent = 0, const char *name = 0);
+
+  /**
+    Uses the socket specified by the socket descriptor socketFD to do the
+    communication. The socket must already be connected.
+
+    This constructor can be used with a TQServerSocket within the (pure
+    virtual) method /e newConnection.
+
+    Note: The socket is then owned by the /e KMessageSocket object. So don't
+    manipulate the socket afterwards, especially don't close it. The socket is
+    automatically closed when KMessageSocket is deleted.
+  */
+  KMessageSocket (int socketFD, TQObject *parent = 0, const char *name = 0);
+
+  /**
+    Destructor, closes the socket.
+  */
+  ~KMessageSocket ();
+
+  /**
+  * The runtime idendifcation
+  */
+  virtual int rtti() const {return 1;}
+
+  /**
+    @since 3.2
+    @return The port that this object is connected to. See TQSocket::peerPort
+  */
+  virtual TQ_UINT16 peerPort () const;
+
+  /**
+    @since 3.2
+    @return The hostname this object is connected to. See TQSocket::peerName.
+  */
+  virtual TQString peerName () const;
+
+  /**
+    @return TRUE as this is a network IO.
+  */
+  bool isNetwork() const { return true; }
+
+  /**
+    Returns true if the socket is in state /e connected.
+  */
+  bool isConnected () const;
+
+  /**
+    Overwritten slot method from KMessageIO.
+
+    Note: It is not declared as a slot method, since the slot is already
+    defined in KMessageIO as a virtual method.
+  */
+  void send (const TQByteArray &msg);
+
+protected slots:
+  virtual void processNewData ();
+
+protected:
+  void initSocket ();
+  TQSocket *mSocket;
+  bool mAwaitingHeader;
+  TQ_UINT32 mNextBlockLength;
+
+  bool isRecursive;  // workaround for "bug" in TQSocket, TQt 2.2.3 or older
+};
+
+
+/**
+  This class implements the message communication using function calls
+  directly. It can only be used when both sides of the message pipe are
+  within the same process. The communication is very fast.
+
+  To establish a communication, you have to create two instances of
+  KMessageDirect, the first one with no parameters in the constructor,
+  the second one with the first as parameter:
+
+  /code
+    KMessageDirect *peer1, *peer2;
+    peer1 = new KMessageDirect ();       // unconnected
+    peer2 = new KMessageDirect (peer1);  // connect with peer1
+  /endcode
+
+  The connection is only closed when one of the instances is deleted.
+*/
+
+class KMessageDirect : public KMessageIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+  /**
+    Creates an object and connects it to the object given in the first
+    parameter. Use 0 as first parameter to create an unconnected object,
+    that is later connected.
+
+    If that object is already connected, the object remains unconnected.
+  */
+  KMessageDirect (KMessageDirect *partner = 0, TQObject *parent = 0, const char
+*name = 0);
+
+  /**
+    Destructor, closes the connection.
+  */
+  ~KMessageDirect ();
+
+  /**
+  * The runtime idendifcation
+  */
+  virtual int rtti() const {return 2;}
+
+
+  /**
+    @return FALSE as this is no network IO.
+  */
+  bool isNetwork() const { return false; }
+
+  /**
+    Returns true, if the object is connected to another instance.
+
+    If you use the first constructor, the object is unconnected unless another
+    object is created with this one as parameter.
+
+    The connection can only be closed by deleting one of the objects.
+  */
+  bool isConnected () const;
+
+  /**
+    Overwritten slot method from KMessageIO.
+
+    Note: It is not declared as a slot method, since the slot is already
+    defined in KMessageIO as a virtual method.
+  */
+  void send (const TQByteArray &msg);
+
+protected:
+  KMessageDirect *mPartner;
+};
+
+class KMessageProcess : public KMessageIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+  public:
+    KMessageProcess(TQObject *parent, TQString file);
+    ~KMessageProcess();
+    bool isConnected() const;
+    void send (const TQByteArray &msg);
+    void writeToProcess();
+
+    /**
+      @return FALSE as this is no network IO.
+    */
+    bool isNetwork() const { return false; }
+
+  /**
+  * The runtime idendifcation
+  */
+  virtual int rtti() const {return 3;}
+
+
+
+  public slots:
+  void  slotReceivedStdout(KProcess *proc, char *buffer, int buflen);
+  void  slotReceivedStderr(KProcess *proc, char *buffer, int buflen);
+  void  slotProcessExited(KProcess *p);
+  void  slotWroteStdin(KProcess *p);
+
+  private:
+    TQString mProcessName;
+    KProcess *mProcess;
+    TQPtrQueue <TQByteArray> mQueue;
+    TQByteArray *mSendBuffer;
+    TQByteArray mReceiveBuffer;
+    unsigned int mReceiveCount;
+};
+
+class KMessageFilePipe : public KMessageIO
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+  public:
+    KMessageFilePipe(TQObject *parent,TQFile *readFile,TQFile *writeFile);
+    ~KMessageFilePipe();
+    bool isConnected() const;
+    void send (const TQByteArray &msg);
+    void exec();
+
+    /**
+      @return FALSE as this is no network IO.
+    */
+    bool isNetwork() const { return false; }
+
+  /**
+  * The runtime idendifcation
+  */
+  virtual int rtti() const {return 4;}
+
+
+
+  private:
+    TQFile *mReadFile;
+    TQFile *mWriteFile;
+    TQByteArray mReceiveBuffer;
+    unsigned int mReceiveCount;
+};
+
+#endif
diff --git a/libtdegames/kgame/kmessageserver.cpp b/libtdegames/kgame/kmessageserver.cpp
new file mode 100644
index 00000000..80df9207
--- /dev/null
+++ b/libtdegames/kgame/kmessageserver.cpp
@@ -0,0 +1,515 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include <tqiodevice.h>
+#include <tqbuffer.h>
+#include <tqptrlist.h>
+#include <tqptrqueue.h>
+#include <tqtimer.h>
+#include <tqvaluelist.h>
+
+#include <kdebug.h>
+
+#include "kmessageio.h"
+#include "kmessageserver.h"
+
+// --------------- internal class KMessageServerSocket
+
+KMessageServerSocket::KMessageServerSocket (TQ_UINT16 port, TQObject *parent)
+  : TQServerSocket (port, 0, parent)
+{
+}
+
+KMessageServerSocket::~KMessageServerSocket ()
+{
+}
+
+void KMessageServerSocket::newConnection (int socket)
+{
+  emit newClientConnected (new KMessageSocket (socket));
+}
+
+// ---------------- class for storing an incoming message
+
+class MessageBuffer
+{
+  public:
+    MessageBuffer (TQ_UINT32 clientID, const TQByteArray &messageData)
+      : id (clientID), data (messageData) { }
+    ~MessageBuffer () {}
+    TQ_UINT32 id;
+    TQByteArray data;
+};
+
+// ---------------- KMessageServer's private class
+
+class KMessageServerPrivate
+{
+public:
+  KMessageServerPrivate()
+    : mMaxClients (-1), mGameId (1), mUniqueClientNumber (1), mAdminID (0), mServerSocket (0)
+  {
+    mClientList.setAutoDelete (true);
+    mMessageQueue.setAutoDelete (true);
+  }
+
+  int mMaxClients;
+  int mGameId;
+  TQ_UINT16 mCookie;
+  TQ_UINT32 mUniqueClientNumber;
+  TQ_UINT32 mAdminID;
+
+  KMessageServerSocket* mServerSocket;
+
+  TQPtrList <KMessageIO> mClientList;
+  TQPtrQueue <MessageBuffer> mMessageQueue;
+  TQTimer mTimer;
+  bool mIsRecursive;
+};
+
+
+// ------------------ KMessageServer
+
+KMessageServer::KMessageServer (TQ_UINT16 cookie,TQObject* parent)
+  : TQObject(parent, 0)
+{
+  d = new KMessageServerPrivate;
+  d->mIsRecursive=false;
+  d->mCookie=cookie;
+  connect (&(d->mTimer), TQT_SIGNAL (timeout()),
+           this, TQT_SLOT (processOneMessage()));
+  kdDebug(11001) << "CREATE(KMessageServer="
+		<< this
+		<< ") cookie="
+		<< d->mCookie
+		<< " sizeof(this)="
+		<< sizeof(KMessageServer)
+		<< endl;
+}
+
+KMessageServer::~KMessageServer()
+{
+  kdDebug(11001) << k_funcinfo << "this=" << this << endl;
+  Debug();
+  stopNetwork();
+  deleteClients();
+  delete d;
+  kdDebug(11001) << k_funcinfo << " done" << endl;
+}
+
+//------------------------------------- TCP/IP server stuff
+
+bool KMessageServer::initNetwork (TQ_UINT16 port)
+{
+  kdDebug(11001) << k_funcinfo << endl;
+
+  if (d->mServerSocket)
+  {
+    kdDebug (11001) << k_funcinfo << ": We were already offering connections!" << endl;
+    delete d->mServerSocket;
+  }
+
+  d->mServerSocket = new KMessageServerSocket (port);
+  d->mIsRecursive = false;
+
+  if (!d->mServerSocket || !d->mServerSocket->ok())
+  {
+    kdError(11001) << k_funcinfo << ": Serversocket::ok() == false" << endl;
+    delete d->mServerSocket;
+    d->mServerSocket=0;
+    return false;
+  }
+
+  kdDebug (11001) << k_funcinfo << ": Now listening to port "
+                  << d->mServerSocket->port() << endl;
+  connect (d->mServerSocket, TQT_SIGNAL (newClientConnected (KMessageIO*)),
+           this, TQT_SLOT (addClient (KMessageIO*)));
+  return true;
+}
+
+TQ_UINT16 KMessageServer::serverPort () const
+{
+  if (d->mServerSocket)
+    return d->mServerSocket->port();
+  else
+    return 0;
+}
+
+void KMessageServer::stopNetwork()
+{
+  if (d->mServerSocket) 
+  {
+    delete d->mServerSocket;
+    d->mServerSocket = 0;
+  }
+}
+
+bool KMessageServer::isOfferingConnections() const
+{
+  return d->mServerSocket != 0;
+}
+
+//----------------------------------------------- adding / removing clients
+
+void KMessageServer::addClient (KMessageIO* client)
+{
+  TQByteArray msg;
+
+  // maximum number of clients reached?
+  if (d->mMaxClients >= 0 && d->mMaxClients <= clientCount())
+  {
+    kdError (11001) << k_funcinfo << ": Maximum number of clients reached!" << endl;
+    return;
+  }
+
+  // give it a unique ID
+  client->setId (uniqueClientNumber());
+  kdDebug (11001) << k_funcinfo << ": " << client->id() << endl;
+
+  // connect its signals
+  connect (client, TQT_SIGNAL (connectionBroken()),
+           this, TQT_SLOT (removeBrokenClient()));
+  connect (client, TQT_SIGNAL (received (const TQByteArray &)),
+           this, TQT_SLOT (getReceivedMessage (const TQByteArray &)));
+
+  // Tell everyone about the new guest
+  // Note: The new client doesn't get this message!
+  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_CONNECTED) << client->id();
+  broadcastMessage (msg);
+
+  // add to our list
+  d->mClientList.append (client);
+
+  // tell it its ID
+  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_CLIENT_ID) << client->id();
+  client->send (msg);
+
+  // Give it the complete list of client IDs
+  TQDataStream (msg, IO_WriteOnly)  << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
+  client->send (msg);
+
+
+  if (clientCount() == 1)
+  {
+    // if it is the first client, it becomes the admin
+    setAdmin (client->id());
+  }
+  else
+  {
+    // otherwise tell it who is the admin
+    TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID();
+    client->send (msg);
+  }
+
+  emit clientConnected (client);
+}
+
+void KMessageServer::removeClient (KMessageIO* client, bool broken)
+{
+  TQ_UINT32 clientID = client->id();
+  if (!d->mClientList.removeRef (client))
+  {
+    kdError(11001) << k_funcinfo << ": Deleting client that wasn't added before!" << endl;
+    return;
+  }
+
+  // tell everyone about the removed client
+  TQByteArray msg;
+  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_DISCONNECTED) << client->id() << (TQ_INT8)broken;
+  broadcastMessage (msg);
+
+  // If it was the admin, select a new admin.
+  if (clientID == adminID())
+  {
+    if (!d->mClientList.isEmpty())
+      setAdmin (d->mClientList.first()->id());
+    else
+      setAdmin (0);
+  }
+}
+
+void KMessageServer::deleteClients()
+{
+  d->mClientList.clear();
+  d->mAdminID = 0;
+}
+
+void KMessageServer::removeBrokenClient ()
+{
+  if (!sender()->inherits ("KMessageIO"))
+  {
+    kdError (11001) << k_funcinfo << ": sender of the signal was not a KMessageIO object!" << endl;
+    return;
+  }
+
+  KMessageIO *client = (KMessageIO *) sender();
+
+  emit connectionLost (client);
+  removeClient (client, true);
+}
+
+
+void KMessageServer::setMaxClients(int c)
+{
+  d->mMaxClients = c;
+}
+
+int KMessageServer::maxClients() const
+{
+  return d->mMaxClients;
+}
+
+int KMessageServer::clientCount() const
+{
+  return d->mClientList.count();
+}
+
+TQValueList <TQ_UINT32> KMessageServer::clientIDs () const
+{
+  TQValueList <TQ_UINT32> list;
+  for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
+    list.append ((*iter)->id());
+  return list;
+}
+
+KMessageIO* KMessageServer::findClient (TQ_UINT32 no) const
+{
+  if (no == 0)
+    no = d->mAdminID;
+
+  TQPtrListIterator <KMessageIO> iter (d->mClientList);
+  while (*iter)
+  {
+    if ((*iter)->id() == no)
+      return (*iter);
+    ++iter;
+  }
+  return 0;
+}
+
+TQ_UINT32 KMessageServer::adminID () const
+{
+  return d->mAdminID;
+}
+
+void KMessageServer::setAdmin (TQ_UINT32 adminID)
+{
+  // Trying to set the the client that is already admin => nothing to do
+  if (adminID == d->mAdminID)
+    return;
+
+  if (adminID > 0 && findClient (adminID) == 0)
+  {
+    kdWarning (11001) << "Trying to set a new admin that doesn't exist!" << endl;
+    return;
+  }
+
+  d->mAdminID = adminID;
+
+  TQByteArray msg;
+  TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID;
+
+  // Tell everyone about the new master
+  broadcastMessage (msg);
+}
+
+
+//------------------------------------------- ID stuff
+
+TQ_UINT32 KMessageServer::uniqueClientNumber() const
+{
+  return d->mUniqueClientNumber++;
+}
+
+// --------------------- Messages ---------------------------
+
+void KMessageServer::broadcastMessage (const TQByteArray &msg)
+{
+  for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
+    (*iter)->send (msg);
+}
+
+void KMessageServer::sendMessage (TQ_UINT32 id, const TQByteArray &msg)
+{
+  KMessageIO *client = findClient (id);
+  if (client)
+    client->send (msg);
+}
+
+void KMessageServer::sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg)
+{
+  for (TQValueListConstIterator <TQ_UINT32> iter = ids.begin(); iter != ids.end(); ++iter)
+    sendMessage (*iter, msg);
+}
+
+void KMessageServer::getReceivedMessage (const TQByteArray &msg)
+{
+  if (!sender() || !sender()->inherits("KMessageIO"))
+  {
+    kdError (11001) << k_funcinfo << ": slot was not called from KMessageIO!" << endl;
+    return;
+  }
+  //kdDebug(11001) << k_funcinfo << ": size=" << msg.size() << endl;
+  KMessageIO *client = (KMessageIO *) sender();
+  TQ_UINT32 clientID = client->id();
+
+  //TQByteArray *ta=new TQByteArray;
+  //ta->duplicate(msg);
+  //d->mMessageQueue.enqueue (new MessageBuffer (clientID, *ta));
+
+  
+  d->mMessageQueue.enqueue (new MessageBuffer (clientID, msg));
+  if (!d->mTimer.isActive())
+    d->mTimer.start(0); // AB: should be , TRUE i guess
+}
+
+void KMessageServer::processOneMessage ()
+{
+  // This shouldn't happen, since the timer should be stopped before. But only to be sure!
+  if (d->mMessageQueue.isEmpty())
+  {
+    d->mTimer.stop();
+    return;
+  }
+  if (d->mIsRecursive)
+  {
+    return;
+  }
+  d->mIsRecursive = true;
+
+  MessageBuffer *msg_buf = d->mMessageQueue.head();
+
+  TQ_UINT32 clientID = msg_buf->id;
+  TQBuffer in_buffer (msg_buf->data);
+  in_buffer.open (IO_ReadOnly);
+  TQDataStream in_stream (&in_buffer);
+
+  TQByteArray out_msg;
+  TQBuffer out_buffer (out_msg);
+  out_buffer.open (IO_WriteOnly);
+  TQDataStream out_stream (&out_buffer);
+
+  bool unknown = false;
+
+  TQByteArray ttt=in_buffer.buffer();
+  TQ_UINT32 messageID;
+  in_stream >> messageID;
+  //kdDebug(11001) << k_funcinfo << ": got message with messageID=" << messageID << endl;
+  switch (messageID)
+  {
+    case RETQ_BROADCAST:
+      out_stream << TQ_UINT32 (MSG_BROADCAST) << clientID;
+      // FIXME, compiler bug?
+      // this should be okay, since TQBuffer is subclass of TQIODevice! :
+      // out_buffer.writeBlock (in_buffer.readAll());
+      TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
+      broadcastMessage (out_msg);
+      break;
+
+    case RETQ_FORWARD:
+      {
+        TQValueList <TQ_UINT32> clients;
+        in_stream >> clients;
+        out_stream << TQ_UINT32 (MSG_FORWARD) << clientID << clients;
+        // see above!
+        TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
+        sendMessage (clients, out_msg);
+      }
+      break;
+
+    case RETQ_CLIENT_ID:
+      out_stream << TQ_UINT32 (ANS_CLIENT_ID) << clientID;
+      sendMessage (clientID, out_msg);
+      break;
+
+    case RETQ_ADMIN_ID:
+      out_stream << TQ_UINT32 (ANS_ADMIN_ID) << d->mAdminID;
+      sendMessage (clientID, out_msg);
+      break;
+
+    case RETQ_ADMIN_CHANGE:
+      if (clientID == d->mAdminID)
+      {
+        TQ_UINT32 newAdmin;
+        in_stream >> newAdmin;
+        setAdmin (newAdmin);
+      }
+      break;
+
+    case RETQ_REMOVE_CLIENT:
+      if (clientID == d->mAdminID)
+      {
+        TQValueList <TQ_UINT32> client_list;
+        in_stream >> client_list;
+        for (TQValueListIterator <TQ_UINT32> iter = client_list.begin(); iter != client_list.end(); ++iter)
+        {
+          KMessageIO *client = findClient (*iter);
+          if (client)
+            removeClient (client, false);
+          else
+            kdWarning (11001) << k_funcinfo << ": removing non-existing clientID" << endl;
+        }
+      }
+      break;
+
+    case RETQ_MAX_NUM_CLIENTS:
+      if (clientID == d->mAdminID)
+      {
+        TQ_INT32 maximum_clients;
+        in_stream >> maximum_clients;
+        setMaxClients (maximum_clients);
+      }
+      break;
+
+    case RETQ_CLIENT_LIST:
+      {
+        out_stream << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
+        sendMessage (clientID, out_msg);
+      }
+      break;
+
+    default:
+      unknown = true;
+  }
+
+  // check if all the data has been used
+  if (!unknown && !in_buffer.atEnd())
+    kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
+
+  emit messageReceived (msg_buf->data, clientID, unknown);
+
+  if (unknown)
+    kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
+
+  // remove the message, since we are ready with it
+  d->mMessageQueue.remove();
+  if (d->mMessageQueue.isEmpty())
+    d->mTimer.stop();
+  d->mIsRecursive = false;
+}
+
+void KMessageServer::Debug()
+{
+   kdDebug(11001) << "------------------ KMESSAGESERVER -----------------------" << endl;
+   kdDebug(11001) << "MaxClients :   " << maxClients() << endl;
+   kdDebug(11001) << "NoOfClients :  " << clientCount() << endl;
+   kdDebug(11001) << "---------------------------------------------------" << endl;
+}
+
+#include "kmessageserver.moc"
diff --git a/libtdegames/kgame/kmessageserver.h b/libtdegames/kgame/kmessageserver.h
new file mode 100644
index 00000000..9042fca2
--- /dev/null
+++ b/libtdegames/kgame/kmessageserver.h
@@ -0,0 +1,494 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KMESSAGESERVER_H__
+#define __KMESSAGESERVER_H__
+
+#include <tqobject.h>
+#include <tqserversocket.h>
+#include <tqstring.h>
+#include <tqvaluelist.h>
+
+class KMessageIO;
+class KMessageServerPrivate;
+
+/**
+  @short A server for message sending and broadcasting, using TCP/IP connections.
+
+  An object of this class listens for incoming connections via TCP/IP sockets and
+  creates KMessageSocket objects for every established connection. It receives
+  messages from the "clients", analyses them and processes an appropriate
+  reaction.
+
+  You can also use other KMessageIO objects with KMessageServer, not only
+  TCP/IP socket based ones. Use addClient to connect via an object of any
+  KMessageIO subclass. (For clients within the same process, you can e.g. use
+  KMessageDirect.) This object already has to be connected.
+
+  The messages are always packages of an arbitrary length. The format of the messages
+  is given below. All the data is stored and received with TQDataStream, to be
+  platform independant.
+
+  Setting up a KMessageServer can be done like this:
+
+  \code
+    KMessageServer *server = new KMessageServer ();
+    server->initNetwork (TCP/IP-Portnumber);
+  \endcode
+
+  Usually that is everything you will do. There are a lot of public methods to
+  administrate the object (maximum number of clients, finding clients, removing
+  clients, setting the admin client, ...), but this functionality can also
+  be done by messages from the clients. So you can administrate the object completely
+  on remote.
+
+  If you want to extend the Server for your own needs (e.g. additional message types),
+  you can either create a subclass and overwrite the method processOneMessage.
+  (But don't forget to call the method of the superclass!) Or you can connect to
+  the signal messageReceived, and analyse the messages there.
+
+  Every client has a unique ID, so that messages can be sent to another dedicated
+  client or a list of clients.
+
+  One of the clients (the admin) has a special administration right. Some of the
+  administration messages can only be used with him. The admin can give the admin
+  status to another client. You can send a message to the admin by using clientID 0.
+  This is always interpreted as the admin client, independant of its real clientID.
+
+  Here is a list of the messages the KMessageServer understands:
+  &lt;&lt; means, the value is inserted into the TQByteArray using TQDataStream. The
+  messageIDs (RETQ_BROADCAST, ...) are of type TQ_UINT32.
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_BROADCAST ) << raw_data
+
+    When the server receives this message, it sends the following message to
+    ALL connected clients (a broadcast), where the raw_data is left unchanged:
+       TQByteArray << static_cast &lt;TQ_UINT32>( MSG_BROADCAST ) << clientID << raw_data
+       TQ_UINT32 clientID; // the ID of the client that sent the broadcast request
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_FORWARD ) << client_list << raw_data
+    TQValueList &lt;TQ_UINT32> client_list; // list of tqreceivers
+
+    When the server receives this message, it sends the following message to
+    the clients in client_list:
+        TQByteArray << static_cast&lt;TQ_UINT32>( MSG_FORWARD ) << senderID << client_list << raw_data
+        TQ_UINT32 senderID;  // the sender of the forward request
+        TQValueList &lt;TQ_UINT32> client_list; // a copy of the receiver list
+
+    Note: Every client receives the message as many times as he is in the client_list.
+    Note: Since the client_list is sent to all the clients, every client can see who else
+          got the message. If you want to prevent this, send a single RETQ_FORWARD
+          message for every receiver.
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_ID )
+
+    When the server receives this message, it sends the following message to
+    the asking client:
+        TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_ID ) << clientID
+        TQ_UINT32 clientID;  // The ID of the client who asked for it
+
+    Note: This answer is also automatically sent to a new connected client, so that he
+          can store his ID. The ID of a client doesn't change during his lifetime, and is
+          unique for this KMessageServer.
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_ID )
+
+    When the server receives this message, it sends the following message to
+    the asking client:
+        TQByteArray << ANS_ADMIN_ID << adminID
+        TQ_UINT32 adminID;  // The ID of the admin
+
+    Note: This answer is also automatically sent to a new connected client, so that he
+          can see if he is the admin or not. It will also be sent to all connected clients
+          when a new admin is set (see RETQ_ADMIN_CHANGE).
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_CHANGE ) << new_admin
+    TQ_UINT32 new_admin;  // the ID of the new admin, or 0 for no admin
+
+    When the server receives this message, it sets the admin to the new ID. If no client
+    with that ID exists, nothing happens. With new_admin == 0 no client is a admin.
+    ONLY THE ADMIN ITSELF CAN USE THIS MESSAGE!
+
+    Note: The server sends a ANS_ADMIN_ID message to every connected client.
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_REMOVE_CLIENT ) << client_list
+    TQValueList &lt;TQ_UINT32> client_list; // The list of clients to be removed
+
+    When the server receives this message, it removes the clients with the ids stored in
+    client_list, disconnecting the connection to them.
+    ONLY THE ADMIN CAN USE THIS MESSAGE!
+
+    Note: If one of the clients is the admin himself, he will also be deleted.
+          Another client (if any left) will become the new admin.
+
+  - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_MAX_NUM_CLIENTS ) << maximum_clients
+    TQ_INT32 maximum_clients; // The maximum of clients connected, or infinite if -1
+
+    When the server receives this message, it limits the number of clients to the number given,
+    or sets it unlimited for maximum_clients == -1.
+    ONLY THE ADMIN CAN USE THIS MESSAGE!
+
+    Note: If there are already more clients, they are not affected. It only prevents new Clients
+          to be added. To assure this limit, remove clients afterwards (RETQ_REMOVE_CLIENT)
+
+  - TQByteArray  << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_LIST )
+
+    When the server receives this message, it answers by sending a list of IDs of all the clients
+    that are connected at the moment. So it sends the following message to the asking client:
+        TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_LIST ) << clientList
+        TQValueList &lt;TQ_UINT32> clientList;  // The IDs of the connected clients
+
+    Note: This message is also sent to every new connected client, so that he knows the other
+          clients.
+
+  There are two more messages that are sent from the server to the every client automatically
+  when a new client connects or a connection to a client is lost:
+
+        TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_CONNECTED ) << clientID;
+        TQ_UINT32 clientID;   // the ID of the new connected client
+
+        TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_DISCONNECTED ) << clientID;
+        TQ_UINT32 clientID;   // the ID of the client that lost the connection
+        TQ_UINT8 broken;      // 1 if the network connection was closed, 0 if it was disconnected
+                             // on purpose
+
+
+  @author Andreas Beckermann <b_mann@gmx.de>, Burkhard Lehner <Burkhard.Lehner@gmx.de>
+  @version $Id$
+*/
+class KMessageServer : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+    /**
+      MessageIDs for messages from a client to the message server.
+    */
+    enum { 
+            RETQ_BROADCAST = 1, 
+            RETQ_FORWARD,
+            RETQ_CLIENT_ID,
+            RETQ_ADMIN_ID,
+            RETQ_ADMIN_CHANGE,
+            RETQ_REMOVE_CLIENT,
+            RETQ_MAX_NUM_CLIENTS,
+            RETQ_CLIENT_LIST,
+            RETQ_MAX_REQ = 0xffff };
+
+    /**
+     * MessageIDs for messages from the message server to a client.
+     **/
+    enum {
+            MSG_BROADCAST = 101, 
+            MSG_FORWARD, 
+            ANS_CLIENT_ID, 
+            ANS_ADMIN_ID, 
+            ANS_CLIENT_LIST,
+            EVNT_CLIENT_CONNECTED, 
+            EVNT_CLIENT_DISCONNECTED,
+            EVNT_MAX_EVNT = 0xffff
+    };
+
+    /**
+     * Create a KGameNetwork object
+     **/
+    KMessageServer(TQ_UINT16 cookie = 42, TQObject* parent = 0);
+
+    ~KMessageServer();
+
+    /**
+     * Gives debug output of the game status
+     **/
+    virtual void Debug();
+
+//---------------------------------- TCP/IP server stuff
+
+    /**
+     * Starts the Communication server to listen for incoming TCP/IP connections.
+     *
+     * @param port The port on which the service is offered, or 0 to let the
+     * system pick a free port
+     * @return true if it worked
+    */
+    bool initNetwork (TQ_UINT16 port = 0);
+
+    /**
+     * Returns the TCP/IP port number we are listening to for incoming connections.
+     * (This has to be known by other clients so that they can connect to us. It's
+     * especially necessary if you used 0 as port number in initNetwork().
+     * @return the port number
+     **/
+    TQ_UINT16 serverPort () const;
+
+    /**
+     * Stops listening for connections. The already running connections are
+     * not affected.
+     * To listen for connections again call initNetwork again.
+     **/
+    void stopNetwork();
+
+    /**
+     * Are we still offer offering server connections?
+     * @return true, if we are still listening to connections requests
+     **/
+    bool isOfferingConnections() const;
+
+//---------------------------------- adding / removing clients
+
+public slots:
+    /**
+     * Adds a new @ref KMessageIO object to the communication server. This "client"
+     * gets a unique ID.
+     *
+     * This slot method is automatically called for any incoming TCP/IP
+     * connection. You can use it to add other types of connections, e.g.
+     * local connections (KMessageDirect) to the server manually.
+     *
+     * NOTE: The @ref KMessageIO object gets owned by the KMessageServer,
+     * so don't delete or manipulate it afterwards. It is automatically deleted
+     * when the connection is broken or the communication server is deleted.
+     * So, add a @ref KMessageIO object to just ONE KMessageServer.
+     **/
+    void addClient (KMessageIO *);
+
+    /**
+     * Removes the KMessageIO object from the client list and deletes it.
+     * This destroys the connection, if it already was up.
+     * Does NOT emit connectionLost.
+     * Sends an info message to the other clients, that contains the ID of
+     * the removed client and the value of the parameter broken.
+     *
+     * @param io the object to delete and to remove from the client list
+     * @param broken true if the client has lost connection
+     * Mostly used internally. You will probably not need this.
+     **/
+    void removeClient (KMessageIO *io, bool broken);
+
+    /**
+      Deletes all connections to the clients.
+    */
+    void deleteClients();
+
+private slots:
+    /**
+     * Removes the sender object of the signal that called this slot. It is
+     * automatically connected to @ref KMessageIO::connectionBroken.
+     * Emits @ref connectionLost (KMessageIO*), and deletes the @ref KMessageIO object.
+     * Don't call it directly!
+     **/
+    void removeBrokenClient ();
+
+public:
+    /**
+     * sets the maximum number of clients which can connect.
+     * If this number is reached, no more clients can be added.
+     * Setting this number to -1 means unlimited number of clients.
+     *
+     * NOTE: Existing connections are not affected.
+     * So, clientCount > maxClients is possible, if there were already
+     * more clients than allowed before reducing this value.
+     *
+     * @param maxnumber the number of clients
+     **/
+    void setMaxClients(int maxnumber);
+
+    /**
+     * returns the maximum number of clients
+     *
+     * @return the number of clients
+     **/
+    int maxClients() const;
+
+    /**
+     * returns the current number of connected clients.
+     *
+     * @return the number of clients
+     **/
+    int clientCount() const;
+
+    /**
+     * returns a list of the unique IDs of all clients.
+     **/
+    TQValueList <TQ_UINT32> clientIDs() const;
+
+    /**
+     * Find the @ref KMessageIO object to the given client number.
+     * @param no the client number to look for, or 0 to look for the admin
+     * @return address of the client, or 0 if no client with that number exists
+     **/
+    KMessageIO *findClient (TQ_UINT32 no) const;
+
+    /**
+     * Returns the clientID of the admin, if there is a admin, 0 otherwise.
+     *
+     * NOTE: Most often you don't need to know that id, since you can
+     * use clientID 0 to specify the admin.
+     **/
+    TQ_UINT32 adminID() const;
+
+    /**
+     * Sets the admin to a new client with the given ID.
+     * The old admin (if existed) and the new admin will get the ANS_ADMIN message.
+     * If you use 0 as new adminID, no client will be admin.
+     **/
+    void setAdmin (TQ_UINT32 adminID);
+
+
+//------------------------------ ID stuff
+
+    /*
+     * The unique ID of this game
+     *
+     * @return int id
+     **/
+//    int gameId() const;
+
+    /*
+     * Application cookie. this idendifies the game application. It
+     * help to distinguish between e.g. KPoker and KWin4
+     *
+     * @return the application cookie
+     **/
+//    int cookie() const;
+
+//------------------------------ Message stuff
+
+public:
+    /**
+     * Sends a message to all connected clients.
+     * The message is NOT translated in any way. This method calls
+     * @ref KMessageIO::send for every client added.
+     **/
+    virtual void broadcastMessage (const TQByteArray &msg);
+
+    /**
+     * Sends a message to a single client with the given ID.
+     * The message is NOT translated in any way.
+     * If no client with the given id exists, nothing is done.
+     * This is just a convenience method. You could also call
+     * @ref findClient (id)->send(msg) manually, but this method checks for
+     * errors.
+     **/
+    virtual void sendMessage (TQ_UINT32 id, const TQByteArray &msg);
+
+    /**
+     * Sends a message to a list of clients. Their ID is given in ids. If
+     * a client id is given more than once in the list, the message is also
+     * sent several times to that client.
+     * This is just a convenience method. You could also iterate over the
+     * list of IDs.
+     **/
+    virtual void sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg);
+
+protected slots:
+    /**
+     * This slot receives all the messages from the @ref KMessageIO::received signals.
+     * It stores the messages in a queue. The messages are later taken out of the queue
+     * by @ref getReceivedMessage.
+     *
+     * NOTE: It is important that this slot may only be called from the signal
+     * @ref KMessageIO::received, since the sender() object is used to find out
+     * the client that sent the message!
+     **/
+    virtual void getReceivedMessage (const TQByteArray &msg);
+
+    /**
+     * This slot is called whenever there are elements in the message queue. This queue
+     * is filled by @ref getReceivedMessage.
+     * This slot takes one message out of the queue and analyses processes it,
+     * if it recognizes it. (See message types in the description of the class.)
+     * After that, the signal @ref messageReceived is emitted. Connect to that signal if
+     * you want to process other types of messages.
+     **/
+    virtual void processOneMessage ();
+
+//---------------------------- Signals
+
+signals:
+    /**
+     * A new client connected to the game
+     * @param client the client object that connected
+     **/
+    void clientConnected (KMessageIO *client);
+
+    /**
+     * A network connection got broken. Note that the client will automatically get deleted
+     * after this signal is emitted. The signal is not emitted when the client was removed
+     * regularly.
+     *
+     * @param client the client which left the game
+     **/
+    void connectionLost (KMessageIO *client);
+
+    /**
+     * This signal is always emitted when a message from a client is received.
+     *
+     * You can use this signal to extend the communication server without subclassing.
+     * Just connect to this signal and analyse the message, if unknown is true.
+     * If you recognize a message and process it, set unknown to false, otherwise
+     * a warning message is printed.
+     *
+     * @param data the message data
+     * @param clientID the ID of the KMessageIO object that received the message
+     * @param unknown true, if the message type is not known by the KMessageServer
+     **/
+    void messageReceived (const TQByteArray &data, TQ_UINT32 clientID, bool &unknown);
+
+protected:
+    /**
+     * @return A unique number which can be used as the id of a @ref KMessageIO. It is
+     * incremented after every call so if you need the id twice you have to save
+     * it anywhere. It's currently used to initialize newly connected clints only.
+     **/
+    TQ_UINT32 uniqueClientNumber() const;
+
+private:
+    KMessageServerPrivate* d;
+};
+
+
+/**
+  Internal class of KMessageServer. Creates a server socket and waits for
+  connections.
+
+  NOTE: This has to be here in the header file, because it is a subclass from
+  TQObject and has to go through the tqmoc.
+
+  @short An internal class for KServerSocket
+  @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
+*/
+class KMessageServerSocket : public TQServerSocket
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+  KMessageServerSocket (TQ_UINT16 port, TQObject *parent = 0);
+  ~KMessageServerSocket ();
+
+  void newConnection (int socket);
+
+signals:
+  void newClientConnected (KMessageIO *client);
+};
+
+
+
+#endif
diff --git a/libtdegames/kgame/kmessageserver.png b/libtdegames/kgame/kmessageserver.png
new file mode 100644
index 00000000..07fba6c5
Binary files /dev/null and b/libtdegames/kgame/kmessageserver.png differ
diff --git a/libtdegames/kgame/kplayer.cpp b/libtdegames/kgame/kplayer.cpp
new file mode 100644
index 00000000..965f5e83
--- /dev/null
+++ b/libtdegames/kgame/kplayer.cpp
@@ -0,0 +1,446 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+
+#include "kgame.h"
+#include "kgameio.h"
+#include "kplayer.h"
+#include "kgamemessage.h"
+#include "kgamepropertyhandler.h"
+
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <tqbuffer.h>
+
+#include <stdio.h>
+#include <assert.h>
+
+#define KPLAYER_LOAD_COOKIE 7285
+
+class KPlayerPrivate
+{
+public:
+   KPlayerPrivate()
+   {
+      mNetworkPlayer = 0;
+   }
+
+   TQ_UINT32 mId;
+   bool mVirtual; // virtual player
+   int mPriority; // tag for replacement
+
+   KPlayer* mNetworkPlayer; // replacement player
+
+   KGamePropertyHandler mProperties;
+
+// Playerdata
+   KGamePropertyTQString mName;
+   KGamePropertyTQString mGroup;
+};
+
+KPlayer::KPlayer() : TQObject(0,0)
+{
+ init();
+}
+
+KPlayer::KPlayer(KGame* game) : TQObject(0, 0)
+{
+ init();
+ game->addPlayer(this);
+}
+
+void KPlayer::init()
+{
+// note that NO KGame object exists here! so we cannot use KGameProperty::send!
+   kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)="<<sizeof(KPlayer) << endl;
+   kdDebug(11001) << "sizeof(m_Group)="<<sizeof(d->mGroup)<<endl;
+   d = new KPlayerPrivate;
+
+   d->mProperties.registerHandler(KGameMessage::IdPlayerProperty,
+                                  this,TQT_SLOT(sendProperty(int, TQDataStream&, bool*)),
+                                       TQT_SLOT(emitSignal(KGamePropertyBase *)));
+   d->mVirtual=false;
+   mActive=true;
+   mGame=0;
+   d->mId=0; // "0" is always an invalid ID!
+   d->mPriority=0;
+   // I guess we cannot translate the group otherwise no
+   // international conenctions are possible
+
+   mUserId.registerData(KGamePropertyBase::IdUserId, this, i18n("UserId"));
+   mUserId.setLocal(0);
+   d->mGroup.registerData(KGamePropertyBase::IdGroup, this, i18n("Group"));
+   d->mGroup.setLocal(i18n("default"));
+   d->mName.registerData(KGamePropertyBase::IdName, this, i18n("Name"));
+   d->mName.setLocal(i18n("default"));
+
+   mAsyncInput.registerData(KGamePropertyBase::IdAsyncInput, this, i18n("AsyncInput"));
+   mAsyncInput.setLocal(false);
+   mMyTurn.registerData(KGamePropertyBase::IdTurn, this, i18n("myTurn"));
+   mMyTurn.setLocal(false);
+   mMyTurn.setEmittingSignal(true);
+   mMyTurn.setOptimized(false);
+}
+
+KPlayer::~KPlayer()
+{
+  kdDebug(11001) << k_funcinfo << ": this=" << this <<", id=" << this->id() << endl;
+
+  // Delete IODevices
+  KGameIO *input;
+  while((input=mInputList.first()))
+  {
+    delete input;
+  }
+  if (game())
+  {
+    game()->playerDeleted(this);
+  }
+
+// note: mProperties does not use autoDelete or so - user must delete objects
+// himself
+  d->mProperties.clear();
+  delete d;
+//  kdDebug(11001) << k_funcinfo << " done" << endl;
+}
+
+bool KPlayer::forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver,TQ_UINT32 sender)
+{
+  if (!isActive())
+  {
+    return false;
+  }
+  if (!game())
+  {
+    return false;
+  }
+  kdDebug(11001) << k_funcinfo << ": to game sender="<<sender<<"" << "recv="<<receiver <<"msgid="<<msgid << endl;
+  return game()->sendSystemMessage(msg,msgid,receiver,sender);
+}
+
+bool KPlayer::forwardInput(TQDataStream &msg,bool transmit,TQ_UINT32 sender)
+{
+  if (!isActive())
+  {
+    return false;
+  }
+  if (!game())
+  {
+    return false;
+  }
+
+  kdDebug(11001) << k_funcinfo << ": to game playerInput(sender="<<sender<<")" << endl;
+  if (!asyncInput() && !myTurn())
+  {
+    kdDebug(11001) << k_funcinfo << ": rejected cause it is not our turn" << endl;
+    return false;
+  }
+
+  // AB: I hope I remember the usage correctly:
+  // this function is called twice (on sender side) - once with transmit = true
+  // where it sends the input to the comserver and once with transmit = false
+  // where it really looks at the input
+  if (transmit)
+  {
+    kdDebug(11001) << "indirect playerInput" << endl;
+    return game()->sendPlayerInput(msg,this,sender);
+  }
+  else
+  {
+    kdDebug(11001) << "direct playerInput" << endl;
+    return game()->systemPlayerInput(msg,this,sender);
+  }
+}
+
+void KPlayer::setId(TQ_UINT32 newid)
+{
+  // Needs to be after the sendProcess
+  d->mId=newid;
+}
+
+
+void KPlayer::setGroup(const TQString& group)
+{ d->mGroup = group; }
+
+const TQString& KPlayer::group() const
+{ return d->mGroup.value(); }
+
+void KPlayer::setName(const TQString& name)
+{ d->mName = name; }
+
+const TQString& KPlayer::name() const
+{ return d->mName.value(); }
+
+TQ_UINT32 KPlayer::id() const
+{ return d->mId; }
+
+KGamePropertyHandler * KPlayer::dataHandler()
+{ return &d->mProperties; }
+
+void KPlayer::setVirtual(bool v)
+{ d->mVirtual = v; }
+
+bool KPlayer::isVirtual() const
+{ return d->mVirtual;}
+
+void KPlayer::setNetworkPlayer(KPlayer* p)
+{ d->mNetworkPlayer = p; }
+
+KPlayer* KPlayer::networkPlayer() const
+{ return d->mNetworkPlayer; }
+
+int KPlayer::networkPriority() const
+{ return d->mPriority; }
+
+void KPlayer::setNetworkPriority(int p)
+{ d->mPriority = p; }
+
+bool KPlayer::addGameIO(KGameIO *input)
+{
+  if (!input)
+  {
+    return false;
+  }
+  mInputList.append(input); 
+  input->initIO(this); // set player and init device
+  return true;
+}
+
+// input=0, remove all
+bool KPlayer::removeGameIO(KGameIO *targetinput,bool deleteit)
+{
+  kdDebug(11001) << k_funcinfo << ": " << targetinput << " delete=" << deleteit<< endl;
+  bool result=true;
+  if (!targetinput) // delete all
+  {
+    KGameIO *input;
+    while((input=mInputList.first()))
+    {
+      if (input) removeGameIO(input,deleteit);
+    }
+  }
+  else
+  {
+//    kdDebug(11001) << "remove IO " << targetinput << endl;
+    if (deleteit)
+    {
+      delete targetinput;
+    }
+    else
+    {
+      targetinput->setPlayer(0);
+      result=mInputList.remove(targetinput);
+    }
+  }
+  return result;
+}
+
+KGameIO * KPlayer::findRttiIO(int rtti) const
+{
+  TQPtrListIterator<KGameIO> it(mInputList);
+  while (it.current())
+  {
+    if (it.current()->rtti() == rtti)
+    {
+      return it.current();
+    }
+    ++it;
+  }
+  return 0;
+}
+
+int KPlayer::calcIOValue()
+{
+  int value=0;
+  TQPtrListIterator<KGameIO> it(mInputList);
+  while (it.current())
+  {
+    value|=it.current()->rtti();
+    ++it;
+  }
+  return value;
+}
+
+bool KPlayer::setTurn(bool b, bool exclusive)
+{
+  kdDebug(11001) << k_funcinfo << ": " << id() << " (" << this << ") to " << b << endl;
+  if (!isActive())
+  {
+    return false;
+  }
+
+  // if we get to do an exclusive turn all other players are disallowed
+  if (exclusive && b && game())
+  {
+     KPlayer *player;
+     KGame::KGamePlayerList *list=game()->playerList();
+     for ( player=list->first(); player != 0; player=list->next() )
+     {
+       if (player==this)
+       {
+         continue;
+       }
+       player->setTurn(false,false);
+     }
+  }
+
+  // Return if nothing changed
+  mMyTurn = b;
+
+  return true;
+}
+
+bool KPlayer::load(TQDataStream &stream)
+{
+  TQ_INT32 id,priority;
+  stream >> id >> priority;
+  setId(id);
+  setNetworkPriority(priority);
+
+  // Load Player Data
+  //FIXME: maybe set all properties setEmitSignal(false) before?
+  d->mProperties.load(stream);
+
+  TQ_INT16 cookie;
+  stream >> cookie;
+  if (cookie==KPLAYER_LOAD_COOKIE)
+  {
+      kdDebug(11001) << "   Player loaded propertly"<<endl;
+  }
+  else
+  {
+      kdError(11001) << "   Player loading error. probably format error"<<endl;
+  }
+
+  // emit signalLoad(stream);
+  return true;
+}
+
+bool KPlayer::save(TQDataStream &stream)
+{
+  stream << (TQ_INT32)id() << (TQ_INT32)networkPriority();
+
+  d->mProperties.save(stream);
+
+  stream << (TQ_INT16)KPLAYER_LOAD_COOKIE;
+
+  //emit signalSave(stream);
+  return true;
+}
+
+
+void KPlayer::networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender)
+{
+  //kdDebug(11001) << k_funcinfo ": msgid=" << msgid << " sender=" << sender << " we are=" << id() << endl;
+  // PlayerProperties processed
+  bool issender;
+  if (game())
+  {
+    issender=sender==game()->gameId();
+  }
+  else
+  {
+    issender=true;
+  }
+  if (d->mProperties.processMessage(stream,msgid,issender))
+  {
+	return ;
+  }
+  switch(msgid)
+  {
+    case KGameMessage::IdPlayerInput:
+      {
+        kdDebug(11001) << k_funcinfo << ": Got player move "
+	        << "KPlayer (virtual) forwards it to the game object" << endl;
+        forwardInput(stream,false);
+      }
+    break;
+    default:
+        emit signalNetworkData(msgid - KGameMessage::IdUser,
+	        ((TQBuffer*)stream.device())->readAll(),sender,this);
+        kdDebug(11001) << k_funcinfo << ": "
+	        << "User data msgid " << msgid << endl;
+    break;
+  }
+
+}
+
+KGamePropertyBase* KPlayer::findProperty(int id) const
+{
+  return d->mProperties.find(id);
+}
+
+bool KPlayer::addProperty(KGamePropertyBase* data)
+{
+  return d->mProperties.addProperty(data);
+}
+
+void KPlayer::sendProperty(int msgid, TQDataStream& stream, bool* sent)
+{
+  if (game())
+  {
+    bool s = game()->sendPlayerProperty(msgid, stream, id());
+    if (s)
+    {
+      *sent = true;
+    }
+  }
+}
+
+void KPlayer::emitSignal(KGamePropertyBase *me)
+{
+  // Notify KGameIO (Process) for a new turn
+  if (me->id()==KGamePropertyBase::IdTurn)
+  {
+    //kdDebug(11001) << k_funcinfo << ": for KGamePropertyBase::IdTurn " << endl;
+    TQPtrListIterator<KGameIO> it(mInputList);
+    while (it.current())
+    {
+      it.current()->notifyTurn(mMyTurn.value());
+      ++it;
+    }
+  }
+  emit signalPropertyChanged(me,this);
+}
+
+// --------------------- DEBUG --------------------
+void KPlayer::Debug()
+{
+   kdDebug(11001) << "------------------- KPLAYER -----------------------" << endl;
+   kdDebug(11001) << "this:    " << this << endl;
+   kdDebug(11001) << "rtti:    " << rtti() << endl;
+   kdDebug(11001) << "id  :    " << id() << endl;
+   kdDebug(11001) << "Name :   " << name() << endl;
+   kdDebug(11001) << "Group:   " << group() << endl;
+   kdDebug(11001) << "Async:   " << asyncInput() << endl;
+   kdDebug(11001) << "myTurn:  " << myTurn() << endl;
+   kdDebug(11001) << "Virtual: " << isVirtual() << endl;
+   kdDebug(11001) << "Active:  " << isActive() << endl;
+   kdDebug(11001) << "Priority:" << networkPriority() << endl;
+   kdDebug(11001) << "Game   : " << game() << endl;
+   kdDebug(11001) << "#IOs:    " << mInputList.count() << endl;
+   kdDebug(11001) << "---------------------------------------------------" << endl;
+}
+
+#include "kplayer.moc"
diff --git a/libtdegames/kgame/kplayer.h b/libtdegames/kgame/kplayer.h
new file mode 100644
index 00000000..910781f3
--- /dev/null
+++ b/libtdegames/kgame/kplayer.h
@@ -0,0 +1,472 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Martin Heni (martin@heni-online.de)
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KPLAYER_H_
+#define __KPLAYER_H_
+
+#include <tqstring.h>
+#include <tqobject.h>
+#include <tqptrlist.h>
+
+#include "kgameproperty.h"
+#include <kdemacros.h>
+
+class KGame;
+class KGameIO;
+class KGamePropertyBase;
+class KGamePropertyHandler;
+
+class KPlayerPrivate;
+
+/**
+ * @short Base class for a game player
+ *
+ * The KPlayer class is the central player object. It holds
+ * information about the player and is responsible for any
+ * input the player does. For this arbitrary many KGameIO
+ * modules can be plugged into it. Main features are:
+ * - Handling of IO devices
+ * - load/save (mostly handled by KGamePropertyHandler)
+ * - Turn handling (turn based, asynchronous)
+ *
+ * A KPlayer depends on a KGame object. Call KGame::addPlayer() to plug
+ * a KPlayer into a KGame object. Note that you cannot do much with a
+ * KPlayer object before it has been plugged into a KGame. This is because
+ * most properties of KPlayer are KGameProperty which need to send messages
+ * through a KGame object to be changed. 
+ *
+ * A KGameIO represents the input methods of a player and you should make all
+ * player inputs through it. So call something like playerInput->move(4);
+ * instead which should call KGameIO::sendInput() to actually move. This way
+ * you gain a *very* big advantage: you can exchange a KGameIO whenever you
+ * want! You can e.g. remove the KGameIO of a local (human) player and just
+ * replace it by a computerIO on the fly! So from that point on all playerInputs
+ * are done by the computerIO instead of the human player. You also can replace
+ * all network players by computer players when the network connection is broken
+ * or a player wants to quit. 
+ * So remember: use KGameIO whenever possible! A KPlayer should just
+ * contain all data of the player (KGameIO must not!) and several common
+ * functions which are shared by all of your KGameIOs.
+ *
+ */
+class KDE_EXPORT KPlayer : public TQObject
+{
+  Q_OBJECT
+  TQ_OBJECT
+
+public:
+      typedef TQPtrList<KGameIO> KGameIOList;
+
+      // KPlayer(KGame *,KGameIO * input=0);
+      /**
+       * Create a new player object. It will be automatically
+       * deleted if the game it belongs to is deleted.
+       */
+      KPlayer();
+
+      /**
+       * Create a new player object. It will be automatically
+       * deleted if the game it belongs to is deleted. This constructor
+       * automatically adds the player to the game using KGame::addPlayer()
+       */
+      KPlayer(KGame* game);
+
+      virtual ~KPlayer();
+
+      /**
+      * The idendification of the player. Overwrite this in
+      * classes inherting KPlayer to run time identify them.
+      *
+      * @return 0 for default KPlayer.
+      */
+      virtual int rtti() const {return 0;}
+
+      /**
+      * Gives debug output of the game status
+      */
+      void Debug();
+
+      // properties
+      /**
+       * Returns a list of input devices 
+       *
+       * @return list of devices
+       */
+      KGameIOList *ioList() {return &mInputList;}
+
+      /**
+       * sets the game the player belongs to. This
+       * is usually automatically done when adding a
+       * player
+       *
+       * @param game the game
+       */
+      void setGame(KGame *game) {mGame=game;}
+
+      /**
+       * Query to which game the player belongs to
+       *
+       * @return the game
+       */
+      KGame *game() const {return mGame;}
+
+      /**
+       * Set whether this player can make turns/input
+       * all the time (true) or only when it is its
+       * turn (false) as it is used in turn based games
+       *
+       * @param a async=true turn based=false
+       */
+      void setAsyncInput(bool a) {mAsyncInput = a;}
+
+      /**
+       * Query whether this player does asynchronous 
+       * input
+       *
+       * @return true/false
+       */
+      bool asyncInput() const {return mAsyncInput.value();}
+
+      /**
+       * Is this player a virtual player, ie is it 
+       * created by mirroring a real player from another
+       * network game. This mirroring is done autmatically
+       * as soon as a network connection is build and it affects
+       * all players regardless what type
+       *
+       * @return true/false
+       */
+      bool isVirtual() const;
+
+      /**
+       * @internal
+       * Sets whether this player is virtual. This is internally
+       * called
+       *
+       * @param v virtual true/false
+       */
+      void setVirtual(bool v);
+
+      /**
+       * Is this player an active player. An player is usually
+       * inactivated if it is replaced by a network connection.
+       * But this could also be called manually
+       *
+       * @return true/false
+       */
+      bool isActive() const {return mActive;}
+
+      /**
+       * Set an player as active (true) or inactive (false)
+       *
+       * @param v true=active, false=inactive
+       */
+      void setActive(bool v) {mActive=v;}
+
+      /**
+       * Returns the id of the player
+       *
+       * @return the player id
+       */
+      TQ_UINT32 id() const; 
+
+      /* Set the players id. This is done automatically by
+       * the game object when adding a new player!
+       *
+       * @param i the player id
+       */
+      void setId(TQ_UINT32 i);
+
+      /**
+       * Returns the user defined id of the player
+       * This value can be used arbitrary by you to
+       * have some user idendification for your player,
+       * e.g. 0 for a white chess player, 1 for a black 
+       * one. This value is more reliable than the player 
+       * id whcih can even change when you make a network 
+       * connection.
+       *
+       * @return the user defined player id
+       */
+      int userId() const {return mUserId.value();} 
+
+      /* Set the user defined players id.
+       *
+       * @param i the user defined player id
+       */
+      void setUserId(int i) {mUserId = i;}
+
+      /**
+       * Returns whether this player can be replaced by a network
+       * connection player. The name of this function can be 
+       * improved ;-) If you do not overwrite the function to 
+       * select what players shall play in a network the KGame
+       * does an automatic selection based on the networkPriority
+       * This is not a terrible important function at the moment.
+       *
+       * @return true/false
+       */
+      int networkPriority() const;
+
+      /**
+       * Set whether this player can be replaced by a network
+       * player. There are to possible games. The first type
+       * of game has arbitrary many players. As soon as a network
+       * players connects the game runs with more players (not tagged
+       * situation). The other type is e.g. games like chess which
+       * require a constant player number. In a network game situation
+       * you would tag one or both players of all participants. As
+       * soon as the connect the tagged player will then be replaced
+       * by the network partner and it is then controlled over the network.
+       * On connection loss the old situation is automatically restored.
+       *
+       * The name of this function can be improved;-)
+       *
+       * @param b should this player be tagged
+       */
+      void setNetworkPriority(int b);
+
+      /**
+       * Returns the player which got inactivated to allow
+       * this player to be set up via network. Mostly internal
+       * function
+       */
+      KPlayer *networkPlayer() const;
+
+      /**
+       * Sets this network player replacement. Internal stuff 
+       */
+      void setNetworkPlayer(KPlayer *p);
+
+      // A name and group the player belongs to
+      /**
+       * A group the player belongs to. This
+       * Can be set arbitrary by you.
+       */
+      void setGroup(const TQString& group);
+
+      /**
+       * Query the group the player belongs to.
+       */
+      virtual const TQString& group() const;
+
+      /**
+       * Sets the name of the player.
+       * This can be chosen arbitrary.
+       * @param name The player's name
+       */
+      void setName(const TQString& name);
+
+      /**
+       * @return The name of the player.
+       */
+      virtual const TQString& name() const;
+
+
+      // set devices
+      /**
+       * Adds an IO device for the player. Possible KGameIO devices
+       * can either be taken from the existing ones or be self written.
+       * Existing are e.g. Keyboard, Mouse, Computerplayer
+       *
+       * @param input the inut device
+       * @return true if ok
+       */
+      bool addGameIO(KGameIO *input);
+
+      /**
+       * remove (and delete) a game IO device
+       *
+       * The remove IO(s) is/are deleted by default. If
+       * you do not want this set the parameter deleteit to false
+       *
+       * @param input the device to be removed or 0 for all devices
+       * @param deleteit true (default) to delete the device otherwisse just remove it
+       * @return true on ok
+       */
+      bool removeGameIO(KGameIO *input=0,bool deleteit=true);
+
+      /**
+       * Finds the KGameIO devies with the given rtti code.
+       * E.g. find the mouse or network device
+       *
+       * @param rtti the rtti code to be searched for
+       * @return the KGameIO device
+       */
+      KGameIO *findRttiIO(int rtti) const;
+
+      /**
+       * Checks whether this player has a IO device of the
+       * given rtti type
+       *
+       * @param rtti the rtti typed to be checked for
+       * @return true if it exists
+       */
+      bool hasRtti(int rtti) const  {return findRttiIO(rtti)!=0;}
+
+      // Message exchange
+      /**
+       * Forwards input to the game object..internal use only
+       *
+       * This method is used by KGameIO::sendInput(). Use that function
+       * instead to send player inputs!
+       *
+       * This function forwards a player input (see KGameIO classes) to the
+       * game object, see KGame, either to KGame::sendPlayerInput() (if
+       * transmit=true, ie the message has just been created) or to
+       * KGame::playerInput() (if player=false, ie the message *was* sent through
+       * KGame::sendPlayerInput).
+       */
+      virtual bool forwardInput(TQDataStream &msg,bool transmit=true, TQ_UINT32 sender=0);
+
+      /**
+       * Forwards Message to the game object..internal use only
+       */
+      virtual bool forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver=0,TQ_UINT32 sender=0);
+
+      // Game logic
+      /**
+       * is it my turn to go
+       *
+       * @return true/false
+       */
+      bool myTurn() const {return mMyTurn.value();}
+
+      /**
+       * Sets whether this player is the next to turn.
+       * If exclusive is given all other players are set
+       * to setTurn(false) and only this player can move
+       *
+       * @param b true/false
+       * @param exclusive true (default)/ false
+       * @return should be void
+       */
+      bool setTurn(bool b,bool exclusive=true);
+
+
+      // load/save
+     /**
+      * Load a saved player, from file OR network. By default all 
+      * KGameProperty objects in the dataHandler of this player are loaded
+      * and saved when using load or save. If you need to save/load more
+      * you have to replace this function (and save). You will probably
+      * still want to call the default implementation additionally!
+      * 
+      * @param stream a data stream where you can stream the player from
+      *
+      * @return true?
+      */
+      virtual bool load(TQDataStream &stream);
+
+     /**
+      * Save a player to a file OR to network. See also load
+      *
+      * @param stream a data stream to load the player from
+      *
+      * @return true?
+      */
+      virtual bool save(TQDataStream &stream);
+
+      /**
+       * Receives a message
+       * @param msgid The kind of the message. See messages.txt for further
+       * information
+       * @param stream The message itself
+       * @param sender 
+       **/
+      void networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender);
+
+      /**
+       * Searches for a property of the player given its id. 
+       * @param id The id of the property
+       * @return The property with the specified id
+       **/
+      KGamePropertyBase* findProperty(int id) const;
+
+      /**
+       * Adds a property to a player. You would add all
+       * your player specific game data as KGameProperty and
+       * they are automatically saved and exchanged over network.
+       *
+       * @param data The property to be added. Must have an unique id!
+       * @return false if the given id is not valid (ie another property owns
+       * the id) or true if the property could be added successfully
+       **/
+      bool addProperty(KGamePropertyBase* data);
+
+      /**
+       * Calculates a checksum over the IO devices. Can be used to
+       * restore the IO handlers. The value returned is the 'or'ed
+       * value of the KGameIO rtti's. 
+       * this is itnernally used for saving and restorign a player.
+       */
+      int calcIOValue();
+
+       /**
+        * @return the property handler
+        */
+       KGamePropertyHandler* dataHandler();
+
+signals:
+      /**
+       *  The player object got a message which was targeted
+       *  at it but has no default method to process it. This
+       *  means probably a user message. Connecting to this signal
+       *  allowed to process it.
+       */
+       void signalNetworkData(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer *me);
+
+       /**
+        * This signal is emmited if a player property changes its value and
+        * the property is set to notify this change. This is an
+        * important signal as you should base the actions on a reaction
+        * to this property changes.
+        */
+       void signalPropertyChanged(KGamePropertyBase *property,KPlayer *me);
+
+protected slots:
+      /**
+       * Called by KGameProperty only! Internal function!
+       **/
+      void sendProperty(int msgid, TQDataStream& stream, bool* sent);
+      /**
+       * Called by KGameProperty only! Internal function!
+       **/
+      void emitSignal(KGamePropertyBase *me);
+
+
+private:
+      void init();
+
+private:
+      KGame *mGame;
+      bool mActive;      // active player
+      KGameIOList mInputList;
+
+      // GameProperty // AB: I think we can't move them to KPlayerPrivate - inline
+      // makes sense here
+      KGamePropertyBool mAsyncInput;  // async input allowed
+      KGamePropertyBool mMyTurn;      // Is it my turn to play (only useful if not async)?
+      KGamePropertyInt  mUserId;      // a user defined id
+
+      KPlayerPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgame/libtdegames.html b/libtdegames/kgame/libtdegames.html
new file mode 100644
index 00000000..a715a239
--- /dev/null
+++ b/libtdegames/kgame/libtdegames.html
@@ -0,0 +1,187 @@
+<html>
+  <head>
+    <title>Documentation for libtdegames</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+    <H1>Documentation for the classes in libtdegames</H1>
+<!-------------------------------------------------------------------------------->
+    <H3>Design Principles</H3>
+    The library <em>tdegames</em> contains a collection of classes that can be used
+    to develop games using the KDE environment very easily. There are a few
+    principles that were used when developing the library:<P>
+
+    <UL>
+      <LI><b>usable for a big variety of games</b><br>
+          The class <em>KGame</em> provides many features that are needed in many games.
+          It can be used for board games, card games, maze games, simulation games, strategy games and
+          many more.<br>
+          It does not (yet) include special features for realtime games, but can be used there, too.
+      <LI><b>features one-player and multi-player games</b></br>
+          A game developed with this library can easily support any number of simultaneous players.
+          So use it for one-player games (like Tetris or KSame), for two-player games (like TicTacToe
+          or chess) or for games with an arbitrary number of players.
+      <LI><b>computer players can easily be developed</b><br>
+          The class <em>KPlayer</em> represents an abstract player in a game. This can be a
+          human player that gets the input from the mouse or the keyboard. Or it can be a computer
+          player that makes moves by random or with artificial intelligence. All this can be achieved
+          subclassing KPlayer.
+      <LI><b>support for network games transparently</b><br>
+          The class <em>KGame</em> contains lots of features for network game support. Developing
+          a network game using a TCP/IP connection is very easy this way. But the default
+          case is still the local game. So the user should not need to connect to the internet
+          or to select a game server to play a game.
+      <LI><b>support for turn based and for asynchronous games</b><br>
+          You can use this library for turn based games, when only one player can make a move at a time
+          (like most bord games or card games), but also for asynchronous games, when every player can
+          make a move any time (like many action games).
+    </UL>
+<!-------------------------------------------------------------------------------->
+    <H3>The central game class: <em>KGame</em></H3>
+
+    When you want to develop your own KDE game using the KDE games library, you most likely want
+    to use the <em>KGame</em> class. There are two possible ways to extend it to your own needs:
+    Create a subclass and overwrite the virtual methods, or simply create an instance of KGame
+    and connect to the appropriate signals.<P>
+
+    &lt;&lt;more code about KGame, an easy example&gt;&gt;
+
+<!-------------------------------------------------------------------------------->
+    <H3>Network games and related classes</H3>
+
+    One of the main principles in the design of <em>KGame</em> was to make network games possible
+    with a minimum of effort for the game developer.<P>
+
+    A network game is a game with usually several players, that are on different computers. These
+    computers are usually connected to the internet, and all the moves a player does are exchanged
+    over this network.<P>
+
+    The exchange of moves and other information is done using the class <em>KMessageServer</em>.
+    An object of this class is a server that waits for connections. Someone who wants to take part
+    in the game has to connect to this server - usually using an internet socket connection. He does
+    this by creating a <em>KMessageClient</em> object. This object connects to the message server.<P>
+
+    The transfer of data is realised by subclasses of the abstract class <em>KMessageIO</em>. One object
+    of this class is created on the client side, one on the server side. Different types of networks can
+    be supported by creating new subclasses of KMessageIO. There are already two subclasses of KMessageIO:
+    <em>KMessageSocket</em> uses a internet socket connection to transfer the data from the message client
+    to the message server or vice versa. <em>KMessageDirect</em> can be used if both the message server and
+    the message client are within the same process. The data blocks are copied directly to the other side,
+    so the transfer is faster and needs no network bandwidth.<P>
+
+    A typical network game situation could look like this:<P>
+
+    <IMG SRC="kmessageserver.png"><P>
+
+    Here, three KGame object (called message clients) are connected to the KMessageServer object. One
+    is in the same process, so it uses KMessageDirect. The other two use KMessageSocket, so an internet
+    socket connection is used. KGame doesn't talk directly to the message server, but uses a KMessageClient
+    object instead. One of the KMessageClient objects is the admin of the message server. This client has some
+    priviledges. It may e.g. kill the connection to other message clients, or limit the number of clients
+    that may connect.<P>
+
+    The KGame objects are by default all equal. So the usual approach will be that every KGame object will
+    store the complete status of the game, and any change or move will be broadcasted to the other KGame
+    objects, so that they all change the status in identical ways. Sometimes it may be necessary (or just
+    easier to implement) that one KGame object is a <em>game server</em> (i.e. he is repsonsible for everything,
+    he coordinates the complete game and stores the game status), whereas the other KGame objects are
+    only dumb stubs that are used to contact the <em>game server</em>. You can implement both approaches
+    using the message server structure. If you need to elect the KGame object that shall be
+    the game server, you may e.g. use the one that has the KMessageClient that is the admin of the message
+    server. (Of course this is only a suggestion, you can use other approaches.)<P>
+
+    The main principle when developing the message server/client structure was, that the message server
+    doesn't have <em>any</em> idea of the game and its rules that is played. The message server only forwards
+    messages from one message client to the others without interpreting or manipulating the data. So always
+    keep in mind that the message server is <em>not</em> a game server! It does not store any data about
+    the game status. It is only a server for network connections and message broadcasting, <em>not</em>
+    for game purposes. The reason for this principle is, that <em>any</em> game can be played using a
+    KMessageServer on any computer. The computer being the message server doesn't need to know anything
+    about the game that is played on it. So you don't have to install new versions of the game there. Only
+    the clients need to be game specific.<P>
+
+    Usually you don't need to create <em>KMessageServer</em> or <em>KMessageClient</em> objects in your game,
+    since <em>KGame</em> does this for you. There are three different scenarios fo network games that are
+    all supported in <em>KGame</em>:<P>
+
+    <b>Scenario 1: local game</b><P>
+
+    The local game should always be the default state a game should be in. To avoid having this scenario
+    as a special case, <em>KGame</em> automatically creates a KMessageServer object and a KMessageClient
+    object. So every change and every move is sent to the message server and is returned to the KGame
+    object before it is processed. Since the connection between the message client and the message server
+    uses KMessageDirect the data transfer is very fast and wont hurt in most cases.<P>
+
+    <IMG SRC="scenario0.png"><P>
+
+    This is the default situation right after creating the <em>KGame</em> object.<P>
+
+    <b>Scenario 2: network game, started by one player</b><P>
+
+    If one user is bored of playing alone, he can open his game for connections from the outside world.
+    He listens to a TCP/IP socket port (i.e. a number between 0 and 65535). Other players can create
+    KGame objects of their own and connect to this port. They need to know the IP address of that computer
+    and the port number. This situation will have this structure:
+
+    <IMG SRC="scenario1.png"><P>
+
+    The first player has to do something like:<P>
+
+    <PRE>
+      KGame *myGame = new KGame ();
+      // wait for connections on port 12345
+      myGame->offerConnections (12345);
+    </PRE>
+
+    And the other players have to do something like:<P>
+
+    <PRE>
+      KGame *myGame = new KGame ();
+      // connect to the message server
+      myGame->connectToServer ("theServer.theDomain.com", 12345);
+    </PRE>
+
+    This automatically removes the message server in these KGame objects and connects to the given
+    one instead.<P>
+
+    <b>Scenario 3: network game, using a stand alone message server</b><P>
+
+    Sometimes it is not possible to let the message server run on one of the players computer. If e.g. all
+    the players have their computer in a local network that uses masquerading to contact the internet,
+    other computers cannot connect to them since the computer doesn't have a IP address to the outside
+    world. Then the only way to play a network game is to have a standalone KMessageServer object on
+    another server computer (somthing like "games.kde.org" e.g.). Since the KMessageServer isn't game
+    specific at all, every game can be played using it. There doesn't have to be any special software
+    installed on that server computer, only the program creating a KMessageServer object.<P>
+
+    This scenario has some more advantages: The message server can be a well known meeting point to
+    start a game. This way one could play games against other players you never knew before. Furthermore
+    the game is stopped brutally when the program that contains the message server in scenario 2 is
+    quitted. (Migration of message servers is not yet implemented, but may be in the future.) Using a
+    stand alone message server, the players may enter and leave the game as they want.
+
+    <IMG SRC="scenario2.png"><P>
+
+    To create this scenario, a special KMessageServer program has to be started on the computer
+    that shall be the stand alone message server:<P>
+
+    <PRE>
+      % kmessageserver -port=12345
+    </PRE>
+
+    The other games that want to connect have to do this (supposed the stand alone message server
+    has the IP address "games.kde.org"):<P>
+
+    <PRE>
+      KGame *myGame = new KGame ();
+      // connect to the message server
+      myGame->connectToServer ("games.kde.org", 12345);
+    </PRE>
+
+
+
+
+<!-------------------------------------------------------------------------------->
+  </body>
+</html>
\ No newline at end of file
diff --git a/libtdegames/kgame/messages.txt b/libtdegames/kgame/messages.txt
new file mode 100644
index 00000000..c42d2d91
--- /dev/null
+++ b/libtdegames/kgame/messages.txt
@@ -0,0 +1,93 @@
+Message formats of libtdegames:
+-------------------------------
+
+There are two different communication layers, using their own protocols:
+
+ - the message layer (KMessageIO, KMessageServer, KMessageClient)
+
+     This is used to send messages from one client (i.e. KGame object)
+     to an other one, to a group of other clients, or to all the clients
+     connected to the KMessageServer. The messages are arbitrary blocks
+     of data, of an arbitrary length.
+     This layer is an underlying protocol that isn't game specific at all.
+     You shouldn't need to know the message format of the packets. If you
+     want to extend the protocol, have a look into KMessageServer API
+     reference for a complete list of message types.
+
+ - the game layer (KGame, KGameIO, KPlayer)
+
+     This layer uses the message layer to send its specific message packets
+     between the objects of the game.
+     This layer contains the game specific messages (e.g. addPlayer, setupGame).
+     The rest of this file describes this layer.
+
+
+Game Layer Messages:
+--------------------
+
+     Application Cookie   16 Bit
+     Version               8 Bit
+     MsgId                16 Bit
+     SenderId             16 Bit
+     ReceiverId           16 Bit
+     Userdata
+
+The format of the messages is used internally and there is usually no reason why
+you have to know what it is used for. But as usually != always here are some
+comments on the format. Note that KGame is under development and the content of
+this file could be obsolete. Please result the sourcecode for up-to-date
+information.
+Application Cookie is used to identify the application. This prevents a
+chess game from talking to a poker game.
+Version is the version of KNetworkGame, sender and receiver must be of the same
+version.
+  library note: this could be a limitation, as KGame should be backward
+  compatible. Maybe change to version must be >= KNETWORKGAME or something less
+  restrictive
+MsgId specifies the kind of the message data (see below).
+SenderId is the id of the KGame/KPlayer object which sent the message, it is
+coded like this: the lower 10 bits specify a player and the upper bit
+represent the game id shifted by 10 bits. So we get
+Id=playerId | (gameId<<10);
+ReceiverId is the id of the receiver of the message. It can be either
+a player, a game or a broadcast. For a broadcast the Id is set to 0
+in the other cases the coding is as with the senderId
+Userdata is the data of the user (wow ;-))
+
+
+MsgId           UserData
+---------------------------------------------------------
+IdMessage        user defined
+
+IdSetupGame      Q_INT32  isServer
+                 Q_INT32  maxPlayers
+                 Q_INT32  newid (id for the new game)
+                 Q_INT32  cntR (virtual player nunmber)
+                 Q_INT32  cntT (tagged player number)
+                 TODO: Changed
+
+IdContinueSetup: TODO
+
+IdSendPlayer     Q_INT32  omit how many tagged players for replacement
+                 TODO: Changed
+
+IdGameSave       Save(msg)->Load(msg)
+
+IdAddPlayer      rtti
+                 gameid() of the owner
+		 player->Save(msg) -> player->Load(msg)
+
+IdRemovePlayer   Q_INT16  playerid
+
+IdError          Q_INT32  errorcode
+                 QString  errortext
+
+IdGametqStatus     Q_INT32  status
+
+IdPlayerProperty Q_INT16  propertyId
+                 user defined -> the property
+
+IdGameProperty   Q_INT16  propertyId
+                 user defined -> the property
+
+IdPlayerInput    user defined
diff --git a/libtdegames/kgame/scenario0.png b/libtdegames/kgame/scenario0.png
new file mode 100644
index 00000000..4de99b52
Binary files /dev/null and b/libtdegames/kgame/scenario0.png differ
diff --git a/libtdegames/kgame/scenario1.png b/libtdegames/kgame/scenario1.png
new file mode 100644
index 00000000..74af4f6f
Binary files /dev/null and b/libtdegames/kgame/scenario1.png differ
diff --git a/libtdegames/kgame/scenario2.png b/libtdegames/kgame/scenario2.png
new file mode 100644
index 00000000..14ea0a3c
Binary files /dev/null and b/libtdegames/kgame/scenario2.png differ
diff --git a/libtdegames/kgamelcd.cpp b/libtdegames/kgamelcd.cpp
new file mode 100644
index 00000000..cf079a15
--- /dev/null
+++ b/libtdegames/kgamelcd.cpp
@@ -0,0 +1,250 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kgamelcd.h"
+#include "kgamelcd.moc"
+
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqtimer.h>
+
+#include <kglobal.h>
+
+
+//-----------------------------------------------------------------------------
+KGameLCD::KGameLCD(uint nbDigits, TQWidget *parent, const char *name)
+    : TQLCDNumber(nbDigits, parent, name), _htime(800)
+{
+    const TQPalette &p = palette();
+    _fgColor = p.color(TQPalette::Active, TQColorGroup::Foreground);
+    _hlColor = p.color(TQPalette::Active, TQColorGroup::HighlightedText);
+
+    _timer = new TQTimer(this);
+    connect(_timer, TQT_SIGNAL(timeout()), TQT_SLOT(timeout()));
+
+    setFrameStyle(Panel | Plain);
+	setSegmentStyle(Flat);
+
+    displayInt(0);
+}
+
+KGameLCD::~KGameLCD()
+{}
+
+void KGameLCD::setDefaultBackgroundColor(const TQColor &color)
+{
+    TQPalette p = palette();
+    p.setColor(TQColorGroup::Background, color);
+    setPalette(p);
+}
+
+void KGameLCD::setDefaultColor(const TQColor &color)
+{
+    _fgColor = color;
+    TQPalette p = palette();
+    p.setColor(TQColorGroup::Foreground, color);
+    setPalette(p);
+}
+
+void KGameLCD::setHighlightColor(const TQColor &color)
+{
+    _hlColor = color;
+}
+
+void KGameLCD::setLeadingString(const TQString &s)
+{
+    _lead = s;
+    displayInt(0);
+}
+
+void KGameLCD::setHighlightTime(uint time)
+{
+    _htime = time;
+}
+
+void KGameLCD::resetColor()
+{
+    setColor(TQColor());
+}
+
+void KGameLCD::setColor(const TQColor &color)
+{
+    const TQColor &c = (color.isValid() ? color : _fgColor);
+    TQPalette p = palette();
+    p.setColor(TQColorGroup::Foreground, c);
+    setPalette(p);
+}
+
+void KGameLCD::displayInt(int v)
+{
+    int n = numDigits() - _lead.length();
+    display(_lead + TQString::number(v).rightJustify(n));
+}
+
+void KGameLCD::highlight()
+{
+    highlight(true);
+    _timer->start(_htime, true);
+}
+
+void KGameLCD::highlight(bool light)
+{
+    if (light) setColor(_hlColor);
+    else resetColor();
+}
+
+//-----------------------------------------------------------------------------
+KGameLCDClock::KGameLCDClock(TQWidget *parent, const char *name)
+: KGameLCD(5, parent, name)
+{
+    _timerClock = new TQTimer(this);
+    connect(_timerClock, TQT_SIGNAL(timeout()), TQT_SLOT(timeoutClock()));
+}
+
+KGameLCDClock::~KGameLCDClock()
+{}
+
+void KGameLCDClock::timeoutClock()
+{
+    // waiting an hour does not restart timer
+    if ( _min==59 && _sec==59 ) return;
+    _sec++;
+    if (_sec==60) {
+        _min++;
+        _sec = 0;
+    }
+    showTime();
+}
+
+TQString KGameLCDClock::pretty() const
+{
+    TQString sec = TQString::number(_sec).rightJustify(2, '0', true);
+    TQString min = TQString::number(_min).rightJustify(2, '0', true);
+    return min + ':' + sec;
+}
+
+void KGameLCDClock::showTime()
+{
+    display(pretty());
+}
+
+void KGameLCDClock::reset()
+{
+    _timerClock->stop();
+	_sec = 0;
+    _min = 0;
+	showTime();
+}
+
+void KGameLCDClock::start()
+{
+    _timerClock->start(1000); // 1 second
+}
+
+void KGameLCDClock::stop()
+{
+    _timerClock->stop();
+}
+
+uint KGameLCDClock::seconds() const
+{
+    return _min*60 + _sec;
+}
+
+void KGameLCDClock::setTime(uint sec)
+{
+    Q_ASSERT( sec<3600 );
+    _sec = sec % 60;
+    _min = sec / 60;
+    showTime();
+}
+
+void KGameLCDClock::setTime(const TQString &s)
+{
+    Q_ASSERT( s.length()==5 && s[2]==':' );
+    uint min = kMin(s.section(':', 0, 0).toUInt(), uint(59));
+    uint sec = kMin(s.section(':', 1, 1).toUInt(), uint(59));
+    setTime(sec + min*60);
+}
+
+
+//-----------------------------------------------------------------------------
+class KGameLCDList::KGameLCDListPrivate
+{
+public:
+  TQValueVector<TQLabel *> _leadings;
+};
+
+KGameLCDList::KGameLCDList(const TQString &title, TQWidget *parent,
+                           const char *name)
+    : TQWidget(parent, name)
+{
+    init(title);
+}
+
+KGameLCDList::KGameLCDList(TQWidget *parent, const char *name)
+    : TQWidget(parent, name)
+{
+    init(TQString());
+}
+
+KGameLCDList::~KGameLCDList()
+{
+  delete d;
+}
+
+void KGameLCDList::init(const TQString &title)
+{
+    d = new KGameLCDListPrivate;
+
+    TQGridLayout *top = new TQGridLayout(this, 1, 2, 5);
+    top->setColStretch(1, 1);
+
+    _title = new TQLabel(title, this);
+    _title->tqsetAlignment(AlignCenter);
+    top->addMultiCellWidget(_title, 0, 0, 0, 1, AlignCenter);
+}
+
+void KGameLCDList::append(TQLCDNumber *lcd)
+{
+    append(TQString(), lcd);
+}
+
+void KGameLCDList::append(const TQString &leading, TQLCDNumber *lcd)
+{
+    uint i = size();
+    TQLabel *label = 0;
+    if ( !leading.isEmpty() ) {
+      label = new TQLabel(leading, this);
+      static_cast<TQGridLayout *>(tqlayout())->addWidget(label, i+1, 0);
+    }
+    d->_leadings.push_back(label);
+    _lcds.push_back(lcd);
+    static_cast<TQGridLayout *>(tqlayout())->addWidget(lcd, i+1, 1);
+}
+
+void KGameLCDList::clear()
+{
+    for (uint i=0; i<_lcds.size(); i++) {
+        delete d->_leadings[i];
+        delete _lcds[i];
+    }
+    d->_leadings.clear();
+    _lcds.clear();
+}
diff --git a/libtdegames/kgamelcd.h b/libtdegames/kgamelcd.h
new file mode 100644
index 00000000..6b84f012
--- /dev/null
+++ b/libtdegames/kgamelcd.h
@@ -0,0 +1,252 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGAMELCD_H
+#define __KGAMELCD_H
+
+#include <tqlcdnumber.h>
+#include <tqvaluevector.h>
+#include <kdemacros.h>
+
+class TQLabel;
+class TQTimer;
+
+//-----------------------------------------------------------------------------
+/**
+ * This class is a visually enhanced @ref TQLCDNumber:
+ * <ul>
+ * <li> It can show an additional string before the integer being
+ * displayed.</li>
+ * <li> Its foreground and background colors can easily be modified. </li>
+ * <li> It can be highlighted for a short time. </li>
+ * </ul>
+ *
+ * @since 3.2
+ */
+class KDE_EXPORT KGameLCD : public TQLCDNumber
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    KGameLCD(uint nbDigits, TQWidget *parent = 0, const char *name = 0);
+
+    ~KGameLCD();
+
+    /**
+     * Set the default background color.
+     */
+    void setDefaultBackgroundColor(const TQColor &color);
+
+    /**
+     * Set the default foreground color.
+     */
+    void setDefaultColor(const TQColor &color);
+
+    /**
+     * Set highlight color.
+     */
+    void setHighlightColor(const TQColor &color);
+
+    /**
+     * Set the string that will be displayed before the integer number to be
+     * displayed. By default this string is null.
+     */
+    void setLeadingString(const TQString &s);
+
+    /**
+     * Set the highlight duration in milliseconds. The default value is
+     * 800 milliseconds.
+     */
+    void setHighlightTime(uint time);
+
+    /**
+     * Reset the foreground color to the default one.
+     */
+    void resetColor();
+
+    /**
+     * Set the foreground color.
+     */
+    void setColor(const TQColor &color);
+
+public slots:
+    /**
+     * Highlight the LCD with the TQColorGourp::HighlightedText color
+     * for a small time (setHighlightTime).
+     */
+    void highlight();
+
+    /**
+     * Display the given integer with the (optionnal) leading string.
+     *
+     * Note: we cannot use display(int) since TQLCDNumber::display is
+     * not virtual... And you cannot use TQLCDNumber::intValue() to retrieve
+     * the given value.
+     */
+    void displayInt(int value);
+
+private slots:
+    void timeout() { highlight(false); }
+
+private:
+    TQColor   _fgColor, _hlColor;
+    TQString  _lead;
+    uint     _htime;
+    TQTimer  *_timer;
+
+    class KGameLCDPrivate;
+    KGameLCDPrivate *d;
+
+    void highlight(bool light);
+
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * This class is a digital clock widget. It has a maximum duration of
+ * 3599 seconds (one hour) and it gets updated every second.
+ *
+ * @since 3.2
+ */
+class KDE_EXPORT KGameLCDClock : public KGameLCD
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    KGameLCDClock(TQWidget *parent = 0, const char *name = 0);
+
+    ~KGameLCDClock();
+
+    /**
+     * @return the total number of seconds elapsed.
+     */
+    uint seconds() const;
+
+    /**
+     * @return the time as a string to be displayed: "mm:ss".
+     */
+    TQString pretty() const;
+
+    /**
+     * Set the time.
+     */
+    void setTime(uint seconds);
+
+    /**
+     * Set the time (format should be "mm:ss").
+     */
+    void setTime(const TQString &s);
+
+public slots:
+    /**
+     * Stop the clock and reset it to zero.
+     */
+    virtual void reset();
+
+    /**
+     * Stop the clock but do not reset it to zero.
+     */
+	virtual void stop();
+
+    /**
+     * Start the clock from the current time.
+     */
+	virtual void start();
+
+protected slots:
+    virtual void timeoutClock();
+
+private:
+    TQTimer *_timerClock;
+	uint    _sec, _min;
+
+    class KGameLCDClockPrivate;
+    KGameLCDClockPrivate *d;
+
+	void showTime();
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * This widget holds a list of @ref TQLCDNumber arranged in a vertical tqlayout.
+ * It also shows a label at the top of the list.
+ *
+ * @since 3.2
+ */
+class KDE_EXPORT KGameLCDList : public TQWidget
+{
+    Q_OBJECT
+  TQ_OBJECT
+public:
+    /**
+     * Constructor.
+     *
+     * @param title is the content of the top label.
+     * @param parent passed to the TQWidget constructor
+     * @param name passed to the TQWidget constructor
+     */
+    KGameLCDList(const TQString &title,
+                 TQWidget *parent = 0, const char *name = 0);
+    KGameLCDList(TQWidget *parent = 0, const char *name = 0);
+
+    ~KGameLCDList();
+
+    /**
+     * Append a TQLCDNumber at the bottom of the list.
+     * The TQLCDNumber should have the KGameLCDList as parent.
+     */
+    void append(TQLCDNumber *lcd);
+    
+    /**
+     * Append a TQLCDNumber at the bottom of the list.
+     * The TQLCDNumber should have the KGameLCDList as parent.
+     */
+    void append(const TQString &leading, TQLCDNumber *lcd);
+
+    /**
+     * Delete all @ref TQLCDNumber and clear the list.
+     */
+    void clear();
+
+    /**
+     * @return the title label.
+     */
+    TQLabel *title() const { return _title; }
+
+    /**
+     * @return the TQLCDNumber at index @param i
+     */
+    TQLCDNumber *lcd(uint i) const { return _lcds[i]; }
+    
+    /**
+     * @return the number of TQLCDNumber in the list.
+     */
+    uint size() const { return _lcds.size(); }
+
+private:
+    TQLabel *_title;
+    TQValueVector<TQLCDNumber *> _lcds;
+
+    class KGameLCDListPrivate;
+    KGameLCDListPrivate *d;
+
+    void init(const TQString &title);
+};
+
+#endif
diff --git a/libtdegames/kgamemisc.cpp b/libtdegames/kgamemisc.cpp
new file mode 100644
index 00000000..1c318476
--- /dev/null
+++ b/libtdegames/kgamemisc.cpp
@@ -0,0 +1,62 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+
+#include <tqstringlist.h>
+
+#include <krandomsequence.h>
+#include <klocale.h>
+
+#include "kgamemisc.h"
+
+class KGameMiscPrivate
+{
+public:
+	KGameMiscPrivate()
+	{
+	}
+
+};
+
+KGameMisc::KGameMisc()
+{
+// not yet used
+// d = new KGamePrivate;
+}
+
+KGameMisc::~KGameMisc()
+{
+ // don't forget to delete it as soon as it is used!
+// delete d;
+}
+
+TQString KGameMisc::randomName()// do we need i18n? I think yes
+{
+    TQStringList names = TQStringList::split( TQChar(' '),
+        i18n( "A list of language typical names ( for games ), separated by spaces",
+              "Adam Alex Andreas Andrew Bart Ben Bernd Bill "
+              "Chris Chuck Daniel Don Duncan Ed Emily Eric "
+              "Gary Greg Harry Ian Jean Jeff Jan Kai Keith Ken "
+              "Kirk Marc Mike Neil Paul Rik Robert Sam Sean "
+              "Thomas Tim Walter" ) );
+    KRandomSequence random;
+    return *names.at( random.getLong( names.count() ) );
+}
diff --git a/libtdegames/kgamemisc.h b/libtdegames/kgamemisc.h
new file mode 100644
index 00000000..694a6a00
--- /dev/null
+++ b/libtdegames/kgamemisc.h
@@ -0,0 +1,45 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+/*
+    $Id$
+*/
+#ifndef __KGAMEMISC_H__
+#define __KGAMEMISC_H__
+
+#include <tqstring.h>
+#include <kdemacros.h>
+class KGameMiscPrivate;
+/**
+ * This class contains several (usually static) functions I really did not know
+ * a class for. If you know a class for any of these member s please drop one of
+ * the above copyright holders a mail (or just kde-games-devel@kde.org)
+ **/
+class KDE_EXPORT KGameMisc
+{
+public:
+	KGameMisc();
+	~KGameMisc();
+	
+	static TQString randomName();
+	
+private:
+	KGameMiscPrivate* d;
+};
+
+#endif
diff --git a/libtdegames/kgameprogress.cpp b/libtdegames/kgameprogress.cpp
new file mode 100644
index 00000000..98876aa3
--- /dev/null
+++ b/libtdegames/kgameprogress.cpp
@@ -0,0 +1,345 @@
+/* This file is part of the KDE libraries
+   Copyright (C) 1996 Martynas Kunigelis
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+/**
+ * KGameProgress -- a progress indicator widget for KDE.
+ */
+
+#include <tqpainter.h>
+#include <tqpixmap.h>
+#include <tqstring.h>
+#include <tqregexp.h>
+#include <tqstyle.h>
+
+#include "kgameprogress.h"
+
+#include <kapplication.h>
+
+KGameProgress::KGameProgress(TQWidget *parent, const char *name)
+	: TQFrame(parent, name),
+	TQRangeControl(0, 100, 1, 10, 0),
+	orient(Qt::Horizontal)
+{
+	initialize();
+}
+
+KGameProgress::KGameProgress(Qt::Orientation orientation, TQWidget *parent, const char *name)
+	: TQFrame(parent, name),
+	TQRangeControl(0, 100, 1, 10, 0),
+	orient(orientation)
+{
+	initialize();
+}
+
+KGameProgress::KGameProgress(int minValue, int maxValue, int value,
+                     Qt::Orientation orientation, TQWidget *parent, const char *name)
+	: TQFrame(parent, name),
+	TQRangeControl(minValue, maxValue, 1, 10, value),
+	orient(orientation)
+{
+	initialize();
+}
+
+KGameProgress::~KGameProgress()
+{
+	delete bar_pixmap;
+}
+
+void KGameProgress::advance(int offset)
+{
+	setValue(value() + offset);
+}
+
+void KGameProgress::initialize()
+{
+	format_ = "%p%";
+	use_supplied_bar_color = false;
+	bar_pixmap = 0;
+	bar_style = Solid;
+	text_enabled = TRUE;
+	setBackgroundMode( PaletteBackground );
+	connect(kapp, TQT_SIGNAL(appearanceChanged()), this, TQT_SLOT(paletteChange()));
+	paletteChange();
+}
+
+void KGameProgress::paletteChange()
+{
+	TQPalette p = kapp->palette();
+	const TQColorGroup &tqcolorGroup = p.active();
+	if (!use_supplied_bar_color)
+		bar_color = tqcolorGroup.highlight();
+	bar_text_color = tqcolorGroup.highlightedText();
+	text_color = tqcolorGroup.text();
+	setPalette(p);
+
+	adjustStyle();
+}
+
+
+void KGameProgress::setBarPixmap(const TQPixmap &pixmap)
+{
+	if (pixmap.isNull())
+		return;
+	if (bar_pixmap)
+		delete bar_pixmap;
+
+	bar_pixmap = new TQPixmap(pixmap);
+}
+
+void KGameProgress::setBarColor(const TQColor &color)
+{
+	bar_color = color;
+	use_supplied_bar_color = true;
+	if (bar_pixmap) {
+		delete bar_pixmap;
+		bar_pixmap = 0;
+	}
+}
+
+void KGameProgress::setBarStyle(BarStyle style)
+{
+	if (bar_style != style) {
+		bar_style = style;
+		update();
+	}
+}
+
+void KGameProgress::setOrientation(Qt::Orientation orientation)
+{
+	if (orient != orientation) {
+		orient = orientation;
+		update();
+	}
+}
+
+void KGameProgress::setValue(int value)
+{
+	TQRangeControl::setValue(value);
+}
+
+void KGameProgress::setTextEnabled(bool enable)
+{
+	text_enabled = enable;
+}
+
+const TQColor & KGameProgress::barColor() const
+{
+	return bar_color;
+}
+
+const TQPixmap * KGameProgress::barPixmap() const
+{
+	return bar_pixmap;
+}
+
+bool KGameProgress::textEnabled() const
+{
+	return text_enabled;
+}
+
+TQSize KGameProgress::tqsizeHint() const
+{
+	TQSize s( size() );
+
+	if(orientation() == Qt::Vertical) {
+		s.setWidth(24);
+	} else {
+		s.setHeight(24);
+	}
+
+	return s;
+}
+
+TQSize KGameProgress::tqminimumSizeHint() const
+{
+	return tqsizeHint();
+}
+
+TQSizePolicy KGameProgress::sizePolicy() const
+{
+	if ( orientation()==Qt::Vertical )
+		return TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Expanding );
+	else
+		return TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed );
+}
+
+KGameProgress::Orientation KGameProgress::orientation() const
+{
+	return orient;
+}
+
+KGameProgress::BarStyle KGameProgress::barStyle() const
+{
+	return bar_style;
+}
+
+int KGameProgress::recalcValue(int range)
+{
+	int abs_value = value() - minValue();
+	int abs_range = maxValue() - minValue();
+	return abs_range ? range * abs_value / abs_range : 0;
+}
+
+void KGameProgress::valueChange()
+{
+	tqrepaint(contentsRect(), FALSE);
+	emit percentageChanged(recalcValue(100));
+}
+
+void KGameProgress::rangeChange()
+{
+	tqrepaint(contentsRect(), FALSE);
+	emit percentageChanged(recalcValue(100));
+}
+
+void KGameProgress::styleChange(TQStyle&)
+{
+	adjustStyle();
+}
+
+void KGameProgress::adjustStyle()
+{
+	switch (tqstyle().tqstyleHint(TQStyle::SH_GUIStyle)) {
+		case WindowsStyle:
+			setFrameStyle(TQFrame::WinPanel | TQFrame::Sunken);
+			break;
+		case MotifStyle:
+		default:
+			setFrameStyle(TQFrame::Panel | TQFrame::Sunken);
+			setLineWidth( 2 );
+			break;
+	}
+	update();
+}
+
+void KGameProgress::paletteChange( const TQPalette &p )
+{
+	// This never gets called for global color changes 
+	// because we call setPalette() ourselves.
+	TQFrame::paletteChange(p);
+}
+
+void KGameProgress::drawText(TQPainter *p)
+{
+	TQRect r(contentsRect());
+	//TQColor c(bar_color.rgb() ^ backgroundColor().rgb());
+
+	// Rik: Replace the tags '%p', '%v' and '%m' with the current percentage,
+	// the current value and the maximum value respectively.
+	TQString s(format_);
+
+	s.replace(TQRegExp(TQString::tqfromLatin1("%p")), TQString::number(recalcValue(100)));
+	s.replace(TQRegExp(TQString::tqfromLatin1("%v")), TQString::number(value()));
+	s.replace(TQRegExp(TQString::tqfromLatin1("%m")), TQString::number(maxValue()));
+
+	p->setPen(text_color);
+	TQFont font = p->font();
+	font.setBold(true);
+	p->setFont(font);
+	//p->setRasterOp(XorROP);
+	p->drawText(r, AlignCenter, s);
+	p->setClipRegion( fr );
+	p->setPen(bar_text_color);
+	p->drawText(r, AlignCenter, s);
+}
+
+void KGameProgress::drawContents(TQPainter *p)
+{
+	TQRect cr = contentsRect(), er = cr;
+	fr = cr;
+	TQBrush fb(bar_color), eb(backgroundColor());
+
+	if (bar_pixmap)
+		fb.setPixmap(*bar_pixmap);
+
+	if (backgroundPixmap())
+		eb.setPixmap(*backgroundPixmap());
+
+	switch (bar_style) {
+		case Solid:
+			if (orient ==Qt::Horizontal) {
+				fr.setWidth(recalcValue(cr.width()));
+				er.setLeft(fr.right() + 1);
+			} else {
+				fr.setTop(cr.bottom() - recalcValue(cr.height()));
+				er.setBottom(fr.top() - 1);
+			}
+
+			p->setBrushOrigin(cr.topLeft());
+			p->fillRect(fr, fb);
+
+			p->fillRect(er, eb);
+
+			break;
+
+		case Blocked:
+			const int margin = 2;
+			int max, num, dx, dy;
+			if (orient ==Qt::Horizontal) {
+				fr.setHeight(cr.height() - 2 * margin);
+				fr.setWidth((int)(0.67 * fr.height()));
+				fr.moveTopLeft(TQPoint(cr.left() + margin, cr.top() + margin));
+				dx = fr.width() + margin;
+				dy = 0;
+				max = (cr.width() - margin) / (fr.width() + margin) + 1;
+				num = recalcValue(max);
+			} else {
+				fr.setWidth(cr.width() - 2 * margin);
+				fr.setHeight((int)(0.67 * fr.width()));
+				fr.moveBottomLeft(TQPoint(cr.left() + margin, cr.bottom() - margin));
+				dx = 0;
+				dy = - (fr.height() + margin);
+				max = (cr.height() - margin) / (fr.height() + margin) + 1;
+				num = recalcValue(max);
+			}
+			p->setClipRect(cr.x() + margin, cr.y() + margin,
+			               cr.width() - margin, cr.height() - margin);
+			for (int i = 0; i < num; i++) {
+				p->setBrushOrigin(fr.topLeft());
+				p->fillRect(fr, fb);
+				fr.moveBy(dx, dy);
+			}
+			
+			if (num != max) {
+				if (orient ==Qt::Horizontal)
+					er.setLeft(fr.right() + 1);
+				else
+					er.setBottom(fr.bottom() + 1);
+				if (!er.isNull()) {
+					p->setBrushOrigin(cr.topLeft());
+					p->fillRect(er, eb);
+				}
+			}
+
+			break;
+	}
+
+	if (text_enabled && bar_style != Blocked)
+		drawText(p);
+}
+
+void KGameProgress::setFormat(const TQString & format)
+{
+	format_ = format;
+}
+
+TQString KGameProgress::format() const
+{
+	return format_;
+}
+
+#include "kgameprogress.moc"
diff --git a/libtdegames/kgameprogress.h b/libtdegames/kgameprogress.h
new file mode 100644
index 00000000..834b127c
--- /dev/null
+++ b/libtdegames/kgameprogress.h
@@ -0,0 +1,256 @@
+/* This file is part of the KDE libraries
+   Copyright (C) 1996 Martynas Kunigelis
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License version 2 as published by the Free Software Foundation.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public License
+   along with this library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.
+*/
+/*****************************************************************************
+*                                                                            *
+*  KGameProgress -- progress indicator widget for KDE by Martynas Kunigelis  *
+*                                                                            *
+*****************************************************************************/
+
+#ifndef _KPROGRES_H
+#define _KPROGRES_H "$Id$"
+
+#include <tqframe.h>
+#include <tqrangecontrol.h>
+#include <kdemacros.h>
+/**
+ * @short A progress indicator widget.
+ *
+ * KGameProgress is derived from TQFrame and TQRangeControl, so
+ * you can use all the methods from those classes. The only difference
+ * is that setValue() is now made a slot, so you can connect
+ * stuff to it.
+ *
+ * None of the constructors take line step and page step as arguments,
+ * so by default they're set to 1 and 10 respectively.
+ *
+ * The Blocked style ignores the textEnabled() setting and displays
+ * no text, since it looks truly ugly (and for other reasons). Signal
+ * percentageChanged() is emitted whenever the value changes so you
+ * can set up a different widget to display the current percentage complete
+ * and connect the signal to it.
+ *
+ * @author Martynas Kunigelis
+ * @version $Id$
+ */
+class KDE_EXPORT KGameProgress : public TQFrame, public TQRangeControl
+{
+  Q_OBJECT
+  TQ_OBJECT
+  Q_ENUMS( BarStyle )
+  TQ_PROPERTY( int value READ value WRITE setValue)
+  TQ_PROPERTY( BarStyle barStyle READ barStyle WRITE setBarStyle )
+  TQ_PROPERTY( TQColor barColor READ barColor WRITE setBarColor )
+  TQ_PROPERTY( TQPixmap barPixmap READ barPixmap WRITE setBarPixmap )
+  TQ_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation )
+  TQ_PROPERTY( bool textEnabled READ textEnabled WRITE setTextEnabled )
+
+public:
+  /**
+   * Possible values for bar style.
+   *
+   * @p Solid means one continuous progress bar, @p Blocked means a
+   * progress bar made up of several blocks.
+   */
+  enum BarStyle { Solid, Blocked };
+
+  /**
+   * Construct a horizontal progress bar.
+   */
+  KGameProgress(TQWidget *parent=0, const char *name=0);
+
+  /**
+   * Construct a progress bar with orientation @p orient.
+   */
+  KGameProgress(Qt::Orientation orient, TQWidget *parent=0, const char *name=0);
+
+  /**
+   * Construct a progress bar with minimum, maximum and initial values.
+   */
+  KGameProgress(int minValue, int maxValue, int value, Qt::Orientation,
+                TQWidget *parent=0, const char *name=0);
+
+  /**
+   * Destruct the progress bar.
+   */
+  ~KGameProgress();
+
+  /**
+   * Set the progress bar style.
+   *
+   * Allowed values are @p Solid and @p Blocked.
+   */
+  void setBarStyle(BarStyle style);
+
+  /**
+   * Set the color of the progress bar.
+   */
+  void setBarColor(const TQColor &);
+
+  /**
+   * Set a pixmap to be shown in the progress bar.
+   */
+  void setBarPixmap(const TQPixmap &);
+
+  /**
+   * Set the orientation of the progress bar.
+   *
+   * Allowed values are @pQt::Horizontal and @pQt::Vertical.
+   */
+  void setOrientation(Qt::Orientation);
+
+  /**
+   * If this is set to @p true, the progress text will be displayed.
+   *
+   */
+  void setTextEnabled(bool);
+
+  /**
+   * Retrieve the bar style.
+   *
+   * @see setBarStyle()
+   */
+  BarStyle barStyle() const;
+
+  /**
+   * Retrieve the bar color.
+   * @see setBarColor()
+   */
+  const TQColor &barColor() const;
+
+  /**
+   * Retrieve the bar pixmap.
+   *
+   * @see setBarPixmap()
+   */
+  const TQPixmap *barPixmap() const;
+
+  /**
+   * Retrive the current status
+   *
+   * @see setValue()
+   */
+  int value() const { return TQRangeControl::value(); }
+  /**
+   * Retrive the orientation of the progress bar.
+   *
+   * @see setOrientation()
+   */
+  Qt::Orientation orientation() const;
+
+  /**
+   * Returns @p true if progress text will be displayed,
+   * @p false otherwise.
+   *
+   * @see setFormat()
+   */
+  bool textEnabled() const;
+
+  /**
+   */
+  virtual TQSize tqsizeHint() const;
+
+  /**
+   */
+  virtual TQSize tqminimumSizeHint() const;
+
+  /**
+   */
+  virtual TQSizePolicy sizePolicy() const;
+
+  /**
+   * Retrieve the current format for printing status text.
+   * @see setFormat()
+   */
+  TQString format() const;
+
+public slots:
+
+  /**
+   * Set the format of the text to use to display status.
+   *
+   * The default format is "%p%" (which looks like "42%".)
+   *
+   * @param format %p is replaced by percentage done, %v is replaced by actual
+   * value, %m is replaced by the maximum value.
+   */
+  void setFormat(const TQString & format);
+
+  /**
+   * Set the current value of the progress bar to @p value.
+   *
+   * This must be a number in the range 0..100.
+   */
+  void setValue(int value);
+
+  /**
+   * Advance the progress bar by @p prog.
+   *
+   * This method is
+   * provided for convenience and is equivalent with
+   * setValue(value()+prog).
+   */
+  void advance(int prog);
+
+signals:
+  /**
+   * Emitted when the state of the progress bar changes.
+   */
+  void percentageChanged(int);
+
+protected:
+  /**
+   */
+  void valueChange();
+  /**
+   */
+  void rangeChange();
+  /**
+   */
+  void styleChange( TQStyle& );
+  /**
+   */
+  void paletteChange( const TQPalette & );
+  /**
+   */
+  void drawContents( TQPainter * );
+
+private slots:
+  void paletteChange();
+
+private:
+  TQPixmap  *bar_pixmap;
+  bool      use_supplied_bar_color;
+  TQColor    bar_color;
+  TQColor    bar_text_color;
+  TQColor    text_color;
+  TQRect     fr;
+  BarStyle  bar_style;
+  Qt::Orientation orient;
+  bool      text_enabled;
+  TQString   format_;
+  void      initialize();
+  int       recalcValue(int);
+  void      drawText(TQPainter *);
+  void      adjustStyle();
+
+  class KGameProgressPrivate;
+  KGameProgressPrivate *d;
+};
+
+
+#endif
diff --git a/libtdegames/kgrid2d.h b/libtdegames/kgrid2d.h
new file mode 100644
index 00000000..9443b0c7
--- /dev/null
+++ b/libtdegames/kgrid2d.h
@@ -0,0 +1,520 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __KGRID2D_H_
+#define __KGRID2D_H_
+
+#include <math.h>
+
+#include <tqpair.h>
+#include <tqvaluelist.h>
+#include <tqvaluevector.h>
+
+#include <kglobal.h>
+
+
+//-----------------------------------------------------------------------------
+namespace KGrid2D
+{
+    /**
+     * This type represents coordinates on a bidimensionnal grid.
+     * @since 3.2
+     */
+    typedef TQPair<int, int> Coord;
+
+    /**
+     * This type represents a list of @ref Coord.
+     * @since 3.2
+     */
+    typedef TQValueList<Coord> CoordList;
+}
+
+inline KGrid2D::Coord
+operator +(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
+    return KGrid2D::Coord(c1.first + c2.first, c1.second + c2.second);
+}
+
+inline KGrid2D::Coord
+operator -(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
+    return KGrid2D::Coord(c1.first - c2.first, c1.second - c2.second);
+}
+
+/**
+ * @return the maximum of both coordinates.
+ * @since 3.2
+ */
+inline KGrid2D::Coord
+maximum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
+    return KGrid2D::Coord(kMax(c1.first, c2.first), kMax(c1.second, c2.second));
+}
+/**
+ * @return the minimum of both coordinates.
+ * @since 3.2
+ */
+inline KGrid2D::Coord
+minimum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
+    return KGrid2D::Coord(kMin(c1.first, c2.first), kMin(c1.second, c2.second));
+}
+
+inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::Coord &c) {
+    return s << '(' << c.second << ", " << c.first << ')';
+}
+
+inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::CoordList &list)
+{
+    for(KGrid2D::CoordList::const_iterator i=list.begin(); i!=list.end(); ++i)
+        s << *i;
+	return s;
+}
+
+//-----------------------------------------------------------------------------
+namespace KGrid2D
+{
+/**
+ * This template class represents a generic bidimensionnal grid. Each node
+ * contains an element of the template type.
+ *
+ * @since 3.2
+ */
+template <class Type>
+class Generic
+{
+ public:
+    /**
+     * Constructor.
+     */
+    Generic(uint width = 0, uint height = 0) {
+        resize(width, height);
+    }
+
+    virtual ~Generic() {}
+
+    /**
+     * Resize the grid.
+     */
+    void resize(uint width, uint height) {
+        _width = width;
+        _height = height;
+        _vector.resize(width*height);
+    }
+
+    /**
+     * Fill the nodes with the given value.
+     */
+    void fill(const Type &value) {
+        for (uint i=0; i<_vector.count(); i++) _vector[i] = value;
+    }
+
+    /**
+     * @return the width.
+     */
+    uint width() const  { return _width; }
+    /**
+     * @return the height.
+     */
+    uint height() const { return _height; }
+    /**
+     * @return the number of nodes (ie width*height).
+     */
+    uint size() const   { return _width*_height; }
+
+    /**
+     * @return the linear index for the given coordinate.
+     */
+    uint index(const Coord &c) const {
+        return c.first + c.second*_width;
+    }
+
+    /**
+     * @return the coordinate corresponding to the linear index.
+     */
+    Coord coord(uint index) const {
+        return Coord(index % _width, index / _width);
+    }
+
+    /**
+     * @return the value at the given coordinate.
+     */
+    const Type &at(const Coord &c) const { return _vector[index(c)]; }
+    /**
+     * @return the value at the given coordinate.
+     */
+    Type &at(const Coord &c)             { return _vector[index(c)]; }
+    /**
+     * @return the value at the given coordinate.
+     */
+    const Type &operator [](const Coord &c) const { return _vector[index(c)]; }
+    /**
+     * @return the value at the given coordinate.
+     */
+    Type &operator [](const Coord &c)             { return _vector[index(c)]; }
+
+    /**
+     * @return the value at the given linear index.
+     */
+    const Type &at(uint index) const          { return _vector[index]; }
+    /**
+     * @return the value at the given linear index.
+     */
+    Type &at(uint index)                      { return _vector[index]; }
+    /**
+     * @return the value at the given linear index.
+     */
+    const Type &operator [](uint index) const { return _vector[index]; }
+    /**
+     * @return the value at the given linear index.
+     */
+    Type &operator [](uint index)             { return _vector[index]; }
+
+    /**
+     * @return if the given coordinate is inside the grid.
+     */
+    bool inside(const Coord &c) const {
+        return ( c.first>=0 && c.first<(int)_width
+                 && c.second>=0 && c.second<(int)_height );
+    }
+
+    /**
+     * Bound the given coordinate with the grid dimensions.
+     */
+    void bound(Coord &c) const {
+        c.first = kMax(kMin(c.first, (int)_width-1), 0);
+        c.second = kMax(kMin(c.second, (int)_height-1), 0);
+    }
+
+ protected:
+    uint               _width, _height;
+    TQValueVector<Type> _vector;
+};
+}
+
+template <class Type>
+TQDataStream &operator <<(TQDataStream &s, const KGrid2D::Generic<Type> &m) {
+    s << (TQ_UINT32)m.width() << (TQ_UINT32)m.height();
+    for (uint i=0; i<m.size(); i++) s << m[i];
+    return s;
+}
+
+template <class Type>
+TQDataStream &operator >>(TQDataStream &s, KGrid2D::Generic<Type> &m) {
+    TQ_UINT32 w, h;
+    s >> w >> h;
+    m.resize(w, h);
+    for (uint i=0; i<m.size(); i++) s >> m[i];
+    return s;
+}
+
+
+namespace KGrid2D
+{
+
+//-----------------------------------------------------------------------------
+/**
+ * This class contains static methods to manipulate coordinates for a
+ * square bidimensionnal grid.
+ *
+ * @since 3.2
+ */
+class SquareBase
+{
+ public:
+    /**
+     * Identify the eight neighbours.
+     */
+    enum Neighbour { Left=0, Right, Up, Down, LeftUp, LeftDown,
+                     RightUp, RightDown, Nb_Neighbour };
+
+    /**
+     * @return the trigonometric angle in radians for the given neighbour.
+     */
+    static double angle(Neighbour n) {
+        switch (n) {
+        case Left:      return M_PI;
+        case Right:     return 0;
+        case Up:        return M_PI_2;
+        case Down:      return -M_PI_2;
+        case LeftUp:    return 3.0*M_PI_4;
+        case LeftDown:  return -3.0*M_PI_4;
+        case RightUp:   return M_PI_4;
+        case RightDown: return -M_PI_4;
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return 0;
+    }
+
+    /**
+     * @return the opposed neighbour.
+     */
+    static Neighbour opposed(Neighbour n) {
+        switch (n) {
+        case Left:      return Right;
+        case Right:     return Left;
+        case Up:        return Down;
+        case Down:      return Up;
+        case LeftUp:    return RightDown;
+        case LeftDown:  return RightUp;
+        case RightUp:   return LeftDown;
+        case RightDown: return LeftUp;
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return Nb_Neighbour;
+    }
+
+    /**
+     * @return true if the neighbour is a direct one (ie is one of the four
+     * nearest).
+     */
+    static bool isDirect(Neighbour n) { return n<LeftUp; }
+
+    /**
+     * @return the neighbour for the given coordinate.
+     */
+    static Coord neighbour(const Coord &c, Neighbour n) {
+        switch (n) {
+        case Left:      return c + Coord(-1,  0);
+        case Right:     return c + Coord( 1,  0);
+        case Up:        return c + Coord( 0, -1);
+        case Down:      return c + Coord( 0,  1);
+        case LeftUp:    return c + Coord(-1, -1);
+        case LeftDown:  return c + Coord(-1,  1);
+        case RightUp:   return c + Coord( 1, -1);
+        case RightDown: return c + Coord( 1,  1);
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return c;
+    }
+};
+
+/**
+ * This template is a @ref Generic implementation for a square bidimensionnal
+ * grid (@ref SquareBase).
+ *
+ * @since 3.2
+ */
+template <class T>
+class Square : public Generic<T>, public SquareBase
+{
+ public:
+    /**
+     * Constructor.
+     */
+    Square(uint width = 0, uint height = 0)
+        : Generic<T>(width, height) {}
+
+    /**
+     * @return the neighbours of coordinate @param c
+     * to the given set of coordinates
+     * @param c the coordinate to use as the reference point
+     * @param insideOnly only add coordinates that are inside the grid.
+     * @param directOnly only add the four nearest neighbours.
+     */
+    CoordList neighbours(const Coord &c, bool insideOnly = true,
+                         bool directOnly = false) const {
+        CoordList neighbours;
+        for (uint i=0; i<(directOnly ? LeftUp : Nb_Neighbour); i++) {
+            Coord n = neighbour(c, (Neighbour)i);
+            if ( insideOnly && !Generic<T>::inside(n) ) continue;
+            neighbours.append(n);
+        }
+        return neighbours;
+    }
+
+    /**
+     * @return the "projection" of the given coordinate on the grid edges.
+     *
+     * @param c the coordinate to use as the reference point
+     * @param n the direction of projection.
+     */
+    Coord toEdge(const Coord &c, Neighbour n) const {
+        switch (n) {
+        case Left:      return Coord(0, c.second);
+        case Right:     return Coord(Generic<T>::width()-1, c.second);
+        case Up:        return Coord(c.first, 0);
+        case Down:      return Coord(c.first, Generic<T>::height()-1);
+        case LeftUp:    return Coord(0, 0);
+        case LeftDown:  return Coord(0, Generic<T>::height()-1);
+        case RightUp:   return Coord(Generic<T>::width()-1, 0);
+        case RightDown: return Coord(Generic<T>::width()-1, Generic<T>::height()-1);
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return c;
+    }
+};
+
+//-----------------------------------------------------------------------------
+/**
+ * This class contains static methods to manipulate coordinates on an
+ * hexagonal grid where hexagons form horizontal lines:
+ * <pre>
+ * (0,0)   (0,1)   (0,2)
+ *     (1,0)   (1,1)   (1,2)
+ * (2,0)   (2,1)   (2,2)
+ * </pre>
+ *
+ * @since 3.2
+ */
+class HexagonalBase
+{
+ public:
+    /**
+     * Identify the six neighbours.
+     */
+    enum Neighbour { Left = 0, Right, LeftUp, LeftDown,
+                     RightUp, RightDown, Nb_Neighbour };
+
+     /**
+     * @return the trigonometric angle in radians for the given neighbour.
+     */
+    static double angle(Neighbour n) {
+        switch (n) {
+        case Left:      return M_PI;
+        case Right:     return 0;
+        case LeftUp:    return 2.0*M_PI/3;
+        case LeftDown:  return -2.0*M_PI/3;
+        case RightUp:   return M_PI/3;
+        case RightDown: return -M_PI/3;
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return 0;
+    }
+
+    /**
+     * @return the opposed neighbour.
+     */
+    static Neighbour opposed(Neighbour n) {
+        switch (n) {
+        case Left:      return Right;
+        case Right:     return Left;
+        case LeftUp:    return RightDown;
+        case LeftDown:  return RightUp;
+        case RightUp:   return LeftDown;
+        case RightDown: return LeftUp;
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return Nb_Neighbour;
+    }
+
+    /**
+     * @return the neighbour of the given coordinate.
+     */
+    static Coord neighbour(const Coord &c, Neighbour n) {
+        bool oddRow = c.second%2;
+        switch (n) {
+        case Left:      return c + Coord(-1,  0);
+        case Right:     return c + Coord( 1,  0);
+        case LeftUp:    return c + (oddRow ? Coord( 0, -1) : Coord(-1, -1));
+        case LeftDown:  return c + (oddRow ? Coord( 0,  1) : Coord(-1,  1));
+        case RightUp:   return c + (oddRow ? Coord( 1, -1) : Coord( 0, -1));
+        case RightDown: return c + (oddRow ? Coord( 1,  1) : Coord( 0,  1));
+        case Nb_Neighbour: Q_ASSERT(false);
+        }
+        return c;
+    }
+
+    /**
+    * @return the distance between the two coordinates in term of hexagons.
+    */
+    static uint distance(const Coord &c1, const Coord &c2) {
+        return kAbs(c1.first - c2.first) + kAbs(c1.second - c2.second)
+            + (c1.first==c2.first || c1.second==c2.second ? 0 : -1);
+    }
+};
+
+/**
+ * This template implements a hexagonal grid
+ * where hexagons form horizontal lines:
+ * <pre>
+ * (0,0)   (0,1)   (0,2)
+ *     (1,0)   (1,1)   (1,2)
+ * (2,0)   (2,1)   (2,2)
+ * </pre>
+ *
+ * @ since 3.2
+ */
+template <class Type>
+class Hexagonal : public Generic<Type>, public HexagonalBase
+{
+ public:
+    /**
+     * Constructor.
+     */
+    Hexagonal(uint width = 0, uint height = 0)
+        : Generic<Type>(width, height) {}
+
+    /**
+     * @return the neighbours of coordinate @param c
+     * to the given set of coordinates
+     * @param c the coordiante to use as the reference point
+     * @param insideOnly only add coordinates that are inside the grid.
+     */
+    CoordList neighbours(const Coord &c, bool insideOnly = true) const {
+        CoordList neighbours;
+        for (uint i=0; i<Nb_Neighbour; i++) {
+            Coord n = neighbour(c, (Neighbour)i);
+            if ( insideOnly && !Generic<Type>::inside(n) ) continue;
+            neighbours.append(n);
+        }
+        return neighbours;
+    }
+
+
+    /**
+     * @return the neighbours at distance @param distance of coordinate
+     * @param c the coordinate to use as the reference point
+     * @param distance distance to the neighbour (1 means at contact).
+     * @param insideOnly only add coordinates that are inside the grid.
+     * @param all returns all neighbours at distance equal and less than
+     *        @param distance (the original coordinate is not included).
+     */
+    CoordList neighbours(const Coord &c, uint distance, bool all,
+                        bool insideOnly = true) const {
+        // brute force algorithm -- you're welcome to make it more efficient :)
+        CoordList ring;
+        if ( distance==0 ) return ring;
+        ring = neighbours(c, insideOnly);
+        if ( distance==1 ) return ring;
+        CoordList center;
+        center.append(c);
+        for (uint i=1; i<distance; i++) {
+            CoordList newRing;
+            CoordList::const_iterator it;
+            for (it=ring.begin(); it!=ring.end(); ++it) {
+                CoordList n = neighbours(*it, insideOnly);
+                CoordList::const_iterator it2;
+                for (it2=n.begin(); it2!=n.end(); ++it2)
+                    if ( center.find(*it2)==center.end()
+                         && ring.find(*it2)==ring.end()
+                         && newRing.find(*it2)==newRing.end() )
+                        newRing.append(*it2);
+                center.append(*it);
+            }
+            ring = newRing;
+        }
+        if ( !all ) return ring;
+        CoordList::const_iterator it;
+        for (it=ring.begin(); it!=ring.end(); ++it)
+            center.append(*it);
+        center.remove(c);
+        return center;
+    }
+};
+
+} // namespace
+
+#endif
diff --git a/libtdegames/kstdgameaction.cpp b/libtdegames/kstdgameaction.cpp
new file mode 100644
index 00000000..2aeb412e
--- /dev/null
+++ b/libtdegames/kstdgameaction.cpp
@@ -0,0 +1,209 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "kstdgameaction.h"
+
+#include <klocale.h>
+#include <kaction.h>
+#include <kstdaccel.h>
+#include <kconfig.h>
+#include <kdebug.h>
+
+
+KStdGameAction::KStdGameAction()
+{}
+
+KStdGameAction::~KStdGameAction()
+{}
+
+KAction *KStdGameAction::action(StdGameAction act_enum, const TQObject *recvr,
+                                const char *slot, KActionCollection *parent,
+                                const char *name)
+{
+    return create( act_enum, name, recvr, slot, parent );
+}
+
+const char* KStdGameAction::stdName(StdGameAction act_enum)
+{
+    return name(act_enum);
+}
+
+struct KStdGameActionInfo
+{
+	KStdGameAction::StdGameAction id;
+	KStdAccel::StdAccel globalAccel; // if we reuse a global accel
+    int shortcut; // specific shortcut (NH: should be configurable)
+	const char* psName;
+	const char* psLabel;
+	const char* psWhatsThis;
+	const char* psIconName;
+};
+
+const KStdGameActionInfo g_rgActionInfo[] = {
+// "game" menu
+    { KStdGameAction::New, KStdAccel::New, 0, "game_new", I18N_NOOP2("new game", "&New"), 0, "filenew" },
+    { KStdGameAction::Load, KStdAccel::Open, 0, "game_load", I18N_NOOP("&Load..."), 0, "fileopen" },
+    { KStdGameAction::LoadRecent, KStdAccel::AccelNone, 0, "game_load_recent", I18N_NOOP("Load &Recent"), 0, 0 },
+    { KStdGameAction::Restart, KStdAccel::Reload, 0, "game_restart", I18N_NOOP("Restart &Game"), 0, "reload" },
+    { KStdGameAction::Save, KStdAccel::Save, 0, "game_save", I18N_NOOP("&Save"), 0, "filesave" },
+    { KStdGameAction::SaveAs, KStdAccel::AccelNone, 0, "game_save_as", I18N_NOOP("Save &As..."), 0, "filesaveas" },
+    { KStdGameAction::End, KStdAccel::End, 0, "game_end", I18N_NOOP("&End Game"), 0, "fileclose" },
+    { KStdGameAction::Pause, KStdAccel::AccelNone, TQt::Key_P, "game_pause", I18N_NOOP("Pa&use"), 0, "player_pause" },
+    { KStdGameAction::Highscores, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_H, "game_highscores", I18N_NOOP("Show &Highscores"), 0, "highscore" },
+    { KStdGameAction::Print, KStdAccel::Print, 0, "game_print", I18N_NOOP("&Print..."), 0, "fileprint" },
+    { KStdGameAction::Quit, KStdAccel::Quit, 0, "game_quit", I18N_NOOP("&Quit"), 0, "exit" },
+// "move" menu
+    { KStdGameAction::Repeat, KStdAccel::AccelNone, 0, "move_repeat", I18N_NOOP("Repeat"), 0, 0 },
+    { KStdGameAction::Undo, KStdAccel::Undo, 0, "move_undo", I18N_NOOP("Und&o"), 0, "undo" },
+    { KStdGameAction::Redo, KStdAccel::Redo, 0, "move_redo", I18N_NOOP("Re&do"), 0, "redo" },
+    { KStdGameAction::Roll, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_R, "move_roll", I18N_NOOP("&Roll Dice"), 0, "roll" },
+    { KStdGameAction::EndTurn, KStdAccel::AccelNone, 0, "move_end_turn", I18N_NOOP("End Turn"), 0, "endturn" },
+    { KStdGameAction::Hint, KStdAccel::AccelNone, TQt::Key_H, "move_hint", I18N_NOOP("&Hint"), 0, "idea" },
+    { KStdGameAction::Demo, KStdAccel::AccelNone, TQt::Key_D, "move_demo", I18N_NOOP("&Demo"), 0, "1rightarrow" },
+    { KStdGameAction::Solve, KStdAccel::AccelNone, 0, "move_solve", I18N_NOOP("&Solve"), 0, "wizard" },
+// "settings" menu
+    { KStdGameAction::ChooseGameType, KStdAccel::AccelNone, 0, "options_choose_game_type", I18N_NOOP("Choose Game &Type"), 0, 0 },
+    { KStdGameAction::Carddecks, KStdAccel::AccelNone, 0, "options_configure_carddecks", I18N_NOOP("Configure &Carddecks..."), 0, 0 },
+    { KStdGameAction::ConfigureHighscores, KStdAccel::AccelNone, 0, "options_configure_highscores", I18N_NOOP("Configure &Highscores..."), 0, 0 },
+
+    { KStdGameAction::ActionNone, KStdAccel::AccelNone, 0, 0, 0, 0, 0 }
+};
+
+static const KStdGameActionInfo* infoPtr( KStdGameAction::StdGameAction id )
+{
+	for (uint i = 0; g_rgActionInfo[i].id!=KStdGameAction::ActionNone; i++) {
+		if( g_rgActionInfo[i].id == id )
+			return &g_rgActionInfo[i];
+	}
+	return 0;
+}
+
+
+KAction* KStdGameAction::create(StdGameAction id, const char *name,
+                                const TQObject *recvr, const char *slot,
+                                KActionCollection* parent )
+{
+	KAction* pAction = 0;
+	const KStdGameActionInfo* pInfo = infoPtr( id );
+	kdDebug(125) << "KStdGameAction::create( " << id << "=" << (pInfo ? pInfo->psName : (const char*)0) << ", " << parent << ", " << name << " )" << endl;
+	if( pInfo ) {
+		TQString sLabel = i18n(pInfo->psLabel);
+		KShortcut cut = (pInfo->globalAccel==KStdAccel::AccelNone
+                         ? KShortcut(pInfo->shortcut)
+                         : KStdAccel::shortcut(pInfo->globalAccel));
+        const char *n = name ? name : pInfo->psName;
+		switch( id ) {
+        case LoadRecent:
+            pAction =
+                new KRecentFilesAction(sLabel, cut, recvr, slot, parent, n);
+            break;
+        case Pause:
+        case Demo:
+			pAction = new KToggleAction( sLabel, pInfo->psIconName, cut,
+                                         recvr, slot, parent, n);
+			break;
+        case ChooseGameType:
+            pAction = new KSelectAction( sLabel, pInfo->psIconName, cut,
+                                         recvr, slot, parent, n);
+            break;
+		 default:
+			pAction = new KAction( sLabel, pInfo->psIconName, cut,
+                                   recvr, slot, parent, n);
+			break;
+		}
+	}
+	return pAction;
+}
+
+const char* KStdGameAction::name( StdGameAction id )
+{
+	const KStdGameActionInfo* pInfo = infoPtr( id );
+	return (pInfo) ? pInfo->psName : 0;
+}
+
+KAction *KStdGameAction::gameNew(const TQObject *recvr, const char *slot,
+                             KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(New, name, recvr, slot, parent); }
+KAction *KStdGameAction::load(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Load, name, recvr, slot, parent); }
+KRecentFilesAction *KStdGameAction::loadRecent(const TQObject *recvr, const char *slot,
+                                               KActionCollection *parent, const char *name )
+{ return static_cast<KRecentFilesAction *>(KStdGameAction::create(LoadRecent, name, recvr, slot, parent)); }
+KAction *KStdGameAction::save(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Save, name, recvr, slot, parent); }
+KAction *KStdGameAction::saveAs(const TQObject *recvr, const char *slot,
+                                KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(SaveAs, name, recvr, slot, parent); }
+KAction *KStdGameAction::end(const TQObject *recvr, const char *slot,
+                             KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(End, name, recvr, slot, parent); }
+KToggleAction *KStdGameAction::pause(const TQObject *recvr, const char *slot,
+                                     KActionCollection *parent, const char *name )
+{ return static_cast<KToggleAction *>(KStdGameAction::create(Pause, name, recvr, slot, parent)); }
+KAction *KStdGameAction::highscores(const TQObject *recvr, const char *slot,
+                                    KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Highscores, name, recvr, slot, parent); }
+KAction *KStdGameAction::print(const TQObject *recvr, const char *slot,
+                               KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Print, name, recvr, slot, parent); }
+KAction *KStdGameAction::quit(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Quit, name, recvr, slot, parent); }
+
+KAction *KStdGameAction::repeat(const TQObject *recvr, const char *slot,
+                                KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Repeat, name, recvr, slot, parent); }
+KAction *KStdGameAction::undo(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Undo, name, recvr, slot, parent); }
+
+KAction *KStdGameAction::redo(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Redo, name, recvr, slot, parent); }
+
+KAction *KStdGameAction::roll(const TQObject *recvr, const char *slot,
+                              KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Roll, name, recvr, slot, parent); }
+KAction *KStdGameAction::endTurn(const TQObject *recvr, const char *slot,
+                                 KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(EndTurn, name, recvr, slot, parent); }
+
+KAction *KStdGameAction::carddecks(const TQObject *recvr, const char *slot,
+                                   KActionCollection *parent, const char *name )
+{ return KStdGameAction::create(Carddecks, name, recvr, slot, parent); }
+KAction *KStdGameAction::configureHighscores(const TQObject*recvr, const char *slot,
+                                             KActionCollection *parent, const char *name)
+{ return KStdGameAction::create(ConfigureHighscores, name, recvr, slot, parent); }
+KAction *KStdGameAction::hint(const TQObject*recvr, const char *slot,
+                              KActionCollection *parent, const char *name)
+{ return KStdGameAction::create(Hint, name, recvr, slot, parent); }
+KToggleAction *KStdGameAction::demo(const TQObject*recvr, const char *slot,
+                               KActionCollection *parent, const char *name)
+{ return static_cast<KToggleAction *>(KStdGameAction::create(Demo, name, recvr, slot, parent)); }
+KAction *KStdGameAction::solve(const TQObject*recvr, const char *slot,
+                               KActionCollection *parent, const char *name)
+{ return KStdGameAction::create(Solve, name, recvr, slot, parent); }
+KSelectAction *KStdGameAction::chooseGameType(const TQObject*recvr, const char *slot,
+                                          KActionCollection *parent, const char *name)
+{ return static_cast<KSelectAction *>(KStdGameAction::create(ChooseGameType, name, recvr, slot, parent)); }
+KAction *KStdGameAction::restart(const TQObject*recvr, const char *slot,
+                                 KActionCollection *parent, const char *name)
+{ return KStdGameAction::create(Restart, name, recvr, slot, parent); }
diff --git a/libtdegames/kstdgameaction.h b/libtdegames/kstdgameaction.h
new file mode 100644
index 00000000..6d302050
--- /dev/null
+++ b/libtdegames/kstdgameaction.h
@@ -0,0 +1,261 @@
+/*
+    This file is part of the KDE games library
+    Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License version 2 as published by the Free Software Foundation.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+// this class was shamelessy stolen from kdelibs/tdeui/kstdction.[cpp|h] and
+// after that just edited for our needs
+#ifndef KSTDGAMEACTION_H
+#define KSTDGAMEACTION_H
+
+class KAction;
+class KToggleAction;
+class TQObject;
+class KActionCollection;
+class KRecentFilesAction;
+class KSelectAction;
+#include <kdemacros.h>
+
+//-----------------------------------------------------------------------------
+/**
+ * Replacement for KStdAction for KDE Games
+ *
+ * This class is an extension to the usual KStdAction class which provides
+ * easy access to often used KDE actions
+ *
+ * Games often use different menu entries than other programs, e.g. games use
+ * the menu "game" instead of "file". This class provides the entries which
+ * differ from the usual KStdAction entries.
+ *
+ * @see KStdAction
+ *
+ * @author Andreas Beckermann <b_mann@gmx.de>
+ */
+// #### KDE4: transform in namespace
+class KDE_EXPORT KStdGameAction
+{
+public:
+  /**
+   * The standard menubar and toolbar actions.
+   **/
+    enum StdGameAction {
+        // Game menu
+        New=1, Load, LoadRecent, Save, SaveAs, End, Pause, Highscores,
+        Print, Quit,
+        // Move menu
+        Repeat, Undo, Redo, Roll, EndTurn,
+        // Settings menu
+        Carddecks,
+        ChooseGameType, // @since 3.2
+        ConfigureHighscores, // @since 3.2
+
+        Restart, // @since 3.2
+        Hint, // @since 3.2
+        Demo, // @since 3.2
+        Solve, // @since 3.2
+        ActionNone // @since 3.2
+    };
+
+    KStdGameAction();
+    ~KStdGameAction();
+
+    /**
+     * Creates an action corresponding to the
+     * KStdAction::StdAction enum.
+     * @since 3.2
+     */
+    static KAction* create( StdGameAction id, const char *name,
+			    const TQObject *recvr, const char *slot,
+			    KActionCollection* parent );
+
+    /**
+     * @since 3.2
+     */
+	static KAction* create( StdGameAction id,
+		const TQObject *recvr, const char *slot,
+		KActionCollection* parent )
+		{ return create( id, 0, recvr, slot, parent ); }
+
+
+    /**
+     * Retrieve the action corresponding to the
+     * KStdGameAction::StdGameAction enum.
+     * @deprecated
+     */
+    static KAction *action(StdGameAction act_enum, const TQObject *recvr = 0,
+                           const char *slot = 0, KActionCollection *parent = 0,
+                           const char *name = 0L );
+
+    /**
+     * This will return the internal name of a given standard action.
+     * @since 3.2
+     */
+    static const char* name( StdGameAction id );
+
+    /**
+     * This will return the internal name of a given standard action.
+     * @deprecated
+     */
+    static const char* stdName(StdGameAction act_enum);
+
+    /**
+     * Start a new game
+     **/
+    static KAction *gameNew(const TQObject *recvr = 0, const char *slot = 0,
+                            KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Load a previousely saved game
+     */
+    static KAction *load(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Load a recently loaded game.
+     */
+    static KRecentFilesAction *loadRecent(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Save the current game.
+     */
+    static KAction *save(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Save the current game under a different filename.
+     */
+    static KAction *saveAs(const TQObject *recvr = 0, const char *slot = 0,
+                           KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Pause the game
+     **/
+    static KToggleAction *pause(const TQObject *recvr = 0, const char *slot = 0,
+                           KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Show the highscores.
+     */
+    static KAction *highscores(const TQObject *recvr = 0, const char *slot = 0,
+                           KActionCollection *parent = 0, const char *name = 0L );
+
+
+    /**
+     * End the current game, but do not quit the program. Think of a "close"
+     * entry.
+     */
+    static KAction *end(const TQObject *recvr = 0, const char *slot = 0,
+                          KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Print the current screen? Game? Whatever - hardly used in games but there
+     * is at least one example (ktuberling)
+     */
+    static KAction *print(const TQObject *recvr = 0, const char *slot = 0,
+                          KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Quit the game.
+     */
+    static KAction *quit(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+
+
+    /**
+     * Repeat the last move.
+     **/
+    static KAction *repeat(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Undo the last move
+     **/
+    static KAction *undo(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Redo the last move (which has been undone)
+     **/
+    static KAction *redo(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Roll die or dice
+     **/
+    static KAction *roll(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * End the current turn (not the game). Usually to let the next player
+     * start
+     **/
+    static KAction *endTurn(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+
+    /**
+     * Display configure carddecks dialog.
+     */
+    static KAction *carddecks(const TQObject *recvr = 0, const char *slot = 0,
+                                KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Display configure highscores dialog.
+     * @since 3.2
+     */
+    static KAction *configureHighscores(const TQObject *recvr = 0, const char *slot = 0,
+                                KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Give an advice/hint.
+     * @since 3.2
+     */
+    static KAction *hint(const TQObject *recvr = 0, const char *slot = 0,
+                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Show a demo.
+     * @since 3.2
+     */
+    static KToggleAction *demo(const TQObject *recvr = 0, const char *slot = 0,
+                               KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Solve the game.
+     * @since 3.2
+     */
+    static KAction *solve(const TQObject *recvr = 0, const char *slot = 0,
+                          KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Choose game type.
+     * @since 3.2
+     */
+    static KSelectAction *chooseGameType(const TQObject *recvr = 0, const char *slot = 0,
+                                         KActionCollection *parent = 0, const char *name = 0L );
+
+    /**
+     * Restart game.
+     * @since 3.2
+     */
+    static KAction *restart(const TQObject *recvr = 0, const char *slot = 0,
+                            KActionCollection *parent = 0, const char *name = 0L );
+
+};
+
+#endif
diff --git a/libtdegames/pics/Makefile.am b/libtdegames/pics/Makefile.am
new file mode 100644
index 00000000..20350377
--- /dev/null
+++ b/libtdegames/pics/Makefile.am
@@ -0,0 +1,4 @@
+picsdir = $(kde_datadir)/tdegames/pics
+pics_DATA = star.png
+
+KDE_ICON = action-roll action-highscore action-endturn
diff --git a/libtdegames/pics/cr16-action-endturn.png b/libtdegames/pics/cr16-action-endturn.png
new file mode 100644
index 00000000..00051f46
Binary files /dev/null and b/libtdegames/pics/cr16-action-endturn.png differ
diff --git a/libtdegames/pics/cr16-action-highscore.png b/libtdegames/pics/cr16-action-highscore.png
new file mode 100644
index 00000000..8eb54762
Binary files /dev/null and b/libtdegames/pics/cr16-action-highscore.png differ
diff --git a/libtdegames/pics/cr16-action-roll.png b/libtdegames/pics/cr16-action-roll.png
new file mode 100644
index 00000000..e41d572a
Binary files /dev/null and b/libtdegames/pics/cr16-action-roll.png differ
diff --git a/libtdegames/pics/cr22-action-roll.png b/libtdegames/pics/cr22-action-roll.png
new file mode 100644
index 00000000..bdf85a8b
Binary files /dev/null and b/libtdegames/pics/cr22-action-roll.png differ
diff --git a/libtdegames/pics/cr32-action-endturn.png b/libtdegames/pics/cr32-action-endturn.png
new file mode 100644
index 00000000..fc6d82bc
Binary files /dev/null and b/libtdegames/pics/cr32-action-endturn.png differ
diff --git a/libtdegames/pics/cr32-action-highscore.png b/libtdegames/pics/cr32-action-highscore.png
new file mode 100644
index 00000000..ad797080
Binary files /dev/null and b/libtdegames/pics/cr32-action-highscore.png differ
diff --git a/libtdegames/pics/cr32-action-roll.png b/libtdegames/pics/cr32-action-roll.png
new file mode 100644
index 00000000..8452f4a8
Binary files /dev/null and b/libtdegames/pics/cr32-action-roll.png differ
diff --git a/libtdegames/pics/star.png b/libtdegames/pics/star.png
new file mode 100644
index 00000000..ea88d160
Binary files /dev/null and b/libtdegames/pics/star.png differ
diff --git a/tdegames.lsm b/tdegames.lsm
new file mode 100644
index 00000000..313c0162
--- /dev/null
+++ b/tdegames.lsm
@@ -0,0 +1,11 @@
+Begin4
+Title:          tdegames
+Version:        3.5.10
+Entered-date:   2008-08-26
+Description:    Games written for the K Desktop Environment (KDE)
+Keywords:       KDE X11 desktop Qt 
+Author:         http://bugs.kde.org/ (KDE Bugtracking System)
+Primary-site:   http://www.kde.org/download/
+Platforms:      Unix, Qt
+Copying-policy: GPL, Artistic
+End
-- 
cgit v1.2.3

