summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorAlexander Pickering <alex@cogarr.net>2019-11-10 09:51:14 -0500
committerAlexander Pickering <alex@cogarr.net>2019-11-10 09:51:14 -0500
commitd4d6e247c41c8550779929fec2889f36da8d444e (patch)
tree258d657a303714fa6326bdc299f5c1fa99212d21 /data
parent3ef61ce5e231cda06b634ce6c41b219ef038a62d (diff)
downloadlending_toy-d4d6e247c41c8550779929fec2889f36da8d444e.tar.gz
lending_toy-d4d6e247c41c8550779929fec2889f36da8d444e.tar.bz2
lending_toy-d4d6e247c41c8550779929fec2889f36da8d444e.zip
Added binaries
Diffstat (limited to 'data')
-rw-r--r--data/.gitignore1
-rw-r--r--data/TCP.zipbin0 -> 21655015 bytes
-rw-r--r--data/TCP/TCP Cyberpunk 3.jpgbin0 -> 22292 bytes
-rw-r--r--data/TCP/TCP Cyberpunk 5.jpgbin0 -> 19234 bytes
-rw-r--r--data/TCP/TCP Dwarf 1.jpgbin0 -> 28114 bytes
-rw-r--r--data/TCP/TCP Dwarf 4.jpgbin0 -> 22056 bytes
-rw-r--r--data/TCP/TCP Dwarf 6.jpgbin0 -> 23522 bytes
-rw-r--r--data/TCP/TCP Elf 2.jpgbin0 -> 29732 bytes
-rw-r--r--data/TCP/TCP Gnome 1.jpgbin0 -> 23864 bytes
-rw-r--r--data/TCP/TCP Gnome 2.jpgbin0 -> 25533 bytes
-rw-r--r--data/TCP/TCP Hero 1.jpgbin0 -> 27206 bytes
-rw-r--r--data/TCP/TCP Hero 3.jpgbin0 -> 24389 bytes
-rw-r--r--data/TCP/TCP Human 1.jpgbin0 -> 23631 bytes
-rw-r--r--data/TCP/TCP Human 2.jpgbin0 -> 23057 bytes
-rw-r--r--data/TCP/TCP Human 3.jpgbin0 -> 21226 bytes
-rw-r--r--data/TCP/TCP Human 4.jpgbin0 -> 21735 bytes
-rw-r--r--data/TCP/TCP Human 5.jpgbin0 -> 24657 bytes
-rw-r--r--data/TCP/TCP Human 6.jpgbin0 -> 22213 bytes
-rw-r--r--data/TCP/TCP Human 7.jpgbin0 -> 30894 bytes
-rw-r--r--data/TCP/TCP Human 8.jpgbin0 -> 23620 bytes
-rw-r--r--data/TCP/TCP Human 9.jpgbin0 -> 30145 bytes
-rw-r--r--data/TCP/TCP Mad Scientist 2.jpgbin0 -> 29027 bytes
-rw-r--r--data/TCP/TCP Pirate 1.jpgbin0 -> 21897 bytes
-rw-r--r--data/TCP/TCP Pirate 2.jpgbin0 -> 23916 bytes
-rw-r--r--data/TCP/TCP Pirate 5.jpgbin0 -> 21338 bytes
-rw-r--r--data/TCP/TCP Scary 1.jpgbin0 -> 25502 bytes
-rw-r--r--data/TCP/TCP Scary 2.jpgbin0 -> 30973 bytes
-rw-r--r--data/TCP/TCP Scary 3.jpgbin0 -> 20768 bytes
-rw-r--r--data/TCP/TCP Toon 1.jpgbin0 -> 28194 bytes
-rw-r--r--data/TCP/TCP Vampire 1.jpgbin0 -> 21144 bytes
-rw-r--r--data/TCP/TCP Vampire 2.jpgbin0 -> 31217 bytes
-rw-r--r--data/TCP/TCP Vampire 4.jpgbin0 -> 27067 bytes
-rw-r--r--data/TCP/license.txt9
-rw-r--r--data/TCP/readme.txt13
-rw-r--r--data/TCP/thumbs.html119
-rw-r--r--data/TCP/thumbs/TCP Armored 1.jpgbin0 -> 30185 bytes
-rw-r--r--data/TCP/thumbs/TCP Armored 2.jpgbin0 -> 35207 bytes
-rw-r--r--data/TCP/thumbs/TCP Armored 3.jpgbin0 -> 30333 bytes
-rw-r--r--data/TCP/thumbs/TCP Armored 4.jpgbin0 -> 34126 bytes
-rw-r--r--data/TCP/thumbs/TCP Armored 5.jpgbin0 -> 40629 bytes
-rw-r--r--data/TCP/thumbs/TCP Armored 6.jpgbin0 -> 39495 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 1.jpgbin0 -> 36499 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 2.jpgbin0 -> 33444 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 3.jpgbin0 -> 26135 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 4.jpgbin0 -> 26499 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 5.jpgbin0 -> 24923 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 6.jpgbin0 -> 30305 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 7.jpgbin0 -> 36678 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 8.jpgbin0 -> 31350 bytes
-rw-r--r--data/TCP/thumbs/TCP Cyberpunk 9.jpgbin0 -> 34266 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 1.jpgbin0 -> 35251 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 2.jpgbin0 -> 33638 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 3.jpgbin0 -> 32684 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 4.jpgbin0 -> 27291 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 5.jpgbin0 -> 30842 bytes
-rw-r--r--data/TCP/thumbs/TCP Dwarf 6.jpgbin0 -> 26524 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 1.jpgbin0 -> 33517 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 2.jpgbin0 -> 35141 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 3.jpgbin0 -> 26042 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 4.jpgbin0 -> 23922 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 5.jpgbin0 -> 26200 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 6.jpgbin0 -> 30110 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 7.jpgbin0 -> 28979 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 8.jpgbin0 -> 28557 bytes
-rw-r--r--data/TCP/thumbs/TCP Elf 9.jpgbin0 -> 27475 bytes
-rw-r--r--data/TCP/thumbs/TCP Gnome 1.jpgbin0 -> 26771 bytes
-rw-r--r--data/TCP/thumbs/TCP Gnome 2.jpgbin0 -> 28670 bytes
-rw-r--r--data/TCP/thumbs/TCP Hero 1.jpgbin0 -> 29650 bytes
-rw-r--r--data/TCP/thumbs/TCP Hero 2.jpgbin0 -> 25792 bytes
-rw-r--r--data/TCP/thumbs/TCP Hero 3.jpgbin0 -> 29193 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 1.jpgbin0 -> 28286 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 2.jpgbin0 -> 30037 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 3.jpgbin0 -> 24494 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 4.jpgbin0 -> 26165 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 5.jpgbin0 -> 30853 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 6.jpgbin0 -> 25307 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 7.jpgbin0 -> 38038 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 8.jpgbin0 -> 28948 bytes
-rw-r--r--data/TCP/thumbs/TCP Human 9.jpgbin0 -> 37234 bytes
-rw-r--r--data/TCP/thumbs/TCP Ithilid 1.jpgbin0 -> 38243 bytes
-rw-r--r--data/TCP/thumbs/TCP Mad Scientist 1.jpgbin0 -> 32728 bytes
-rw-r--r--data/TCP/thumbs/TCP Mad Scientist 2.jpgbin0 -> 36414 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 1.jpgbin0 -> 44563 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 2.jpgbin0 -> 23893 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 3.jpgbin0 -> 36094 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 4.jpgbin0 -> 23567 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 5.jpgbin0 -> 39141 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 6.jpgbin0 -> 32284 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 7.jpgbin0 -> 34196 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 8.jpgbin0 -> 36649 bytes
-rw-r--r--data/TCP/thumbs/TCP Manimal 9.jpgbin0 -> 41663 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 1.jpgbin0 -> 25823 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 2.jpgbin0 -> 29290 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 3.jpgbin0 -> 34764 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 4.jpgbin0 -> 31894 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 5.jpgbin0 -> 26100 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 6.jpgbin0 -> 35957 bytes
-rw-r--r--data/TCP/thumbs/TCP Pirate 7.jpgbin0 -> 34088 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 1.jpgbin0 -> 34795 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 2.jpgbin0 -> 26152 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 3.jpgbin0 -> 29342 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 4.jpgbin0 -> 35393 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 5.jpgbin0 -> 31733 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 6.jpgbin0 -> 35704 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 7.jpgbin0 -> 25910 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 8.jpgbin0 -> 24408 bytes
-rw-r--r--data/TCP/thumbs/TCP Robot 9.jpgbin0 -> 35391 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 1.jpgbin0 -> 31309 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 2.jpgbin0 -> 32865 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 3.jpgbin0 -> 23593 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 4.jpgbin0 -> 36928 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 5.jpgbin0 -> 36781 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 6.jpgbin0 -> 30467 bytes
-rw-r--r--data/TCP/thumbs/TCP Scary 7.jpgbin0 -> 32033 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 1.jpgbin0 -> 35255 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 2.jpgbin0 -> 29452 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 3.jpgbin0 -> 33857 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 4.jpgbin0 -> 27215 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 5.jpgbin0 -> 31559 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 6.jpgbin0 -> 26196 bytes
-rw-r--r--data/TCP/thumbs/TCP Steampunk 7.jpgbin0 -> 34830 bytes
-rw-r--r--data/TCP/thumbs/TCP Toon 1.jpgbin0 -> 32542 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 1.jpgbin0 -> 31080 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 2.jpgbin0 -> 36706 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 3.jpgbin0 -> 35160 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 4.jpgbin0 -> 33539 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 5.jpgbin0 -> 28235 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 6.jpgbin0 -> 28166 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 7.jpgbin0 -> 31164 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 8.jpgbin0 -> 35783 bytes
-rw-r--r--data/TCP/thumbs/TCP Troll 9.jpgbin0 -> 33259 bytes
-rw-r--r--data/TCP/thumbs/TCP Vampire 1.jpgbin0 -> 24667 bytes
-rw-r--r--data/TCP/thumbs/TCP Vampire 2.jpgbin0 -> 35413 bytes
-rw-r--r--data/TCP/thumbs/TCP Vampire 3.jpgbin0 -> 25976 bytes
-rw-r--r--data/TCP/thumbs/TCP Vampire 4.jpgbin0 -> 27399 bytes
-rw-r--r--data/TCP/thumbs/TCP Vampire 5.jpgbin0 -> 26311 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 1.jpgbin0 -> 30622 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 2.jpgbin0 -> 29421 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 3.jpgbin0 -> 28186 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 4.jpgbin0 -> 30974 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 5.jpgbin0 -> 33169 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 6.jpgbin0 -> 31289 bytes
-rw-r--r--data/TCP/thumbs/TCP Zombie 7.jpgbin0 -> 28776 bytes
-rw-r--r--data/bankrupt.pngbin0 -> 11721 bytes
-rw-r--r--data/credit.lua1166
-rw-r--r--data/deviceinit.lua91
-rw-r--r--data/first_names.lua202
-rw-r--r--data/init.lua20
-rw-r--r--data/last_names.lua1003
-rw-r--r--data/lvl1_intro.pngbin0 -> 25370 bytes
-rw-r--r--data/lvl1_intro.xcfbin0 -> 415354 bytes
-rw-r--r--data/lvl2_intro.pngbin0 -> 26930 bytes
-rw-r--r--data/lvl3_intro.pngbin0 -> 18707 bytes
-rw-r--r--data/lvl4_intro.pngbin0 -> 21735 bytes
-rw-r--r--data/lvl5_intro.pngbin0 -> 29735 bytes
-rw-r--r--data/lvl6_intro.pngbin0 -> 15965 bytes
-rw-r--r--data/lvl7_intro.pngbin0 -> 12773 bytes
-rw-r--r--data/lvl8_intro.pngbin0 -> 18520 bytes
-rw-r--r--data/lvl9_intro.pngbin0 -> 14548 bytes
-rw-r--r--data/lvlfinal_intro.pngbin0 -> 8124 bytes
-rw-r--r--data/mahjong.lua886
-rw-r--r--data/names.txt200
-rw-r--r--data/portraits.lua33
-rw-r--r--data/res/font.xmlbin0 -> 181152 bytes
-rw-r--r--data/res/font0.pngbin0 -> 114640 bytes
-rw-r--r--data/res/font1.pngbin0 -> 101596 bytes
-rw-r--r--data/res/font2.pngbin0 -> 39061 bytes
-rw-r--r--data/smol/TCP Cyberpunk 3.jpgbin0 -> 11347 bytes
-rw-r--r--data/smol/TCP Cyberpunk 5.jpgbin0 -> 8284 bytes
-rw-r--r--data/smol/TCP Dwarf 1.jpgbin0 -> 13576 bytes
-rw-r--r--data/smol/TCP Dwarf 4.jpgbin0 -> 10200 bytes
-rw-r--r--data/smol/TCP Dwarf 6.jpgbin0 -> 11413 bytes
-rw-r--r--data/smol/TCP Elf 2.jpgbin0 -> 14341 bytes
-rw-r--r--data/smol/TCP Gnome 1.jpgbin0 -> 11689 bytes
-rw-r--r--data/smol/TCP Gnome 2.jpgbin0 -> 12284 bytes
-rw-r--r--data/smol/TCP Hero 1.jpgbin0 -> 14345 bytes
-rw-r--r--data/smol/TCP Hero 3.jpgbin0 -> 11985 bytes
-rw-r--r--data/smol/TCP Human 1.jpgbin0 -> 10920 bytes
-rw-r--r--data/smol/TCP Human 2.jpgbin0 -> 10920 bytes
-rw-r--r--data/smol/TCP Human 3.jpgbin0 -> 9863 bytes
-rw-r--r--data/smol/TCP Human 4.jpgbin0 -> 10294 bytes
-rw-r--r--data/smol/TCP Human 5.jpgbin0 -> 11436 bytes
-rw-r--r--data/smol/TCP Human 6.jpgbin0 -> 10352 bytes
-rw-r--r--data/smol/TCP Human 7.jpgbin0 -> 15892 bytes
-rw-r--r--data/smol/TCP Human 8.jpgbin0 -> 11570 bytes
-rw-r--r--data/smol/TCP Human 9.jpgbin0 -> 16251 bytes
-rw-r--r--data/smol/TCP Mad Scientist 2.jpgbin0 -> 14426 bytes
-rw-r--r--data/smol/TCP Pirate 1.jpgbin0 -> 10899 bytes
-rw-r--r--data/smol/TCP Pirate 2.jpgbin0 -> 11792 bytes
-rw-r--r--data/smol/TCP Pirate 5.jpgbin0 -> 10302 bytes
-rw-r--r--data/smol/TCP Scary 1.jpgbin0 -> 12276 bytes
-rw-r--r--data/smol/TCP Scary 2.jpgbin0 -> 15533 bytes
-rw-r--r--data/smol/TCP Scary 3.jpgbin0 -> 9478 bytes
-rw-r--r--data/smol/TCP Toon 1.jpgbin0 -> 13816 bytes
-rw-r--r--data/smol/TCP Vampire 1.jpgbin0 -> 10074 bytes
-rw-r--r--data/smol/TCP Vampire 2.jpgbin0 -> 15996 bytes
-rw-r--r--data/smol/TCP Vampire 4.jpgbin0 -> 13941 bytes
-rw-r--r--data/traits.lua134
198 files changed, 3877 insertions, 0 deletions
diff --git a/data/.gitignore b/data/.gitignore
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/data/.gitignore
@@ -0,0 +1 @@
+
diff --git a/data/TCP.zip b/data/TCP.zip
new file mode 100644
index 0000000..8c1290a
--- /dev/null
+++ b/data/TCP.zip
Binary files differ
diff --git a/data/TCP/TCP Cyberpunk 3.jpg b/data/TCP/TCP Cyberpunk 3.jpg
new file mode 100644
index 0000000..ce9179a
--- /dev/null
+++ b/data/TCP/TCP Cyberpunk 3.jpg
Binary files differ
diff --git a/data/TCP/TCP Cyberpunk 5.jpg b/data/TCP/TCP Cyberpunk 5.jpg
new file mode 100644
index 0000000..fc47523
--- /dev/null
+++ b/data/TCP/TCP Cyberpunk 5.jpg
Binary files differ
diff --git a/data/TCP/TCP Dwarf 1.jpg b/data/TCP/TCP Dwarf 1.jpg
new file mode 100644
index 0000000..c183834
--- /dev/null
+++ b/data/TCP/TCP Dwarf 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Dwarf 4.jpg b/data/TCP/TCP Dwarf 4.jpg
new file mode 100644
index 0000000..8cc4fd7
--- /dev/null
+++ b/data/TCP/TCP Dwarf 4.jpg
Binary files differ
diff --git a/data/TCP/TCP Dwarf 6.jpg b/data/TCP/TCP Dwarf 6.jpg
new file mode 100644
index 0000000..d31867f
--- /dev/null
+++ b/data/TCP/TCP Dwarf 6.jpg
Binary files differ
diff --git a/data/TCP/TCP Elf 2.jpg b/data/TCP/TCP Elf 2.jpg
new file mode 100644
index 0000000..f9f3dd7
--- /dev/null
+++ b/data/TCP/TCP Elf 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Gnome 1.jpg b/data/TCP/TCP Gnome 1.jpg
new file mode 100644
index 0000000..1f771e6
--- /dev/null
+++ b/data/TCP/TCP Gnome 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Gnome 2.jpg b/data/TCP/TCP Gnome 2.jpg
new file mode 100644
index 0000000..615cf7c
--- /dev/null
+++ b/data/TCP/TCP Gnome 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Hero 1.jpg b/data/TCP/TCP Hero 1.jpg
new file mode 100644
index 0000000..228dc19
--- /dev/null
+++ b/data/TCP/TCP Hero 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Hero 3.jpg b/data/TCP/TCP Hero 3.jpg
new file mode 100644
index 0000000..566c010
--- /dev/null
+++ b/data/TCP/TCP Hero 3.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 1.jpg b/data/TCP/TCP Human 1.jpg
new file mode 100644
index 0000000..633c049
--- /dev/null
+++ b/data/TCP/TCP Human 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 2.jpg b/data/TCP/TCP Human 2.jpg
new file mode 100644
index 0000000..5b16a27
--- /dev/null
+++ b/data/TCP/TCP Human 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 3.jpg b/data/TCP/TCP Human 3.jpg
new file mode 100644
index 0000000..17753e2
--- /dev/null
+++ b/data/TCP/TCP Human 3.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 4.jpg b/data/TCP/TCP Human 4.jpg
new file mode 100644
index 0000000..072c3e4
--- /dev/null
+++ b/data/TCP/TCP Human 4.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 5.jpg b/data/TCP/TCP Human 5.jpg
new file mode 100644
index 0000000..963f69f
--- /dev/null
+++ b/data/TCP/TCP Human 5.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 6.jpg b/data/TCP/TCP Human 6.jpg
new file mode 100644
index 0000000..01c72a9
--- /dev/null
+++ b/data/TCP/TCP Human 6.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 7.jpg b/data/TCP/TCP Human 7.jpg
new file mode 100644
index 0000000..3c8bd7a
--- /dev/null
+++ b/data/TCP/TCP Human 7.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 8.jpg b/data/TCP/TCP Human 8.jpg
new file mode 100644
index 0000000..12887a1
--- /dev/null
+++ b/data/TCP/TCP Human 8.jpg
Binary files differ
diff --git a/data/TCP/TCP Human 9.jpg b/data/TCP/TCP Human 9.jpg
new file mode 100644
index 0000000..119450a
--- /dev/null
+++ b/data/TCP/TCP Human 9.jpg
Binary files differ
diff --git a/data/TCP/TCP Mad Scientist 2.jpg b/data/TCP/TCP Mad Scientist 2.jpg
new file mode 100644
index 0000000..389b782
--- /dev/null
+++ b/data/TCP/TCP Mad Scientist 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Pirate 1.jpg b/data/TCP/TCP Pirate 1.jpg
new file mode 100644
index 0000000..f636f73
--- /dev/null
+++ b/data/TCP/TCP Pirate 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Pirate 2.jpg b/data/TCP/TCP Pirate 2.jpg
new file mode 100644
index 0000000..ff31630
--- /dev/null
+++ b/data/TCP/TCP Pirate 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Pirate 5.jpg b/data/TCP/TCP Pirate 5.jpg
new file mode 100644
index 0000000..bfd02f1
--- /dev/null
+++ b/data/TCP/TCP Pirate 5.jpg
Binary files differ
diff --git a/data/TCP/TCP Scary 1.jpg b/data/TCP/TCP Scary 1.jpg
new file mode 100644
index 0000000..5a9d618
--- /dev/null
+++ b/data/TCP/TCP Scary 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Scary 2.jpg b/data/TCP/TCP Scary 2.jpg
new file mode 100644
index 0000000..5dac35b
--- /dev/null
+++ b/data/TCP/TCP Scary 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Scary 3.jpg b/data/TCP/TCP Scary 3.jpg
new file mode 100644
index 0000000..0a42c32
--- /dev/null
+++ b/data/TCP/TCP Scary 3.jpg
Binary files differ
diff --git a/data/TCP/TCP Toon 1.jpg b/data/TCP/TCP Toon 1.jpg
new file mode 100644
index 0000000..7620763
--- /dev/null
+++ b/data/TCP/TCP Toon 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Vampire 1.jpg b/data/TCP/TCP Vampire 1.jpg
new file mode 100644
index 0000000..f2a1804
--- /dev/null
+++ b/data/TCP/TCP Vampire 1.jpg
Binary files differ
diff --git a/data/TCP/TCP Vampire 2.jpg b/data/TCP/TCP Vampire 2.jpg
new file mode 100644
index 0000000..c27256d
--- /dev/null
+++ b/data/TCP/TCP Vampire 2.jpg
Binary files differ
diff --git a/data/TCP/TCP Vampire 4.jpg b/data/TCP/TCP Vampire 4.jpg
new file mode 100644
index 0000000..2b6a87e
--- /dev/null
+++ b/data/TCP/TCP Vampire 4.jpg
Binary files differ
diff --git a/data/TCP/license.txt b/data/TCP/license.txt
new file mode 100644
index 0000000..0c24fd1
--- /dev/null
+++ b/data/TCP/license.txt
@@ -0,0 +1,9 @@
+This work is licensed under the Creative Commons Attribution 3.0 Unported License.
+To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/
+or send a letter to:
+
+Creative Commons
+444 Castro Street
+Suite 900
+Mountain View, California, 94041, USA
+
diff --git a/data/TCP/readme.txt b/data/TCP/readme.txt
new file mode 100644
index 0000000..3fe60fe
--- /dev/null
+++ b/data/TCP/readme.txt
@@ -0,0 +1,13 @@
+Thank you for downloading the Terrible Character Portraits.
+
+The art was done by Jeff Preston - http://team-preston.com
+
+The project was coordinated by Duane O'Brien - http://aterribleidea.com/ccworks/
+
+The project was funded through Kickstarter - http://kck.st/dogX5W
+
+The backers were numerous and generous. You have our gratitude.
+
+Please respect the license, it is very open. See license.txt for details.
+
+Support the Creative Commons.
diff --git a/data/TCP/thumbs.html b/data/TCP/thumbs.html
new file mode 100644
index 0000000..8d81e2e
--- /dev/null
+++ b/data/TCP/thumbs.html
@@ -0,0 +1,119 @@
+<p>These images are licensed under the Creative Commons Attribution 3.0 Unported License.
+To view a copy of this license, visit
+<a href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</a>
+or send a letter to:<br />
+
+Creative Commons<br />
+444 Castro Street<br />
+Suite 900 <br />
+Mountain View, California, 94041, USA<br />
+</p>
+
+<a href="TCP Armored 1.jpg"><img src="thumbs/TCP Armored 1.jpg" /></a>
+<a href="TCP Armored 2.jpg"><img src="thumbs/TCP Armored 2.jpg" /></a>
+<a href="TCP Armored 3.jpg"><img src="thumbs/TCP Armored 3.jpg" /></a>
+<a href="TCP Armored 4.jpg"><img src="thumbs/TCP Armored 4.jpg" /></a>
+<a href="TCP Armored 5.jpg"><img src="thumbs/TCP Armored 5.jpg" /></a>
+<a href="TCP Armored 6.jpg"><img src="thumbs/TCP Armored 6.jpg" /></a>
+<a href="TCP Cyberpunk 1.jpg"><img src="thumbs/TCP Cyberpunk 1.jpg" /></a>
+<a href="TCP Cyberpunk 2.jpg"><img src="thumbs/TCP Cyberpunk 2.jpg" /></a>
+<a href="TCP Cyberpunk 3.jpg"><img src="thumbs/TCP Cyberpunk 3.jpg" /></a>
+<a href="TCP Cyberpunk 4.jpg"><img src="thumbs/TCP Cyberpunk 4.jpg" /></a>
+<a href="TCP Cyberpunk 5.jpg"><img src="thumbs/TCP Cyberpunk 5.jpg" /></a>
+<a href="TCP Cyberpunk 6.jpg"><img src="thumbs/TCP Cyberpunk 6.jpg" /></a>
+<a href="TCP Cyberpunk 7.jpg"><img src="thumbs/TCP Cyberpunk 7.jpg" /></a>
+<a href="TCP Cyberpunk 8.jpg"><img src="thumbs/TCP Cyberpunk 8.jpg" /></a>
+<a href="TCP Cyberpunk 9.jpg"><img src="thumbs/TCP Cyberpunk 9.jpg" /></a>
+<a href="TCP Dwarf 1.jpg"><img src="thumbs/TCP Dwarf 1.jpg" /></a>
+<a href="TCP Dwarf 2.jpg"><img src="thumbs/TCP Dwarf 2.jpg" /></a>
+<a href="TCP Dwarf 3.jpg"><img src="thumbs/TCP Dwarf 3.jpg" /></a>
+<a href="TCP Dwarf 4.jpg"><img src="thumbs/TCP Dwarf 4.jpg" /></a>
+<a href="TCP Dwarf 5.jpg"><img src="thumbs/TCP Dwarf 5.jpg" /></a>
+<a href="TCP Dwarf 6.jpg"><img src="thumbs/TCP Dwarf 6.jpg" /></a>
+<a href="TCP Elf 1.jpg"><img src="thumbs/TCP Elf 1.jpg" /></a>
+<a href="TCP Elf 2.jpg"><img src="thumbs/TCP Elf 2.jpg" /></a>
+<a href="TCP Elf 3.jpg"><img src="thumbs/TCP Elf 3.jpg" /></a>
+<a href="TCP Elf 4.jpg"><img src="thumbs/TCP Elf 4.jpg" /></a>
+<a href="TCP Elf 5.jpg"><img src="thumbs/TCP Elf 5.jpg" /></a>
+<a href="TCP Elf 6.jpg"><img src="thumbs/TCP Elf 6.jpg" /></a>
+<a href="TCP Elf 7.jpg"><img src="thumbs/TCP Elf 7.jpg" /></a>
+<a href="TCP Elf 8.jpg"><img src="thumbs/TCP Elf 8.jpg" /></a>
+<a href="TCP Elf 9.jpg"><img src="thumbs/TCP Elf 9.jpg" /></a>
+<a href="TCP Gnome 1.jpg"><img src="thumbs/TCP Gnome 1.jpg" /></a>
+<a href="TCP Gnome 2.jpg"><img src="thumbs/TCP Gnome 2.jpg" /></a>
+<a href="TCP Hero 1.jpg"><img src="thumbs/TCP Hero 1.jpg" /></a>
+<a href="TCP Hero 2.jpg"><img src="thumbs/TCP Hero 2.jpg" /></a>
+<a href="TCP Hero 3.jpg"><img src="thumbs/TCP Hero 3.jpg" /></a>
+<a href="TCP Human 1.jpg"><img src="thumbs/TCP Human 1.jpg" /></a>
+<a href="TCP Human 2.jpg"><img src="thumbs/TCP Human 2.jpg" /></a>
+<a href="TCP Human 3.jpg"><img src="thumbs/TCP Human 3.jpg" /></a>
+<a href="TCP Human 4.jpg"><img src="thumbs/TCP Human 4.jpg" /></a>
+<a href="TCP Human 5.jpg"><img src="thumbs/TCP Human 5.jpg" /></a>
+<a href="TCP Human 6.jpg"><img src="thumbs/TCP Human 6.jpg" /></a>
+<a href="TCP Human 7.jpg"><img src="thumbs/TCP Human 7.jpg" /></a>
+<a href="TCP Human 8.jpg"><img src="thumbs/TCP Human 8.jpg" /></a>
+<a href="TCP Human 9.jpg"><img src="thumbs/TCP Human 9.jpg" /></a>
+<a href="TCP Ithilid 1.jpg"><img src="thumbs/TCP Ithilid 1.jpg" /></a>
+<a href="TCP Mad Scientist 1.jpg"><img src="thumbs/TCP Mad Scientist 1.jpg" /></a>
+<a href="TCP Mad Scientist 2.jpg"><img src="thumbs/TCP Mad Scientist 2.jpg" /></a>
+<a href="TCP Manimal 1.jpg"><img src="thumbs/TCP Manimal 1.jpg" /></a>
+<a href="TCP Manimal 2.jpg"><img src="thumbs/TCP Manimal 2.jpg" /></a>
+<a href="TCP Manimal 3.jpg"><img src="thumbs/TCP Manimal 3.jpg" /></a>
+<a href="TCP Manimal 4.jpg"><img src="thumbs/TCP Manimal 4.jpg" /></a>
+<a href="TCP Manimal 5.jpg"><img src="thumbs/TCP Manimal 5.jpg" /></a>
+<a href="TCP Manimal 6.jpg"><img src="thumbs/TCP Manimal 6.jpg" /></a>
+<a href="TCP Manimal 7.jpg"><img src="thumbs/TCP Manimal 7.jpg" /></a>
+<a href="TCP Manimal 8.jpg"><img src="thumbs/TCP Manimal 8.jpg" /></a>
+<a href="TCP Manimal 9.jpg"><img src="thumbs/TCP Manimal 9.jpg" /></a>
+<a href="TCP Pirate 1.jpg"><img src="thumbs/TCP Pirate 1.jpg" /></a>
+<a href="TCP Pirate 2.jpg"><img src="thumbs/TCP Pirate 2.jpg" /></a>
+<a href="TCP Pirate 3.jpg"><img src="thumbs/TCP Pirate 3.jpg" /></a>
+<a href="TCP Pirate 4.jpg"><img src="thumbs/TCP Pirate 4.jpg" /></a>
+<a href="TCP Pirate 5.jpg"><img src="thumbs/TCP Pirate 5.jpg" /></a>
+<a href="TCP Pirate 6.jpg"><img src="thumbs/TCP Pirate 6.jpg" /></a>
+<a href="TCP Pirate 7.jpg"><img src="thumbs/TCP Pirate 7.jpg" /></a>
+<a href="TCP Robot 1.jpg"><img src="thumbs/TCP Robot 1.jpg" /></a>
+<a href="TCP Robot 2.jpg"><img src="thumbs/TCP Robot 2.jpg" /></a>
+<a href="TCP Robot 3.jpg"><img src="thumbs/TCP Robot 3.jpg" /></a>
+<a href="TCP Robot 4.jpg"><img src="thumbs/TCP Robot 4.jpg" /></a>
+<a href="TCP Robot 5.jpg"><img src="thumbs/TCP Robot 5.jpg" /></a>
+<a href="TCP Robot 6.jpg"><img src="thumbs/TCP Robot 6.jpg" /></a>
+<a href="TCP Robot 7.jpg"><img src="thumbs/TCP Robot 7.jpg" /></a>
+<a href="TCP Robot 8.jpg"><img src="thumbs/TCP Robot 8.jpg" /></a>
+<a href="TCP Robot 9.jpg"><img src="thumbs/TCP Robot 9.jpg" /></a>
+<a href="TCP Scary 1.jpg"><img src="thumbs/TCP Scary 1.jpg" /></a>
+<a href="TCP Scary 2.jpg"><img src="thumbs/TCP Scary 2.jpg" /></a>
+<a href="TCP Scary 3.jpg"><img src="thumbs/TCP Scary 3.jpg" /></a>
+<a href="TCP Scary 4.jpg"><img src="thumbs/TCP Scary 4.jpg" /></a>
+<a href="TCP Scary 5.jpg"><img src="thumbs/TCP Scary 5.jpg" /></a>
+<a href="TCP Scary 6.jpg"><img src="thumbs/TCP Scary 6.jpg" /></a>
+<a href="TCP Scary 7.jpg"><img src="thumbs/TCP Scary 7.jpg" /></a>
+<a href="TCP Steampunk 1.jpg"><img src="thumbs/TCP Steampunk 1.jpg" /></a>
+<a href="TCP Steampunk 2.jpg"><img src="thumbs/TCP Steampunk 2.jpg" /></a>
+<a href="TCP Steampunk 3.jpg"><img src="thumbs/TCP Steampunk 3.jpg" /></a>
+<a href="TCP Steampunk 4.jpg"><img src="thumbs/TCP Steampunk 4.jpg" /></a>
+<a href="TCP Steampunk 5.jpg"><img src="thumbs/TCP Steampunk 5.jpg" /></a>
+<a href="TCP Steampunk 6.jpg"><img src="thumbs/TCP Steampunk 6.jpg" /></a>
+<a href="TCP Steampunk 7.jpg"><img src="thumbs/TCP Steampunk 7.jpg" /></a>
+<a href="TCP Toon 1.jpg"><img src="thumbs/TCP Toon 1.jpg" /></a>
+<a href="TCP Troll 1.jpg"><img src="thumbs/TCP Troll 1.jpg" /></a>
+<a href="TCP Troll 2.jpg"><img src="thumbs/TCP Troll 2.jpg" /></a>
+<a href="TCP Troll 3.jpg"><img src="thumbs/TCP Troll 3.jpg" /></a>
+<a href="TCP Troll 4.jpg"><img src="thumbs/TCP Troll 4.jpg" /></a>
+<a href="TCP Troll 5.jpg"><img src="thumbs/TCP Troll 5.jpg" /></a>
+<a href="TCP Troll 6.jpg"><img src="thumbs/TCP Troll 6.jpg" /></a>
+<a href="TCP Troll 7.jpg"><img src="thumbs/TCP Troll 7.jpg" /></a>
+<a href="TCP Troll 8.jpg"><img src="thumbs/TCP Troll 8.jpg" /></a>
+<a href="TCP Troll 9.jpg"><img src="thumbs/TCP Troll 9.jpg" /></a>
+<a href="TCP Vampire 1.jpg"><img src="thumbs/TCP Vampire 1.jpg" /></a>
+<a href="TCP Vampire 2.jpg"><img src="thumbs/TCP Vampire 2.jpg" /></a>
+<a href="TCP Vampire 3.jpg"><img src="thumbs/TCP Vampire 3.jpg" /></a>
+<a href="TCP Vampire 4.jpg"><img src="thumbs/TCP Vampire 4.jpg" /></a>
+<a href="TCP Vampire 5.jpg"><img src="thumbs/TCP Vampire 5.jpg" /></a>
+<a href="TCP Zombie 1.jpg"><img src="thumbs/TCP Zombie 1.jpg" /></a>
+<a href="TCP Zombie 2.jpg"><img src="thumbs/TCP Zombie 2.jpg" /></a>
+<a href="TCP Zombie 3.jpg"><img src="thumbs/TCP Zombie 3.jpg" /></a>
+<a href="TCP Zombie 4.jpg"><img src="thumbs/TCP Zombie 4.jpg" /></a>
+<a href="TCP Zombie 5.jpg"><img src="thumbs/TCP Zombie 5.jpg" /></a>
+<a href="TCP Zombie 6.jpg"><img src="thumbs/TCP Zombie 6.jpg" /></a>
+<a href="TCP Zombie 7.jpg"><img src="thumbs/TCP Zombie 7.jpg" /></a>
diff --git a/data/TCP/thumbs/TCP Armored 1.jpg b/data/TCP/thumbs/TCP Armored 1.jpg
new file mode 100644
index 0000000..023e497
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Armored 2.jpg b/data/TCP/thumbs/TCP Armored 2.jpg
new file mode 100644
index 0000000..0d3a4cd
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Armored 3.jpg b/data/TCP/thumbs/TCP Armored 3.jpg
new file mode 100644
index 0000000..c482cd5
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Armored 4.jpg b/data/TCP/thumbs/TCP Armored 4.jpg
new file mode 100644
index 0000000..6942999
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Armored 5.jpg b/data/TCP/thumbs/TCP Armored 5.jpg
new file mode 100644
index 0000000..f458467
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Armored 6.jpg b/data/TCP/thumbs/TCP Armored 6.jpg
new file mode 100644
index 0000000..ffd70e9
--- /dev/null
+++ b/data/TCP/thumbs/TCP Armored 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 1.jpg b/data/TCP/thumbs/TCP Cyberpunk 1.jpg
new file mode 100644
index 0000000..ca1ed2f
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 2.jpg b/data/TCP/thumbs/TCP Cyberpunk 2.jpg
new file mode 100644
index 0000000..80ccd89
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 3.jpg b/data/TCP/thumbs/TCP Cyberpunk 3.jpg
new file mode 100644
index 0000000..413d188
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 4.jpg b/data/TCP/thumbs/TCP Cyberpunk 4.jpg
new file mode 100644
index 0000000..fdecaf6
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 5.jpg b/data/TCP/thumbs/TCP Cyberpunk 5.jpg
new file mode 100644
index 0000000..269dd7f
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 6.jpg b/data/TCP/thumbs/TCP Cyberpunk 6.jpg
new file mode 100644
index 0000000..711bbcd
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 7.jpg b/data/TCP/thumbs/TCP Cyberpunk 7.jpg
new file mode 100644
index 0000000..9f28666
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 8.jpg b/data/TCP/thumbs/TCP Cyberpunk 8.jpg
new file mode 100644
index 0000000..cc8c56f
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Cyberpunk 9.jpg b/data/TCP/thumbs/TCP Cyberpunk 9.jpg
new file mode 100644
index 0000000..85ae007
--- /dev/null
+++ b/data/TCP/thumbs/TCP Cyberpunk 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 1.jpg b/data/TCP/thumbs/TCP Dwarf 1.jpg
new file mode 100644
index 0000000..6b764a1
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 2.jpg b/data/TCP/thumbs/TCP Dwarf 2.jpg
new file mode 100644
index 0000000..953ef54
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 3.jpg b/data/TCP/thumbs/TCP Dwarf 3.jpg
new file mode 100644
index 0000000..daaa6fd
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 4.jpg b/data/TCP/thumbs/TCP Dwarf 4.jpg
new file mode 100644
index 0000000..045db43
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 5.jpg b/data/TCP/thumbs/TCP Dwarf 5.jpg
new file mode 100644
index 0000000..47bc5d4
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Dwarf 6.jpg b/data/TCP/thumbs/TCP Dwarf 6.jpg
new file mode 100644
index 0000000..2bf75ed
--- /dev/null
+++ b/data/TCP/thumbs/TCP Dwarf 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 1.jpg b/data/TCP/thumbs/TCP Elf 1.jpg
new file mode 100644
index 0000000..b8aa856
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 2.jpg b/data/TCP/thumbs/TCP Elf 2.jpg
new file mode 100644
index 0000000..a2fa464
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 3.jpg b/data/TCP/thumbs/TCP Elf 3.jpg
new file mode 100644
index 0000000..1a02c53
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 4.jpg b/data/TCP/thumbs/TCP Elf 4.jpg
new file mode 100644
index 0000000..28ef3a0
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 5.jpg b/data/TCP/thumbs/TCP Elf 5.jpg
new file mode 100644
index 0000000..0518aac
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 6.jpg b/data/TCP/thumbs/TCP Elf 6.jpg
new file mode 100644
index 0000000..1589fd2
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 7.jpg b/data/TCP/thumbs/TCP Elf 7.jpg
new file mode 100644
index 0000000..18a600a
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 8.jpg b/data/TCP/thumbs/TCP Elf 8.jpg
new file mode 100644
index 0000000..5f0fd3b
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Elf 9.jpg b/data/TCP/thumbs/TCP Elf 9.jpg
new file mode 100644
index 0000000..c02024d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Elf 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Gnome 1.jpg b/data/TCP/thumbs/TCP Gnome 1.jpg
new file mode 100644
index 0000000..ad28401
--- /dev/null
+++ b/data/TCP/thumbs/TCP Gnome 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Gnome 2.jpg b/data/TCP/thumbs/TCP Gnome 2.jpg
new file mode 100644
index 0000000..f5610fa
--- /dev/null
+++ b/data/TCP/thumbs/TCP Gnome 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Hero 1.jpg b/data/TCP/thumbs/TCP Hero 1.jpg
new file mode 100644
index 0000000..7a94424
--- /dev/null
+++ b/data/TCP/thumbs/TCP Hero 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Hero 2.jpg b/data/TCP/thumbs/TCP Hero 2.jpg
new file mode 100644
index 0000000..e63d156
--- /dev/null
+++ b/data/TCP/thumbs/TCP Hero 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Hero 3.jpg b/data/TCP/thumbs/TCP Hero 3.jpg
new file mode 100644
index 0000000..cc93be6
--- /dev/null
+++ b/data/TCP/thumbs/TCP Hero 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 1.jpg b/data/TCP/thumbs/TCP Human 1.jpg
new file mode 100644
index 0000000..d9e79c8
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 2.jpg b/data/TCP/thumbs/TCP Human 2.jpg
new file mode 100644
index 0000000..d309f7a
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 3.jpg b/data/TCP/thumbs/TCP Human 3.jpg
new file mode 100644
index 0000000..f87acb1
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 4.jpg b/data/TCP/thumbs/TCP Human 4.jpg
new file mode 100644
index 0000000..92bb24a
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 5.jpg b/data/TCP/thumbs/TCP Human 5.jpg
new file mode 100644
index 0000000..c998567
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 6.jpg b/data/TCP/thumbs/TCP Human 6.jpg
new file mode 100644
index 0000000..4fa58b3
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 7.jpg b/data/TCP/thumbs/TCP Human 7.jpg
new file mode 100644
index 0000000..e9c48ad
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 8.jpg b/data/TCP/thumbs/TCP Human 8.jpg
new file mode 100644
index 0000000..ba4db9d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Human 9.jpg b/data/TCP/thumbs/TCP Human 9.jpg
new file mode 100644
index 0000000..58d0268
--- /dev/null
+++ b/data/TCP/thumbs/TCP Human 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Ithilid 1.jpg b/data/TCP/thumbs/TCP Ithilid 1.jpg
new file mode 100644
index 0000000..1271839
--- /dev/null
+++ b/data/TCP/thumbs/TCP Ithilid 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Mad Scientist 1.jpg b/data/TCP/thumbs/TCP Mad Scientist 1.jpg
new file mode 100644
index 0000000..876df39
--- /dev/null
+++ b/data/TCP/thumbs/TCP Mad Scientist 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Mad Scientist 2.jpg b/data/TCP/thumbs/TCP Mad Scientist 2.jpg
new file mode 100644
index 0000000..5f21e5a
--- /dev/null
+++ b/data/TCP/thumbs/TCP Mad Scientist 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 1.jpg b/data/TCP/thumbs/TCP Manimal 1.jpg
new file mode 100644
index 0000000..b286f5d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 2.jpg b/data/TCP/thumbs/TCP Manimal 2.jpg
new file mode 100644
index 0000000..7edec29
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 3.jpg b/data/TCP/thumbs/TCP Manimal 3.jpg
new file mode 100644
index 0000000..5916d6d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 4.jpg b/data/TCP/thumbs/TCP Manimal 4.jpg
new file mode 100644
index 0000000..58bff69
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 5.jpg b/data/TCP/thumbs/TCP Manimal 5.jpg
new file mode 100644
index 0000000..4755df7
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 6.jpg b/data/TCP/thumbs/TCP Manimal 6.jpg
new file mode 100644
index 0000000..8554646
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 7.jpg b/data/TCP/thumbs/TCP Manimal 7.jpg
new file mode 100644
index 0000000..fb12f00
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 8.jpg b/data/TCP/thumbs/TCP Manimal 8.jpg
new file mode 100644
index 0000000..69a2463
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Manimal 9.jpg b/data/TCP/thumbs/TCP Manimal 9.jpg
new file mode 100644
index 0000000..b238da8
--- /dev/null
+++ b/data/TCP/thumbs/TCP Manimal 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 1.jpg b/data/TCP/thumbs/TCP Pirate 1.jpg
new file mode 100644
index 0000000..816e8d3
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 2.jpg b/data/TCP/thumbs/TCP Pirate 2.jpg
new file mode 100644
index 0000000..b04587e
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 3.jpg b/data/TCP/thumbs/TCP Pirate 3.jpg
new file mode 100644
index 0000000..cc2ee93
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 4.jpg b/data/TCP/thumbs/TCP Pirate 4.jpg
new file mode 100644
index 0000000..201bc45
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 5.jpg b/data/TCP/thumbs/TCP Pirate 5.jpg
new file mode 100644
index 0000000..e0f19be
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 6.jpg b/data/TCP/thumbs/TCP Pirate 6.jpg
new file mode 100644
index 0000000..d2ad184
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Pirate 7.jpg b/data/TCP/thumbs/TCP Pirate 7.jpg
new file mode 100644
index 0000000..9793979
--- /dev/null
+++ b/data/TCP/thumbs/TCP Pirate 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 1.jpg b/data/TCP/thumbs/TCP Robot 1.jpg
new file mode 100644
index 0000000..54cf737
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 2.jpg b/data/TCP/thumbs/TCP Robot 2.jpg
new file mode 100644
index 0000000..e8bd866
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 3.jpg b/data/TCP/thumbs/TCP Robot 3.jpg
new file mode 100644
index 0000000..e330a9d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 4.jpg b/data/TCP/thumbs/TCP Robot 4.jpg
new file mode 100644
index 0000000..0f2e5c8
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 5.jpg b/data/TCP/thumbs/TCP Robot 5.jpg
new file mode 100644
index 0000000..ed96f93
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 6.jpg b/data/TCP/thumbs/TCP Robot 6.jpg
new file mode 100644
index 0000000..133a15d
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 7.jpg b/data/TCP/thumbs/TCP Robot 7.jpg
new file mode 100644
index 0000000..83d631c
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 8.jpg b/data/TCP/thumbs/TCP Robot 8.jpg
new file mode 100644
index 0000000..2b1684f
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Robot 9.jpg b/data/TCP/thumbs/TCP Robot 9.jpg
new file mode 100644
index 0000000..ff06cae
--- /dev/null
+++ b/data/TCP/thumbs/TCP Robot 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 1.jpg b/data/TCP/thumbs/TCP Scary 1.jpg
new file mode 100644
index 0000000..fa7ef0c
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 2.jpg b/data/TCP/thumbs/TCP Scary 2.jpg
new file mode 100644
index 0000000..c19c836
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 3.jpg b/data/TCP/thumbs/TCP Scary 3.jpg
new file mode 100644
index 0000000..6070d1e
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 4.jpg b/data/TCP/thumbs/TCP Scary 4.jpg
new file mode 100644
index 0000000..df17de3
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 5.jpg b/data/TCP/thumbs/TCP Scary 5.jpg
new file mode 100644
index 0000000..8667418
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 6.jpg b/data/TCP/thumbs/TCP Scary 6.jpg
new file mode 100644
index 0000000..c839a17
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Scary 7.jpg b/data/TCP/thumbs/TCP Scary 7.jpg
new file mode 100644
index 0000000..72f8e75
--- /dev/null
+++ b/data/TCP/thumbs/TCP Scary 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 1.jpg b/data/TCP/thumbs/TCP Steampunk 1.jpg
new file mode 100644
index 0000000..40fc404
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 2.jpg b/data/TCP/thumbs/TCP Steampunk 2.jpg
new file mode 100644
index 0000000..fd2794f
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 3.jpg b/data/TCP/thumbs/TCP Steampunk 3.jpg
new file mode 100644
index 0000000..6979416
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 4.jpg b/data/TCP/thumbs/TCP Steampunk 4.jpg
new file mode 100644
index 0000000..c5226b5
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 5.jpg b/data/TCP/thumbs/TCP Steampunk 5.jpg
new file mode 100644
index 0000000..a70c1df
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 6.jpg b/data/TCP/thumbs/TCP Steampunk 6.jpg
new file mode 100644
index 0000000..1fe44a5
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Steampunk 7.jpg b/data/TCP/thumbs/TCP Steampunk 7.jpg
new file mode 100644
index 0000000..e36f51b
--- /dev/null
+++ b/data/TCP/thumbs/TCP Steampunk 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Toon 1.jpg b/data/TCP/thumbs/TCP Toon 1.jpg
new file mode 100644
index 0000000..0be61ae
--- /dev/null
+++ b/data/TCP/thumbs/TCP Toon 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 1.jpg b/data/TCP/thumbs/TCP Troll 1.jpg
new file mode 100644
index 0000000..b48d48e
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 2.jpg b/data/TCP/thumbs/TCP Troll 2.jpg
new file mode 100644
index 0000000..828bac5
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 3.jpg b/data/TCP/thumbs/TCP Troll 3.jpg
new file mode 100644
index 0000000..9ba1244
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 4.jpg b/data/TCP/thumbs/TCP Troll 4.jpg
new file mode 100644
index 0000000..8d876fd
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 5.jpg b/data/TCP/thumbs/TCP Troll 5.jpg
new file mode 100644
index 0000000..ab85db4
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 6.jpg b/data/TCP/thumbs/TCP Troll 6.jpg
new file mode 100644
index 0000000..defa754
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 7.jpg b/data/TCP/thumbs/TCP Troll 7.jpg
new file mode 100644
index 0000000..10bcaf2
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 7.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 8.jpg b/data/TCP/thumbs/TCP Troll 8.jpg
new file mode 100644
index 0000000..7ce8477
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 8.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Troll 9.jpg b/data/TCP/thumbs/TCP Troll 9.jpg
new file mode 100644
index 0000000..7563056
--- /dev/null
+++ b/data/TCP/thumbs/TCP Troll 9.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Vampire 1.jpg b/data/TCP/thumbs/TCP Vampire 1.jpg
new file mode 100644
index 0000000..8f3a391
--- /dev/null
+++ b/data/TCP/thumbs/TCP Vampire 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Vampire 2.jpg b/data/TCP/thumbs/TCP Vampire 2.jpg
new file mode 100644
index 0000000..b6a18e9
--- /dev/null
+++ b/data/TCP/thumbs/TCP Vampire 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Vampire 3.jpg b/data/TCP/thumbs/TCP Vampire 3.jpg
new file mode 100644
index 0000000..4edf67a
--- /dev/null
+++ b/data/TCP/thumbs/TCP Vampire 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Vampire 4.jpg b/data/TCP/thumbs/TCP Vampire 4.jpg
new file mode 100644
index 0000000..6031262
--- /dev/null
+++ b/data/TCP/thumbs/TCP Vampire 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Vampire 5.jpg b/data/TCP/thumbs/TCP Vampire 5.jpg
new file mode 100644
index 0000000..270edec
--- /dev/null
+++ b/data/TCP/thumbs/TCP Vampire 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 1.jpg b/data/TCP/thumbs/TCP Zombie 1.jpg
new file mode 100644
index 0000000..eda01eb
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 1.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 2.jpg b/data/TCP/thumbs/TCP Zombie 2.jpg
new file mode 100644
index 0000000..f92ad98
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 2.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 3.jpg b/data/TCP/thumbs/TCP Zombie 3.jpg
new file mode 100644
index 0000000..fba5f7b
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 3.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 4.jpg b/data/TCP/thumbs/TCP Zombie 4.jpg
new file mode 100644
index 0000000..dc1e1f6
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 4.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 5.jpg b/data/TCP/thumbs/TCP Zombie 5.jpg
new file mode 100644
index 0000000..8e7b54c
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 5.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 6.jpg b/data/TCP/thumbs/TCP Zombie 6.jpg
new file mode 100644
index 0000000..0754b5e
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 6.jpg
Binary files differ
diff --git a/data/TCP/thumbs/TCP Zombie 7.jpg b/data/TCP/thumbs/TCP Zombie 7.jpg
new file mode 100644
index 0000000..88df4c0
--- /dev/null
+++ b/data/TCP/thumbs/TCP Zombie 7.jpg
Binary files differ
diff --git a/data/bankrupt.png b/data/bankrupt.png
new file mode 100644
index 0000000..f087a26
--- /dev/null
+++ b/data/bankrupt.png
Binary files differ
diff --git a/data/credit.lua b/data/credit.lua
new file mode 100644
index 0000000..010ffd5
--- /dev/null
+++ b/data/credit.lua
@@ -0,0 +1,1166 @@
+print("Hello, world!")
+-- TODO: Hide default windows when level ends / re-display when level begins
+
+-- Override tostring to display more info about the table
+local old_tostring = tostring
+local numtabs = 0
+function tostring(el)
+ if type(el) == "table" then
+ numtabs = numtabs + 1
+ local strbuilder = {"{"}
+ for k,v in pairs(el) do
+ strbuilder[#strbuilder + 1] = string.format("%s%s : %s", string.rep("\t",numtabs), tostring(k), tostring(v))
+ end
+ strbuilder[#strbuilder + 1] = "}"
+ numtabs = numtabs - 1
+ return table.concat(strbuilder,"\n")
+ end
+ return old_tostring(el)
+end
+
+--globals
+local level = 1
+local applicants_left = -1
+local solutions = {}
+local money_left = 1000000
+local unrealized_credit, unrealized_credit_label, unrealized_credit_visible = 0, false
+local unrealized_credit_types, unrealized_credit_types_label, unrealized_credit_types_visible = {}, nil, false
+local active_credit = {}
+local cash_label, cash_label_visible = nil, false
+local loan_sell_window, loan_sell_window_visible = nil, false
+local active_app
+local default_windows = {}
+
+local last_names = require("last_names")
+local first_names = require("first_names")
+
+--functions
+local intro, intro2
+local bankrupt
+
+local portraits = require("portraits")
+local traits = require("traits")
+
+local function hide_default_windows(bool)
+ --print("About to hide default windows")
+ --for _,v in pairs(default_windows) do
+ --print("default window",v)
+ --v:setvisible(not bool)
+ --end
+ --print("Done hiding default windows")
+end
+
+local function generate_loan_app()
+ local things_to_buy = {
+ {
+ name = "car",
+ cost_low = 10000,
+ cost_high = 100000,
+ repayment = -1,
+ },
+ {
+ name = "house",
+ cost_low = 50000,
+ cost_high = 300000,
+ repayment = -1,
+ },
+ {
+ name = "motorcycle",
+ cost_low = 5000,
+ cost_high = 50000,
+ repayment = -1,
+ }
+ }
+ local businesses = {
+ {
+ name = "paper company",
+ cost_low = 1,
+ cost_high = 1,
+ repayment = 1,
+ },
+ {
+ name = "auto garage",
+ cost_low = 40000,
+ cost_high = 100000,
+ repayment = 1,
+ }
+ }
+ local collateral = {
+ {
+ name = "piece of golden jewelry",
+ short = "Gold",
+ cost_low = 1000,
+ cost_high = 10000
+ },
+ {
+ name = "plot of land",
+ short = "Land",
+ cost_low = 10000,
+ cost_high = 100000
+ },
+ {
+ name = "dog",
+ short = "Pet",
+ cost_low = 10,
+ cost_high = 500,
+ }
+ }
+ local rng = math.random()
+ local this_col = collateral[math.random(#collateral)]
+ if rng < 0.5 then
+ local thing = things_to_buy[math.random(#things_to_buy)]
+ local cost = math.random(thing.cost_low, thing.cost_high)
+ local ret = {
+ ammount = cost,
+ text = string.format("I want to buy a %s. I need $%d.",thing.name, cost),
+ repayment_time = math.random(60* math.random(5)),
+ collateral = {
+ name = this_col.name,
+ value = math.random(this_col.cost_low, this_col.cost_high),
+ short = this_col.short
+ },
+ intrest = 0.03,
+ repayment = thing.repayment
+ }
+ return ret
+ elseif rng < 1 then
+ local bus = businesses[math.random(#businesses)]
+ local cost = math.random(bus.cost_low, bus.cost_high)
+ local ret = {
+ ammount = cost,
+ text = string.format("I want to start a %s. I need $%d.",bus.name, cost),
+ repayment_time = math.random(60* math.random(5)),
+ collateral = {
+ name = this_col.name,
+ value = math.random(this_col.cost_low, this_col.cost_high),
+ short = this_col.short
+ },
+ intrest = 0.05,
+ repayment = bus.repayment
+ }
+ return ret
+ end
+end
+
+local function generate_person()
+ local portrait_str = portraits[math.random(#portraits)]
+
+ local random_first = first_names[math.random(#first_names)]
+ local random_last = last_names[math.random(#last_names)]
+ local random_name = string.format("%s %s",random_first,random_last)
+
+ local trai = {}
+ local num_traits = 2 + math.random(2)
+ while #trai < num_traits do
+ local selected = traits[math.random(#traits)]
+ local has_trait_category = false
+ for _,v in pairs(trai) do
+ if selected.category == v.category then
+ has_trait_category = true
+ break
+ end
+ end
+ if not has_trait_category then
+ trai[#trai + 1] = selected
+ end
+ end
+ for i = 1,2 + math.random(2) do
+ trai[i] = traits[math.random(#traits)]
+ end
+ return {
+ name = random_name,
+ portrait_f = portrait_str,
+ traits = trai
+ }
+end
+
+local function generate_applicant_lvl1()
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl1()
+ else
+ intro2()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ will_default = false
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local name_label = gui.newlabel({{180,40},{480,400}},application.text,win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl2()
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ active_app = win
+ win.onClose = function() return true end
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl2()
+ else
+ intro3()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ print("application",application)
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,40},{480,400}},application_text,win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl3()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl3()
+ else
+ intro4()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,40},{480,400}},application_text,win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl4()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl4()
+ else
+ intro5()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl5()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl5()
+ else
+ intro6()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl6()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl6()
+ else
+ intro7()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl7()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl7()
+ else
+ intro8()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl8()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl7()
+ else
+ intro8()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl8()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl8()
+ else
+ intro9()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl9()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl9()
+ else
+ intro10()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+local function generate_applicant_lvl10()
+ print("Generated portrait",portrait_str)
+ local person = generate_person()
+ local tex = video.newtexturefromfile("../data/smol/" .. person.portrait_f)
+
+ local win = gui.newwindow({{0,0},{480,480}}, "")
+ win.onClose = function() return true end
+ active_app = win
+ local portrait = gui.newiguiimage({20,40},true,tex, win)
+ win:settext(person.name)
+ local function cleanup()
+ applicants_left = applicants_left - 1
+ win:remove()
+ if applicants_left > 0 then
+ generate_applicant_lvl10()
+ else
+ generate_applicant_lvl10()
+ end
+ end
+ local application = generate_loan_app()
+ local approve_but = gui.newbutton({{20,440},{220,460}},"Approve",win)
+ print("application",application)
+ approve_but.onClick = function(self)
+ if money_left - application.ammount < 0 then
+ return false
+ end
+ solutions[applicants_left] = true
+ active_credit[#active_credit + 1] = {
+ loan = application,
+ person = person,
+ loan_start = get_time(),
+ deadline = get_time() + (application.repayment_time * 1000),
+ payment = (application.ammount * (1 + application.intrest)) / application.repayment_time,
+ repayment = application.repayment
+ }
+ money_left = money_left - application.ammount
+ cleanup()
+ end
+ local deny_but = gui.newbutton({{280,440},{460,460}},"Deny",win)
+ deny_but.onClick = function(self)
+ solutions[applicants_left] = false
+ cleanup()
+ end
+ local application_text = string.format([[
+%s I have a %s worth $%d to put up as collateral. I can pay the loan back at %%%d intrest over %d weeks]],
+ application.text,
+ application.collateral.name,
+ application.collateral.value,
+ application.intrest * 100,
+ math.ceil(application.repayment_time / 60)
+ )
+ local name_label = gui.newlabel({{180,20},{480,400}},application_text,win)
+ local traits_tbl = {}
+ for k,v in pairs(person.traits) do
+ traits_tbl[k] = string.format("* %s.",v.text)
+ end
+ local traits_label = gui.newlabel({{20,200},{480,400}},table.concat(traits_tbl,"\n"),win)
+ cash_label_visible = true
+end
+
+
+local last_tick = get_time()
+local ogt = GAME.tick
+function GAME.tick()
+ if cash_label then
+ cash_label:settext(string.format("Cash Available: $%d",money_left))
+ cash_label:setvisible(cash_label_visible)
+ end
+ unrealized_credit_label:setvisible(unrealized_credit_visible)
+ unrealized_credit_types_label:setvisible(unrealized_credit_types_visible)
+ local been_a_second = false
+ if get_time() > last_tick + 1000 then
+ last_tick = get_time()
+ been_a_second = true
+ end
+ local unrealized_credit = 0
+ unrealized_credit_types = {}
+ for k,loan in pairs(active_credit) do
+ if been_a_second then
+ money_left = money_left + loan.payment
+ end
+ local time_elapsed = loan.loan_start + (1000 * loan.loan.repayment_time)
+ local time_left = loan.deadline - get_time()
+ local loan_left = (time_left / 1000) * loan.payment
+
+ unrealized_credit = unrealized_credit + loan_left
+ local coltype = loan.loan.collateral.short
+ unrealized_credit_types[coltype] = unrealized_credit_types[coltye] or 0
+ unrealized_credit_types[coltype] = unrealized_credit_types[coltype] + loan_left
+ if loan.will_default == nil then
+ --people who default
+ local chance_to_default = 0
+ local default_varience = 0
+ for _,v in pairs(loan.person.traits) do
+ if v.payback_chance > 0 then
+ chance_to_default = chance_to_default + v.payback_chance
+ end
+ if v.payback_varience > 0 then
+ default_varience = default_varience + v.payback_varience
+ end
+ end
+ local num_traits = #loan.person.traits
+ chance_to_default = chance_to_default / num_traits
+ default_varience = default_varience / num_traits
+ if (math.random() + math.random(0,default_varience)) > chance_to_default then
+ print("Need a default time for", loan)
+ loan.will_default = true
+ loan.default_time = math.random(loan.loan.repayment_time * 1000) + loan.loan_start
+ print("Found a loan that will default at",loan.default_time)
+ else
+ loan.will_default = false
+ end
+ end
+ if loan.will_default and get_time() > loan.default_time then
+ print("defaulting on a loan, now is", get_time(), "default time is", loan.default_time)
+ print("loan",loan)
+ --Pop up a notification that the loan defaulted?
+ local default_win = gui.newwindow({{150,170},{490,310}},"Default!")
+ default_windows[#default_windows + 1] = default_win
+ local default_label = gui.newlabel({{0,20},{340,1000}},"",default_win)
+ local collateral_perc = math.random(90,100) / 100
+ local collateral_collection = loan.loan.collateral.value * collateral_perc
+ local time_elapsed = loan.default_time - loan.loan_start
+ local value_collected = (time_elapsed / 1000) * loan.payment
+ print("value collected:",value_collected)
+ print("collateral collection:", collateral_collection)
+ local money_add = value_collected + collateral_collection
+ print("money to add:",money_add)
+ if value_collected + collateral_collection > loan.loan.ammount * (1 + loan.loan.intrest) then
+
+ money_left = money_left + (loan.loan.ammount - value_collected)
+ else
+ money_left = money_left + money_add
+ end
+ print("After adding money, money left is", money_left)
+ default_label:settext(string.format("%s defaulted on their loan, we were able to collect %%%d of their collateral, a %s. We made/lost $%2.2f",loan.person.name,collateral_perc * 100, loan.loan.collateral.name,money_add))
+ if money_left < 0 then
+ active_app:remove()
+ bankrupt()
+ end
+ active_credit[k] = nil
+ end
+ if get_time() > loan.deadline then
+ print("now is",get_time(),"and the loan deadline was", loan.deadline)
+ active_credit[k] = nil
+ end
+ end
+ if been_a_second and unrealized_credit_label then
+ unrealized_credit_label:settext(string.format("Unrealized cash: $%d",unrealized_credit))
+ end
+ if been_a_second and unrealized_credit_types_label then
+ local ur_tbl = {}
+ for k,v in pairs(unrealized_credit_types) do
+ ur_tbl[#ur_tbl + 1] = string.format("%s: %0.2f",k,v)
+ end
+ unrealized_credit_types_label:settext(table.concat(ur_tbl,"\n"))
+ end
+end
+
+local function setup_lvl1()
+ level = 1
+ applicants_left = 10
+ solutions = {}
+ generate_applicant_lvl1()
+end
+
+local function setup_lvl2()
+ level = 2
+ applicants_left = 10
+ generate_applicant_lvl2()
+end
+
+local function setup_lvl3()
+ level = 3
+ applicants_left = 10
+ generate_applicant_lvl3()
+end
+
+local function setup_lvl4()
+ level = 4
+ applicants_left = 10
+ generate_applicant_lvl4()
+end
+
+local function setup_lvl5()
+ level = 5
+ applicants_left = 10
+ generate_applicant_lvl5()
+end
+
+local function setup_lvl6()
+ level = 6
+ applicants_left = 10
+ generate_applicant_lvl6()
+end
+
+local function setup_lvl7()
+ level = 7
+ applicants_left = 10
+ generate_applicant_lvl7()
+end
+
+local function setup_lvl8()
+ level = 8
+ applicants_left = 10
+ generate_applicant_lvl8()
+end
+
+local function setup_lvl9()
+ level = 9
+ applicants_left = 10
+ for _,v in pairs(active_credit) do
+ if v.loan.collateral.name == "peice of golden jewlery" then
+ v.loan.collateral.value = v.loan.collateral.value * 0.1
+ v.will_default = true
+ v.default_time = get_time()
+ end
+ end
+ generate_applicant_lvl9()
+end
+
+local function setup_lvl10()
+ level = 10
+ applicants_left = 10
+ generate_applicant_lvl10()
+end
+
+function intro()
+ local tex = video.newtexturefromfile("../data/lvl1_intro.png")
+ local introscreen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ cash_label_visible = false
+ money_left = 1e6
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ introscreen:remove()
+ startbutton:remove()
+ setup_lvl1()
+ end
+end
+
+function bankrupt()
+ local tex = video.newtexturefromfile("../data/bankrupt.png")
+ local introscreen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},":(")
+ cash_label_visible = false
+ money_left = 1e6
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ introscreen:remove()
+ startbutton:remove()
+ GAME.exit()
+ end
+end
+
+function intro2()
+ hide_default_windows(true)
+ cash_label_visible = false
+ local tex = video.newtexturefromfile("../data/lvl2_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl2()
+ cash_label_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro3()
+ cash_label_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl3_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl3()
+ cash_label_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro4()
+ hide_default_windows(true)
+ cash_label_visible = false
+ local tex = video.newtexturefromfile("../data/lvl4_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl4()
+ cash_label_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro5()
+ cash_label_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl5_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl5()
+ cash_label_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro6()
+ cash_label_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl6_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl6()
+ cash_label_visible = true
+ unrealized_credit_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro7()
+ cash_label_visible = false
+ unrealized_credit_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl7_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl7()
+ cash_label_visible = true
+ unrealized_credit_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro8()
+ cash_label_visible = false
+ unrealized_credit_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl8_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl8()
+ cash_label_visible = true
+ unrealized_credit_visible = true
+ unrealized_credit_types_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro9()
+ cash_label_visible = false
+ unrealized_credit_visible = false
+ unrealized_credit_types_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvl9_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl9()
+ cash_label_visible = true
+ unrealized_credit_visible = true
+ unrealized_credit_types_visible = true
+ hide_default_windows(false)
+ end
+end
+
+function intro10()
+ cash_label_visible = false
+ unrealized_credit_visible = false
+ unrealized_credit_types_visible = false
+ hide_default_windows(true)
+ local tex = video.newtexturefromfile("../data/lvlfinal_intro.png")
+ local screen = gui.newiguiimage({0,0},true,tex)
+ local startbutton = gui.newbutton({{250,420},{350,470}},"Start")
+ startbutton.onClick = function(self)
+ print("Start button clicked")
+ screen:remove()
+ startbutton:remove()
+ setup_lvl10()
+ cash_label_visible = true
+ unrealized_credit_visible = true
+ unrealized_credit_types_visible = true
+ hide_default_windows(false)
+ end
+end
+
+cash_label = gui.newlabel({{480,0},{640,100}},"")
+unrealized_credit_label = gui.newlabel({{480,100},{640,200}},"")
+unrealized_credit_types_label = gui.newlabel({{480,200},{640,300}}, "")
+intro3()
+--generate_applicant_lvl1()
+
diff --git a/data/deviceinit.lua b/data/deviceinit.lua
new file mode 100644
index 0000000..a53e0a9
--- /dev/null
+++ b/data/deviceinit.lua
@@ -0,0 +1,91 @@
+print("device init called")
+return {
+ --[[
+ Anti-Alias
+ Should the window use fullscreen anti aliasing
+ Default:16
+ ]]
+ ["Anti Alias"] = 16,
+ --[[
+ Bits Per Pixel
+ The minimum bits per pixel of the color buffer in fullscreen. Ignored in window mode.
+ Default:16
+ ]]
+ ["Bits Per Pixel"] = 16,
+ --[[
+ Device Type
+ Options:
+ WIN32 - Only avaliable on windows desktops
+ WINCE - Only avaliable on windows mobile
+ COCOA - Only avaliable on OSX
+ X11 - Avaliable on Linux, Solaris, BSD, anyone that uses X11
+ SDL - Avaliable on most systems
+ CONSOLE - Usually avaliable, but can only render text
+ BEST - Automatically choose the best device.
+ Default:Best
+ ]]
+ ["Device Type"] = "BEST",
+ --[[
+ Display Adapter
+ Pick which graphics card is used for rendering when there is more than one.
+ Default:0
+ ]]
+ ["Display Adapter"] = 0,
+ --[[
+ Double Buffer
+ Should the window use doublebuffering?
+ Default:false
+ ]]
+ ["Double Buffer"] = true,
+ --[[
+ Multithreaded
+ Should the display use multiple threads?
+ Default:false
+ ]]
+ ["Multithreaded"] = false,
+ --[[
+ Driver Type
+ The video driver used to render graphics
+ Options:
+ NULL - You probably don't want this one
+ SOFTWARE - Donate your computer to a mueseum
+ BURNINGS - a software alternative
+ D3D9 - Direct 3D 9 Win32 only
+ OPENGL - Open GL
+ (vulkan support comming soon... maybe.)
+ Default:OPENGL
+ ]]
+ ["Driver Type"] = "OPENGL",
+ --[[
+ Fullscreen
+ Should the window be fullscreen?
+ Default:false
+ ]]
+ ["Fullscreen"] = false,
+ --[[
+ Stencil buffer
+ Should the stencil buffer be enabled?
+ Default:false
+ ]]
+ ["Stencil Buffer"] = true,
+ --[[
+ Stereo Buffer
+ Should the window use stereo buffers?
+ Default:false
+ ]]
+ ["Stereo Buffer"] = false,
+ --[[
+ Vertical Sync
+ Should the frame wait to be displayed to screen before starting the next draw?
+ Enable this if you are getting graphical artifacts
+ Default:false
+ ]]
+ ["VSync"] = true,
+ --[[
+ Window Width/height
+ Adjusts the size of the window.
+ Default: 640,480
+ ]]
+ ["Window Width"] = 640,
+ ["Window Height"] = 480,
+}
diff --git a/data/first_names.lua b/data/first_names.lua
new file mode 100644
index 0000000..cc3fc99
--- /dev/null
+++ b/data/first_names.lua
@@ -0,0 +1,202 @@
+return {
+ 'James',
+ 'John',
+ 'Robert',
+ 'Michael',
+ 'William',
+ 'David',
+ 'Richard',
+ 'Joseph',
+ 'Thomas',
+ 'Charles',
+ 'Christopher',
+ 'Daniel',
+ 'Matthew',
+ 'Anthony',
+ 'Donald',
+ 'Mark',
+ 'Paul',
+ 'Steven',
+ 'Andrew',
+ 'Kenneth',
+ 'Joshua',
+ 'George',
+ 'Kevin',
+ 'Brian',
+ 'Edward',
+ 'Ronald',
+ 'Timothy',
+ 'Jason',
+ 'Jeffrey',
+ 'Ryan',
+ 'Jacob',
+ 'Gary',
+ 'Nicholas',
+ 'Eric',
+ 'Stephen',
+ 'Jonathan',
+ 'Larry',
+ 'Justin',
+ 'Scott',
+ 'Brandon',
+ 'Frank',
+ 'Benjamin',
+ 'Gregory',
+ 'Samuel',
+ 'Raymond',
+ 'Patrick',
+ 'Alexander',
+ 'Jack',
+ 'Dennis',
+ 'Jerry',
+ 'Tyler',
+ 'Aaron',
+ 'Jose',
+ 'Henry',
+ 'Douglas',
+ 'Adam',
+ 'Peter',
+ 'Nathan',
+ 'Zachary',
+ 'Walter',
+ 'Kyle',
+ 'Harold',
+ 'Carl',
+ 'Jeremy',
+ 'Keith',
+ 'Roger',
+ 'Gerald',
+ 'Ethan',
+ 'Arthur',
+ 'Terry',
+ 'Christian',
+ 'Sean',
+ 'Lawrence',
+ 'Austin',
+ 'Joe',
+ 'Noah',
+ 'Jesse',
+ 'Albert',
+ 'Bryan',
+ 'Billy',
+ 'Bruce',
+ 'Willie',
+ 'Jordan',
+ 'Dylan',
+ 'Alan',
+ 'Ralph',
+ 'Gabriel',
+ 'Roy',
+ 'Juan',
+ 'Wayne',
+ 'Eugene',
+ 'Logan',
+ 'Randy',
+ 'Louis',
+ 'Russell',
+ 'Vincent',
+ 'Philip',
+ 'Bobby',
+ 'Johnny',
+ 'Bradley',
+ 'Mary',
+ 'Patricia',
+ 'Jennifer',
+ 'Linda',
+ 'Elizabeth',
+ 'Barbara',
+ 'Susan',
+ 'Jessica',
+ 'Sarah',
+ 'Karen',
+ 'Nancy',
+ 'Margaret',
+ 'Lisa',
+ 'Betty',
+ 'Dorothy',
+ 'Sandra',
+ 'Ashley',
+ 'Kimberly',
+ 'Donna',
+ 'Emily',
+ 'Michelle',
+ 'Carol',
+ 'Amanda',
+ 'Melissa',
+ 'Deborah',
+ 'Stephanie',
+ 'Rebecca',
+ 'Laura',
+ 'Sharon',
+ 'Cynthia',
+ 'Kathleen',
+ 'Helen',
+ 'Amy',
+ 'Shirley',
+ 'Angela',
+ 'Anna',
+ 'Brenda',
+ 'Pamela',
+ 'Nicole',
+ 'Ruth',
+ 'Katherine',
+ 'Samantha',
+ 'Christine',
+ 'Emma',
+ 'Catherine',
+ 'Debra',
+ 'Virginia',
+ 'Rachel',
+ 'Carolyn',
+ 'Janet',
+ 'Maria',
+ 'Heather',
+ 'Diane',
+ 'Julie',
+ 'Joyce',
+ 'Victoria',
+ 'Kelly',
+ 'Christina',
+ 'Joan',
+ 'Evelyn',
+ 'Lauren',
+ 'Judith',
+ 'Olivia',
+ 'Frances',
+ 'Martha',
+ 'Cheryl',
+ 'Megan',
+ 'Andrea',
+ 'Hannah',
+ 'Jacqueline',
+ 'Ann',
+ 'Jean',
+ 'Alice',
+ 'Kathryn',
+ 'Gloria',
+ 'Teresa',
+ 'Doris',
+ 'Sara',
+ 'Janice',
+ 'Julia',
+ 'Marie',
+ 'Madison',
+ 'Grace',
+ 'Judy',
+ 'Theresa',
+ 'Beverly',
+ 'Denise',
+ 'Marilyn',
+ 'Amber',
+ 'Danielle',
+ 'Abigail',
+ 'Brittany',
+ 'Rose',
+ 'Diana',
+ 'Natalie',
+ 'Sophia',
+ 'Alexis',
+ 'Lori',
+ 'Kayla',
+ 'Jane',
+}
diff --git a/data/init.lua b/data/init.lua
new file mode 100644
index 0000000..ada3e66
--- /dev/null
+++ b/data/init.lua
@@ -0,0 +1,20 @@
+print([[
+Welcome to Brok[en]gine!
+
+This file is located at bin/client/data/init.lua,
+it is the first file run after brokengine starts.
+Modify it to make your game.
+
+Before brokengine starts, there's another file
+located at bin/client/data/deviceinit.lua, which
+is a settings file for the window, and does not
+have access to a lot of the functions that
+brokengine provides. If your game is crashing
+right away, check for errors in that file.
+
+For more information about the functions
+avaliable in brokengine, run `ldoc .`, and look
+at index.html in the doc/ folder.
+]])
+require("credit")
+GAME.crashy()
diff --git a/data/last_names.lua b/data/last_names.lua
new file mode 100644
index 0000000..be3d2be
--- /dev/null
+++ b/data/last_names.lua
@@ -0,0 +1,1003 @@
+return {
+ 'Smith',
+ 'Johnson',
+ 'Williams',
+ 'Jones',
+ 'Brown',
+ 'Davis',
+ 'Miller',
+ 'Wilson',
+ 'Moore',
+ 'Taylor',
+ 'Anderson',
+ 'Thomas',
+ 'Jackson',
+ 'White',
+ 'Harris',
+ 'Martin',
+ 'Thompson',
+ 'Garcia',
+ 'Martinez',
+ 'Robinson',
+ 'Clark',
+ 'Rodriguez',
+ 'Lewis',
+ 'Lee',
+ 'Walker',
+ 'Hall',
+ 'Allen',
+ 'Young',
+ 'Hernandez',
+ 'King',
+ 'Wright',
+ 'Lopez',
+ 'Hill',
+ 'Scott',
+ 'Green',
+ 'Adams',
+ 'Baker',
+ 'Gonzalez',
+ 'Nelson',
+ 'Carter',
+ 'Mitchell',
+ 'Perez',
+ 'Roberts',
+ 'Turner',
+ 'Phillips',
+ 'Campbell',
+ 'Parker',
+ 'Evans',
+ 'Edwards',
+ 'Collins',
+ 'Stewart',
+ 'Sanchez',
+ 'Morris',
+ 'Rogers',
+ 'Reed',
+ 'Cook',
+ 'Morgan',
+ 'Bell',
+ 'Murphy',
+ 'Bailey',
+ 'Rivera',
+ 'Cooper',
+ 'Richardson',
+ 'Cox',
+ 'Howard',
+ 'Ward',
+ 'Torres',
+ 'Peterson',
+ 'Gray',
+ 'Ramirez',
+ 'James',
+ 'Watson',
+ 'Brooks',
+ 'Kelly',
+ 'Sanders',
+ 'Price',
+ 'Bennett',
+ 'Wood',
+ 'Barnes',
+ 'Ross',
+ 'Henderson',
+ 'Coleman',
+ 'Jenkins',
+ 'Perry',
+ 'Powell',
+ 'Long',
+ 'Patterson',
+ 'Hughes',
+ 'Flores',
+ 'Washington',
+ 'Butler',
+ 'Simmons',
+ 'Foster',
+ 'Gonzales',
+ 'Bryant',
+ 'Alexander',
+ 'Russell',
+ 'Griffin',
+ 'Diaz',
+ 'Hayes',
+ 'Myers',
+ 'Ford',
+ 'Hamilton',
+ 'Graham',
+ 'Sullivan',
+ 'Wallace',
+ 'Woods',
+ 'Cole',
+ 'West',
+ 'Jordan',
+ 'Owens',
+ 'Reynolds',
+ 'Fisher',
+ 'Ellis',
+ 'Harrison',
+ 'Gibson',
+ 'Mcdonald',
+ 'Cruz',
+ 'Marshall',
+ 'Ortiz',
+ 'Gomez',
+ 'Murray',
+ 'Freeman',
+ 'Wells',
+ 'Webb',
+ 'Simpson',
+ 'Stevens',
+ 'Tucker',
+ 'Porter',
+ 'Hunter',
+ 'Hicks',
+ 'Crawford',
+ 'Henry',
+ 'Boyd',
+ 'Mason',
+ 'Morales',
+ 'Kennedy',
+ 'Warren',
+ 'Dixon',
+ 'Ramos',
+ 'Reyes',
+ 'Burns',
+ 'Gordon',
+ 'Shaw',
+ 'Holmes',
+ 'Rice',
+ 'Robertson',
+ 'Hunt',
+ 'Black',
+ 'Daniels',
+ 'Palmer',
+ 'Mills',
+ 'Nichols',
+ 'Grant',
+ 'Knight',
+ 'Ferguson',
+ 'Rose',
+ 'Stone',
+ 'Hawkins',
+ 'Dunn',
+ 'Perkins',
+ 'Hudson',
+ 'Spencer',
+ 'Gardner',
+ 'Stephens',
+ 'Payne',
+ 'Pierce',
+ 'Berry',
+ 'Matthews',
+ 'Arnold',
+ 'Wagner',
+ 'Willis',
+ 'Ray',
+ 'Watkins',
+ 'Olson',
+ 'Carroll',
+ 'Duncan',
+ 'Snyder',
+ 'Hart',
+ 'Cunningham',
+ 'Bradley',
+ 'Lane',
+ 'Andrews',
+ 'Ruiz',
+ 'Harper',
+ 'Fox',
+ 'Riley',
+ 'Armstrong',
+ 'Carpenter',
+ 'Weaver',
+ 'Greene',
+ 'Lawrence',
+ 'Elliott',
+ 'Chavez',
+ 'Sims',
+ 'Austin',
+ 'Peters',
+ 'Kelley',
+ 'Franklin',
+ 'Lawson',
+ 'Fields',
+ 'Gutierrez',
+ 'Ryan',
+ 'Schmidt',
+ 'Carr',
+ 'Vasquez',
+ 'Castillo',
+ 'Wheeler',
+ 'Chapman',
+ 'Oliver',
+ 'Montgomery',
+ 'Richards',
+ 'Williamson',
+ 'Johnston',
+ 'Banks',
+ 'Meyer',
+ 'Bishop',
+ 'Mccoy',
+ 'Howell',
+ 'Alvarez',
+ 'Morrison',
+ 'Hansen',
+ 'Fernandez',
+ 'Garza',
+ 'Harvey',
+ 'Little',
+ 'Burton',
+ 'Stanley',
+ 'Nguyen',
+ 'George',
+ 'Jacobs',
+ 'Reid',
+ 'Kim',
+ 'Fuller',
+ 'Lynch',
+ 'Dean',
+ 'Gilbert',
+ 'Garrett',
+ 'Romero',
+ 'Welch',
+ 'Larson',
+ 'Frazier',
+ 'Burke',
+ 'Hanson',
+ 'Day',
+ 'Mendoza',
+ 'Moreno',
+ 'Bowman',
+ 'Medina',
+ 'Fowler',
+ 'Brewer',
+ 'Hoffman',
+ 'Carlson',
+ 'Silva',
+ 'Pearson',
+ 'Holland',
+ 'Douglas',
+ 'Fleming',
+ 'Jensen',
+ 'Vargas',
+ 'Byrd',
+ 'Davidson',
+ 'Hopkins',
+ 'May',
+ 'Terry',
+ 'Herrera',
+ 'Wade',
+ 'Soto',
+ 'Walters',
+ 'Curtis',
+ 'Neal',
+ 'Caldwell',
+ 'Lowe',
+ 'Jennings',
+ 'Barnett',
+ 'Graves',
+ 'Jimenez',
+ 'Horton',
+ 'Shelton',
+ 'Barrett',
+ 'Obrien',
+ 'Castro',
+ 'Sutton',
+ 'Gregory',
+ 'Mckinney',
+ 'Lucas',
+ 'Miles',
+ 'Craig',
+ 'Rodriquez',
+ 'Chambers',
+ 'Holt',
+ 'Lambert',
+ 'Fletcher',
+ 'Watts',
+ 'Bates',
+ 'Hale',
+ 'Rhodes',
+ 'Pena',
+ 'Beck',
+ 'Newman',
+ 'Haynes',
+ 'Mcdaniel',
+ 'Mendez',
+ 'Bush',
+ 'Vaughn',
+ 'Parks',
+ 'Dawson',
+ 'Santiago',
+ 'Norris',
+ 'Hardy',
+ 'Love',
+ 'Steele',
+ 'Curry',
+ 'Powers',
+ 'Schultz',
+ 'Barker',
+ 'Guzman',
+ 'Page',
+ 'Munoz',
+ 'Ball',
+ 'Keller',
+ 'Chandler',
+ 'Weber',
+ 'Leonard',
+ 'Walsh',
+ 'Lyons',
+ 'Ramsey',
+ 'Wolfe',
+ 'Schneider',
+ 'Mullins',
+ 'Benson',
+ 'Sharp',
+ 'Bowen',
+ 'Daniel',
+ 'Barber',
+ 'Cummings',
+ 'Hines',
+ 'Baldwin',
+ 'Griffith',
+ 'Valdez',
+ 'Hubbard',
+ 'Salazar',
+ 'Reeves',
+ 'Warner',
+ 'Stevenson',
+ 'Burgess',
+ 'Santos',
+ 'Tate',
+ 'Cross',
+ 'Garner',
+ 'Mann',
+ 'Mack',
+ 'Moss',
+ 'Thornton',
+ 'Dennis',
+ 'Mcgee',
+ 'Farmer',
+ 'Delgado',
+ 'Aguilar',
+ 'Vega',
+ 'Glover',
+ 'Manning',
+ 'Cohen',
+ 'Harmon',
+ 'Rodgers',
+ 'Robbins',
+ 'Newton',
+ 'Todd',
+ 'Blair',
+ 'Higgins',
+ 'Ingram',
+ 'Reese',
+ 'Cannon',
+ 'Strickland',
+ 'Townsend',
+ 'Potter',
+ 'Goodwin',
+ 'Walton',
+ 'Rowe',
+ 'Hampton',
+ 'Ortega',
+ 'Patton',
+ 'Swanson',
+ 'Joseph',
+ 'Francis',
+ 'Goodman',
+ 'Maldonado',
+ 'Yates',
+ 'Becker',
+ 'Erickson',
+ 'Hodges',
+ 'Rios',
+ 'Conner',
+ 'Adkins',
+ 'Webster',
+ 'Norman',
+ 'Malone',
+ 'Hammond',
+ 'Flowers',
+ 'Cobb',
+ 'Moody',
+ 'Quinn',
+ 'Blake',
+ 'Maxwell',
+ 'Pope',
+ 'Floyd',
+ 'Osborne',
+ 'Paul',
+ 'Mccarthy',
+ 'Guerrero',
+ 'Lindsey',
+ 'Estrada',
+ 'Sandoval',
+ 'Gibbs',
+ 'Tyler',
+ 'Gross',
+ 'Fitzgerald',
+ 'Stokes',
+ 'Doyle',
+ 'Sherman',
+ 'Saunders',
+ 'Wise',
+ 'Colon',
+ 'Gill',
+ 'Alvarado',
+ 'Greer',
+ 'Padilla',
+ 'Simon',
+ 'Waters',
+ 'Nunez',
+ 'Ballard',
+ 'Schwartz',
+ 'Mcbride',
+ 'Houston',
+ 'Christensen',
+ 'Klein',
+ 'Pratt',
+ 'Briggs',
+ 'Parsons',
+ 'Mclaughlin',
+ 'Zimmerman',
+ 'French',
+ 'Buchanan',
+ 'Moran',
+ 'Copeland',
+ 'Roy',
+ 'Pittman',
+ 'Brady',
+ 'Mccormick',
+ 'Holloway',
+ 'Brock',
+ 'Poole',
+ 'Frank',
+ 'Logan',
+ 'Owen',
+ 'Bass',
+ 'Marsh',
+ 'Drake',
+ 'Wong',
+ 'Jefferson',
+ 'Park',
+ 'Morton',
+ 'Abbott',
+ 'Sparks',
+ 'Patrick',
+ 'Norton',
+ 'Huff',
+ 'Clayton',
+ 'Massey',
+ 'Lloyd',
+ 'Figueroa',
+ 'Carson',
+ 'Bowers',
+ 'Roberson',
+ 'Barton',
+ 'Tran',
+ 'Lamb',
+ 'Harrington',
+ 'Casey',
+ 'Boone',
+ 'Cortez',
+ 'Clarke',
+ 'Mathis',
+ 'Singleton',
+ 'Wilkins',
+ 'Cain',
+ 'Bryan',
+ 'Underwood',
+ 'Hogan',
+ 'Mckenzie',
+ 'Collier',
+ 'Luna',
+ 'Phelps',
+ 'Mcguire',
+ 'Allison',
+ 'Bridges',
+ 'Wilkerson',
+ 'Nash',
+ 'Summers',
+ 'Atkins',
+ 'Wilcox',
+ 'Pitts',
+ 'Conley',
+ 'Marquez',
+ 'Burnett',
+ 'Richard',
+ 'Cochran',
+ 'Chase',
+ 'Davenport',
+ 'Hood',
+ 'Gates',
+ 'Clay',
+ 'Ayala',
+ 'Sawyer',
+ 'Roman',
+ 'Vazquez',
+ 'Dickerson',
+ 'Hodge',
+ 'Acosta',
+ 'Flynn',
+ 'Espinoza',
+ 'Nicholson',
+ 'Monroe',
+ 'Wolf',
+ 'Morrow',
+ 'Kirk',
+ 'Randall',
+ 'Anthony',
+ 'Whitaker',
+ 'Oconnor',
+ 'Skinner',
+ 'Ware',
+ 'Molina',
+ 'Kirby',
+ 'Huffman',
+ 'Bradford',
+ 'Charles',
+ 'Gilmore',
+ 'Dominguez',
+ 'Oneal',
+ 'Bruce',
+ 'Lang',
+ 'Combs',
+ 'Kramer',
+ 'Heath',
+ 'Hancock',
+ 'Gallagher',
+ 'Gaines',
+ 'Shaffer',
+ 'Short',
+ 'Wiggins',
+ 'Mathews',
+ 'Mcclain',
+ 'Fischer',
+ 'Wall',
+ 'Small',
+ 'Melton',
+ 'Hensley',
+ 'Bond',
+ 'Dyer',
+ 'Cameron',
+ 'Grimes',
+ 'Contreras',
+ 'Christian',
+ 'Wyatt',
+ 'Baxter',
+ 'Snow',
+ 'Mosley',
+ 'Shepherd',
+ 'Larsen',
+ 'Hoover',
+ 'Beasley',
+ 'Glenn',
+ 'Petersen',
+ 'Whitehead',
+ 'Meyers',
+ 'Keith',
+ 'Garrison',
+ 'Vincent',
+ 'Shields',
+ 'Horn',
+ 'Savage',
+ 'Olsen',
+ 'Schroeder',
+ 'Hartman',
+ 'Woodard',
+ 'Mueller',
+ 'Kemp',
+ 'Deleon',
+ 'Booth',
+ 'Patel',
+ 'Calhoun',
+ 'Wiley',
+ 'Eaton',
+ 'Cline',
+ 'Navarro',
+ 'Harrell',
+ 'Lester',
+ 'Humphrey',
+ 'Parrish',
+ 'Duran',
+ 'Hutchinson',
+ 'Hess',
+ 'Dorsey',
+ 'Bullock',
+ 'Robles',
+ 'Beard',
+ 'Dalton',
+ 'Avila',
+ 'Vance',
+ 'Rich',
+ 'Blackwell',
+ 'York',
+ 'Johns',
+ 'Blankenship',
+ 'Trevino',
+ 'Salinas',
+ 'Campos',
+ 'Pruitt',
+ 'Moses',
+ 'Callahan',
+ 'Golden',
+ 'Montoya',
+ 'Hardin',
+ 'Guerra',
+ 'Mcdowell',
+ 'Carey',
+ 'Stafford',
+ 'Gallegos',
+ 'Henson',
+ 'Wilkinson',
+ 'Booker',
+ 'Merritt',
+ 'Miranda',
+ 'Atkinson',
+ 'Orr',
+ 'Decker',
+ 'Hobbs',
+ 'Preston',
+ 'Tanner',
+ 'Knox',
+ 'Pacheco',
+ 'Stephenson',
+ 'Glass',
+ 'Rojas',
+ 'Serrano',
+ 'Marks',
+ 'Hickman',
+ 'English',
+ 'Sweeney',
+ 'Strong',
+ 'Prince',
+ 'Mcclure',
+ 'Conway',
+ 'Walter',
+ 'Roth',
+ 'Maynard',
+ 'Farrell',
+ 'Lowery',
+ 'Hurst',
+ 'Nixon',
+ 'Weiss',
+ 'Trujillo',
+ 'Ellison',
+ 'Sloan',
+ 'Juarez',
+ 'Winters',
+ 'Mclean',
+ 'Randolph',
+ 'Leon',
+ 'Boyer',
+ 'Villarreal',
+ 'Mccall',
+ 'Gentry',
+ 'Carrillo',
+ 'Kent',
+ 'Ayers',
+ 'Lara',
+ 'Shannon',
+ 'Sexton',
+ 'Pace',
+ 'Hull',
+ 'Leblanc',
+ 'Browning',
+ 'Velasquez',
+ 'Leach',
+ 'Chang',
+ 'House',
+ 'Sellers',
+ 'Herring',
+ 'Noble',
+ 'Foley',
+ 'Bartlett',
+ 'Mercado',
+ 'Landry',
+ 'Durham',
+ 'Walls',
+ 'Barr',
+ 'Mckee',
+ 'Bauer',
+ 'Rivers',
+ 'Everett',
+ 'Bradshaw',
+ 'Pugh',
+ 'Velez',
+ 'Rush',
+ 'Estes',
+ 'Dodson',
+ 'Morse',
+ 'Sheppard',
+ 'Weeks',
+ 'Camacho',
+ 'Bean',
+ 'Barron',
+ 'Livingston',
+ 'Middleton',
+ 'Spears',
+ 'Branch',
+ 'Blevins',
+ 'Chen',
+ 'Kerr',
+ 'Mcconnell',
+ 'Hatfield',
+ 'Harding',
+ 'Ashley',
+ 'Solis',
+ 'Herman',
+ 'Frost',
+ 'Giles',
+ 'Blackburn',
+ 'William',
+ 'Pennington',
+ 'Woodward',
+ 'Finley',
+ 'Mcintosh',
+ 'Koch',
+ 'Best',
+ 'Solomon',
+ 'Mccullough',
+ 'Dudley',
+ 'Nolan',
+ 'Blanchard',
+ 'Rivas',
+ 'Brennan',
+ 'Mejia',
+ 'Kane',
+ 'Benton',
+ 'Joyce',
+ 'Buckley',
+ 'Haley',
+ 'Valentine',
+ 'Maddox',
+ 'Russo',
+ 'Mcknight',
+ 'Buck',
+ 'Moon',
+ 'Mcmillan',
+ 'Crosby',
+ 'Berg',
+ 'Dotson',
+ 'Mays',
+ 'Roach',
+ 'Church',
+ 'Chan',
+ 'Richmond',
+ 'Meadows',
+ 'Faulkner',
+ 'Oneill',
+ 'Knapp',
+ 'Kline',
+ 'Barry',
+ 'Ochoa',
+ 'Jacobson',
+ 'Gay',
+ 'Avery',
+ 'Hendricks',
+ 'Horne',
+ 'Shepard',
+ 'Hebert',
+ 'Cherry',
+ 'Cardenas',
+ 'Mcintyre',
+ 'Whitney',
+ 'Waller',
+ 'Holman',
+ 'Donaldson',
+ 'Cantu',
+ 'Terrell',
+ 'Morin',
+ 'Gillespie',
+ 'Fuentes',
+ 'Tillman',
+ 'Sanford',
+ 'Bentley',
+ 'Peck',
+ 'Key',
+ 'Salas',
+ 'Rollins',
+ 'Gamble',
+ 'Dickson',
+ 'Battle',
+ 'Santana',
+ 'Cabrera',
+ 'Cervantes',
+ 'Howe',
+ 'Hinton',
+ 'Hurley',
+ 'Spence',
+ 'Zamora',
+ 'Yang',
+ 'Mcneil',
+ 'Suarez',
+ 'Case',
+ 'Petty',
+ 'Gould',
+ 'Mcfarland',
+ 'Sampson',
+ 'Carver',
+ 'Bray',
+ 'Rosario',
+ 'Macdonald',
+ 'Stout',
+ 'Hester',
+ 'Melendez',
+ 'Dillon',
+ 'Farley',
+ 'Hopper',
+ 'Galloway',
+ 'Potts',
+ 'Bernard',
+ 'Joyner',
+ 'Stein',
+ 'Aguirre',
+ 'Osborn',
+ 'Mercer',
+ 'Bender',
+ 'Franco',
+ 'Rowland',
+ 'Sykes',
+ 'Benjamin',
+ 'Travis',
+ 'Pickett',
+ 'Crane',
+ 'Sears',
+ 'Mayo',
+ 'Dunlap',
+ 'Hayden',
+ 'Wilder',
+ 'Mckay',
+ 'Coffey',
+ 'Mccarty',
+ 'Ewing',
+ 'Cooley',
+ 'Vaughan',
+ 'Bonner',
+ 'Cotton',
+ 'Holder',
+ 'Stark',
+ 'Ferrell',
+ 'Cantrell',
+ 'Fulton',
+ 'Lynn',
+ 'Lott',
+ 'Calderon',
+ 'Rosa',
+ 'Pollard',
+ 'Hooper',
+ 'Burch',
+ 'Mullen',
+ 'Fry',
+ 'Riddle',
+ 'Levy',
+ 'David',
+ 'Duke',
+ 'Odonnell',
+ 'Guy',
+ 'Michael',
+ 'Britt',
+ 'Frederick',
+ 'Daugherty',
+ 'Berger',
+ 'Dillard',
+ 'Alston',
+ 'Jarvis',
+ 'Frye',
+ 'Riggs',
+ 'Chaney',
+ 'Odom',
+ 'Duffy',
+ 'Fitzpatrick',
+ 'Valenzuela',
+ 'Merrill',
+ 'Mayer',
+ 'Alford',
+ 'Mcpherson',
+ 'Acevedo',
+ 'Donovan',
+ 'Barrera',
+ 'Albert',
+ 'Cote',
+ 'Reilly',
+ 'Compton',
+ 'Raymond',
+ 'Mooney',
+ 'Mcgowan',
+ 'Craft',
+ 'Cleveland',
+ 'Clemons',
+ 'Wynn',
+ 'Nielsen',
+ 'Baird',
+ 'Stanton',
+ 'Snider',
+ 'Rosales',
+ 'Bright',
+ 'Witt',
+ 'Stuart',
+ 'Hays',
+ 'Holden',
+ 'Rutledge',
+ 'Kinney',
+ 'Clements',
+ 'Castaneda',
+ 'Slater',
+ 'Hahn',
+ 'Emerson',
+ 'Conrad',
+ 'Burks',
+ 'Delaney',
+ 'Pate',
+ 'Lancaster',
+ 'Sweet',
+ 'Justice',
+ 'Tyson',
+ 'Sharpe',
+ 'Whitfield',
+ 'Talley',
+ 'Macias',
+ 'Irwin',
+ 'Burris',
+ 'Ratliff',
+ 'Mccray',
+ 'Madden',
+ 'Kaufman',
+ 'Beach',
+ 'Goff',
+ 'Cash',
+ 'Bolton',
+ 'Mcfadden',
+ 'Levine',
+ 'Good',
+ 'Byers',
+ 'Kirkland',
+ 'Kidd',
+ 'Workman',
+ 'Carney',
+ 'Dale',
+ 'Mcleod',
+ 'Holcomb',
+ 'England',
+ 'Finch',
+ 'Head',
+ 'Burt',
+ 'Hendrix',
+ 'Sosa',
+ 'Haney',
+ 'Franks',
+ 'Sargent',
+ 'Nieves',
+ 'Downs',
+ 'Rasmussen',
+ 'Bird',
+ 'Hewitt',
+ 'Lindsay',
+ 'Le',
+ 'Foreman',
+ 'Valencia',
+ 'Oneil',
+ 'Delacruz',
+ 'Vinson',
+ 'Dejesus',
+ 'Hyde',
+ 'Forbes',
+ 'Gilliam',
+ 'Guthrie',
+ 'Wooten',
+ 'Huber',
+ 'Barlow',
+ 'Boyle',
+ 'Mcmahon',
+ 'Buckner',
+ 'Rocha',
+ 'Puckett',
+ 'Langley',
+ 'Knowles',
+ 'Cooke',
+ 'Velazquez',
+ 'Whitley',
+ 'Noel',
+ 'Vang',
+
+}
diff --git a/data/lvl1_intro.png b/data/lvl1_intro.png
new file mode 100644
index 0000000..ab2e74d
--- /dev/null
+++ b/data/lvl1_intro.png
Binary files differ
diff --git a/data/lvl1_intro.xcf b/data/lvl1_intro.xcf
new file mode 100644
index 0000000..26143de
--- /dev/null
+++ b/data/lvl1_intro.xcf
Binary files differ
diff --git a/data/lvl2_intro.png b/data/lvl2_intro.png
new file mode 100644
index 0000000..eef17e6
--- /dev/null
+++ b/data/lvl2_intro.png
Binary files differ
diff --git a/data/lvl3_intro.png b/data/lvl3_intro.png
new file mode 100644
index 0000000..ad8f4d8
--- /dev/null
+++ b/data/lvl3_intro.png
Binary files differ
diff --git a/data/lvl4_intro.png b/data/lvl4_intro.png
new file mode 100644
index 0000000..aecdb06
--- /dev/null
+++ b/data/lvl4_intro.png
Binary files differ
diff --git a/data/lvl5_intro.png b/data/lvl5_intro.png
new file mode 100644
index 0000000..e04a5cd
--- /dev/null
+++ b/data/lvl5_intro.png
Binary files differ
diff --git a/data/lvl6_intro.png b/data/lvl6_intro.png
new file mode 100644
index 0000000..f17d7cb
--- /dev/null
+++ b/data/lvl6_intro.png
Binary files differ
diff --git a/data/lvl7_intro.png b/data/lvl7_intro.png
new file mode 100644
index 0000000..cfb37d8
--- /dev/null
+++ b/data/lvl7_intro.png
Binary files differ
diff --git a/data/lvl8_intro.png b/data/lvl8_intro.png
new file mode 100644
index 0000000..6840ecf
--- /dev/null
+++ b/data/lvl8_intro.png
Binary files differ
diff --git a/data/lvl9_intro.png b/data/lvl9_intro.png
new file mode 100644
index 0000000..57331d8
--- /dev/null
+++ b/data/lvl9_intro.png
Binary files differ
diff --git a/data/lvlfinal_intro.png b/data/lvlfinal_intro.png
new file mode 100644
index 0000000..7f14f81
--- /dev/null
+++ b/data/lvlfinal_intro.png
Binary files differ
diff --git a/data/mahjong.lua b/data/mahjong.lua
new file mode 100644
index 0000000..a7f0b09
--- /dev/null
+++ b/data/mahjong.lua
@@ -0,0 +1,886 @@
+math.randomseed(os.time())
+--local debugging = false
+if not debugging then
+ print = function(...) end
+end
+--local cam = scene.newcamera({10,10,10},{0,0,0},0)
+--print("Hello from mahjong.lua")
+--local w = 54
+--local h = 90
+--local img = video.newiimage(video.R8G8B8,{w,h})
+
+--local tex = video.newtexture("whatever",img)
+
+--[[
+ Represent the world as a 3d grid, where each tile covers a 2x2x1 space,
+ so that we don't have to worry about half-grids. Each space is either
+ "empty", "occupied by tile X" or "tile X"
+
+]]
+
+local tiles = {}
+do
+ for i = 1,9 do
+ tiles[#tiles + 1] = "bamboo" .. tostring(i)
+ tiles[#tiles + 1] = "circle" .. tostring(i)
+ end
+
+ for i = 1,15 do
+ tiles[#tiles + 1] = "pinyin" .. tostring(i)
+ end
+
+ tiles[#tiles + 1] = "fall"
+ tiles[#tiles + 1] = "spring"
+ tiles[#tiles + 1] = "summer"
+ tiles[#tiles + 1] = "winter"
+
+ tiles[#tiles + 1] = "lotus"
+ tiles[#tiles + 1] = "orchid"
+ tiles[#tiles + 1] = "peony"
+end
+
+local function print_puzzle(puzzle)
+ print(debug.traceback())
+ for l,layer in ipairs(puzzle.tiles) do
+ print("Layer",l)
+ local guide1 = {}
+ local guide2 = {}
+ for i = 1,puzzle.unused_spots.columns do
+ guide1[i] = math.floor(i / 10)
+ guide2[i] = i % 10
+ end
+ print(" " .. table.concat(guide1," "))
+ print(" " .. table.concat(guide2," "))
+ print()
+ for i = 1, puzzle.unused_spots.rows do
+ local bld = {string.format("%02d ",i)}
+ for j=1,puzzle.unused_spots.columns do
+ if puzzle.tiles[l][i][j] then
+ bld[#bld + 1] = puzzle.tiles[l][i][j].n
+ else
+ bld[#bld + 1] = 0
+ end
+ bld[#bld] = string.format("%2d",bld[#bld])
+ end
+ print(table.concat(bld," "))
+ end
+ end
+end
+
+function math.round(num)
+ if num % 1 > 0.5 then
+ return math.ceil(num)
+ else
+ return math.floor(num)
+ end
+end
+
+function rep(value,times)
+ local ret = {}
+ for i = 1,times do
+ ret[i] = value
+ end
+ return unpack(ret)
+end
+
+local turtle = {
+ columns = 15 * 2,
+ rows = 8 * 2,
+ layers = 5,
+ --First layer
+ {
+ --First row
+ {0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0},
+ {0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0},
+ --Second row
+ {0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0},
+ --Third row
+ {0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0},
+ --Fourth row
+ {0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0},
+ {1,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 1,2, 1,2},
+ --Fifth row
+ {2,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 2,2, 2,2},
+ {0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0},
+ --Sixth row
+ {0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0},
+ --Seventh row
+ {0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0},
+ --Eighth row
+ {0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0},
+ {0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0},
+ },
+ --Second layer
+ {
+ --First row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Second row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Third row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fourth row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fifth row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Sixth row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Seventh row
+ {0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Eighth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ },
+ --Third layer
+ {
+ --First row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Second row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Third row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fourth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fifth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Sixth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Seventh row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Eighth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ },
+ --Fourth layer
+ {
+ --First row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Second row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Third row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fourth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fifth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,2, 1,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 2,2, 2,2, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Sixth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Seventh row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Eighth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ },
+ --Fifth layer
+ {
+ --First row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Second row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Third row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fourth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,1, 2,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Fifth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,2, 2,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Sixth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Seventh row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ --Eighth row
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0},
+ }
+}
+
+local types = {
+ empty = 0,
+ tile = 1,
+ usedby = 2
+}
+
+local current_tile = nil
+
+local tilewidth = 28
+local tileheight = 40
+local layeroffx = 8
+local layeroffy = -8
+local function create_tile(number)
+ number = (number % #tiles) + 1
+ local tex = video.newtexturefromfile("../data/fulltiles/" .. tiles[number] .. ".png")
+ local newtile = {
+ tiletype = types.tile,
+ iguitexture = gui.newiguiimage({0,0},true,tex),
+ rect = {{0,0},{tilewidth,tileheight}},
+ n = number
+ }
+ current_tile = newtile
+
+ return newtile
+end
+local tileactualx = 32
+local tileactualy = 48
+local function set_tile_pos(tile,layer,row,column)
+ print("Setting a tile to", layer,row,column)
+ local x = (row * tilewidth) + (layer * layeroffx)
+ local y = (column * tileheight) + (layer * layeroffy)
+ tile.iguitexture:move({x,y})
+ tile.rect = {{x,y},{x+(tileactualx*2),y+(tileactualy*2)}}
+ tile.position = {layer,row,column}
+end
+
+--Checks if a tile is free to move
+local function is_free(puzzle,tile)
+ local layer,col,row = unpack(tile.position)
+ --print("Checking if tile at ", layer, row, col , " is free")
+ local has_tile_over = false
+ for i = layer+1,puzzle.unused_spots.layers do
+ for j = col-1,col+1 do
+ for k = row - 1, row + 1 do
+ --print("Checking if there is a tile at ", i, k, j)
+ if puzzle.tiles[i] and puzzle.tiles[i][k] and puzzle.tiles[i][k][j] ~= nil then
+ --print("There was!")
+ has_tile_over = true
+ end
+ if has_tile_over then break end
+ end
+ if has_tile_over then break end
+ end
+ if has_tile_over then break end
+ end
+ if has_tile_over then return false end
+
+ local can_move_left = true
+ for i = col-1,0,-1 do
+ if not can_move_left then break end
+ for j = -1,1 do
+ --print("Checking for any tiles at ",layer,row + j,i)
+ if puzzle.tiles[layer] and puzzle.tiles[layer][row + j] and puzzle.tiles[layer][row + j][i] ~= nil then
+ --print("Cannot move left")
+ can_move_left = false
+ break
+ end
+ end
+ end
+ if can_move_left then return true end
+
+ local can_move_right = true
+
+ for i = col+1,puzzle.unused_spots.columns do
+ if not can_move_right then break end
+ for j = -1,1 do
+ --print("Checking for any tiles at ",layer,row + j,i)
+ if puzzle.tiles[layer] and puzzle.tiles[layer][row + j] and puzzle.tiles[layer][row + j][i] ~= nil then
+ --print("Cannot move right")
+ can_move_right = false
+ break
+ end
+ end
+ end
+
+ return can_move_right
+end
+
+local function any_free(puzzle)
+ local free = {}
+ for layer = 1,puzzle.unused_spots.layers do
+ for row = 1,puzzle.unused_spots.rows do
+ for col = 1,puzzle.unused_spots.columns do
+ local tile = puzzle.tiles[layer][row][col]
+ if tile then
+ print("Found a tile at", layer, row, col)
+ end
+ if tile and is_free(puzzle,tile) then
+ print("Found a free tile at", layer, row, col)
+ print("n was", tile.n)
+ if free[tile.n] == nil then
+ free[tile.n] = 1
+ else
+ free[tile.n] = free[tile.n] + 1
+ end
+ end
+ end
+ end
+ end
+ for k,v in pairs(free) do
+ if v > 1 then
+ return true
+ end
+ end
+ return false
+end
+
+local function deepcopy(tbl)
+ print(debug.traceback())
+ print("making a deep copy of",tbl)
+ for k,v in pairs(tbl) do print(k,":",v) end
+ local ret = {}
+ for k,v in pairs(tbl) do
+ local key,value
+ if type(k) == "table" then
+ key = deepcopy(k)
+ else
+ key = k
+ end
+
+ if type(v) == "table" then
+ value = deepcopy(v)
+ else
+ value = v
+ end
+
+ ret[key] = value
+ end
+
+ return ret
+end
+
+--Generates a puzzle
+local function gen_puzzle(pattern)
+ print("Pattern is", pattern)
+ local puz = {
+ unused_spots = deepcopy(pattern),
+ tiles = {} --Layers
+ }
+ for l,layer in ipairs(puz.unused_spots) do
+ puz.tiles[l] = {}
+ for r,row in pairs(layer) do
+ puz.tiles[l][r] = {}
+ end
+ end
+
+ --Returns canfit,layer,row,column if a peice can fit in this row in this puzzle
+ local function find_unused_spot(puzzle)
+ print("finding unused spots")
+ print(debug.traceback())
+ local potential_spots = {}
+ local layernum = 1
+
+ print("Looking for unused positions in :")
+ for l,layer in ipairs(puzzle.unused_spots) do
+ print("Layer",l)
+ local guide1 = {}
+ local guide2 = {}
+ for i = 1,puzzle.unused_spots.columns do
+ guide1[i] = math.floor(i / 10)
+ guide2[i] = i % 10
+ end
+ --print(" " .. table.concat(guide1," "))
+ --print(" " .. table.concat(guide2," "))
+ --print()
+ for r,row in pairs(layer) do
+ local sb = {}
+ for c,col in pairs(row) do
+ sb[c] = col
+ end
+ --print(string.format("%02d ",r) .. table.concat(sb," "))
+ end
+ end
+ print("Continueing...")
+
+
+ for row = 1,puzzle.unused_spots.rows do
+ --print("Looking at row", row)
+ local from_left = 0
+ for col=(puzzle.unused_spots.columns/2),1,-1 do
+ --print("Looking at column", col)
+ for layer=1,puzzle.unused_spots.layers do
+ --print("Looking at layer", layer)
+ --print("From_left was", from_left)
+ local tel = puzzle.unused_spots[layer][row][col]
+ --print("tel was", tel)
+ if from_left == 0 and tel == 1 then
+ --print("found an unused spot")
+ from_left = {layer,row,col}
+ --elseif from_left == 0 and tel == 2 then
+ ----print("Hit no left")
+ ---- there's not from_left avaliable for this row
+ --from_left = -1
+ --break
+ elseif from_left ~= 0 then
+ --print("found something, breaking...")
+ break
+ end
+ end
+ if from_left ~= 0 then break end
+ end
+ --print("Got from_left")
+ local from_right = 0
+ for col=puzzle.unused_spots.columns/2,puzzle.unused_spots.columns,1 do
+ for layer=1,puzzle.unused_spots.layers do
+ if from_right== 0 and puzzle.unused_spots[layer][row][col] == 1 then
+ from_right = {layer,row,col}
+ --elseif from_right == 0 and puzzle.unused_spots[layer][row][col] == 2 then
+ ----Theres no from_right avaliable for this row
+ --from_right = -1
+ --break
+
+ elseif from_right ~= 0 then break end
+ end
+ if from_right ~= 0 then break end
+ end
+ --print("Got from_right")
+ --print("from left is", from_left)
+ --print("from right is", from_right)
+ local spots_same = true
+ if type(from_left) == "table" and type(from_right) == "table" then
+ --print("Checking if spots same",table.concat(from_left,","),table.concat(from_right,","))
+ for i = 1,3 do
+ if from_left[i] ~= from_right[i] then
+ spots_same = false
+ break
+ end
+ end
+ elseif from_left == 0 or from_right == 0 then
+ spots_same = false
+ end
+ --print("Spots_same is", spots_same)
+ --print("Looking at same spots")
+ if not spots_same then
+ if from_left ~= 0 then
+ potential_spots[#potential_spots + 1] = from_left
+ end
+ if from_right ~= 0 then
+ potential_spots[#potential_spots + 1] = from_right
+ end
+ elseif spots_same and type(from_left) == "table" then
+ potential_spots[#potential_spots + 1] = from_left
+ end
+ end
+ --print("Found ", #potential_spots, " unused spots...")
+ return potential_spots
+ end
+ --print("Finding an unused spot:")
+ local spots = find_unused_spot(puz)
+ for spotnum,spot in pairs(spots) do
+ --print("Spot", spotnum, ":", spot[1],",",spot[2],",",spot[3])
+ end
+ --Iterate through integers, putting the same number of each kind of tile on the board.
+ local tilenum = 0
+ while true do
+ local can_place_into = false
+ local potential_spots = find_unused_spot(puz)
+ print("Number of potential spots is", #potential_spots)
+ --print("Potential spots is:")
+ --for k,v in pairs(potential_spots) do
+ --print(k,":")
+ --print("\t",table.concat(v,","))
+ --end
+ if #potential_spots == 0 then
+ print("Potential spots is 0! break!")
+ break
+ end
+ if #potential_spots == 1 then
+ --We've generated ourselves into a corner, try again
+ print("I want to crash!")
+ print("Generated into corner!")
+ coroutine.yield()
+ local pn = gen_puzzle(pattern)
+ return pn
+ end
+ local numpotspots = #potential_spots
+ local rng1 = math.random(1,numpotspots)
+ local rng2 = math.random(1,numpotspots-1)
+ --print("rng1 is", rng1)
+ --print("rng2 is", rng2)
+ local spot1 = potential_spots[rng1]
+ local spot2 = potential_spots[rng2]
+ --if spot1 == spot2 then
+ --spot2 = potential_spots[rng2+1]
+ --end
+ --print("spot1 is", spot1, "(" .. table.concat(spot1,",") .. ")")
+ --print("spot2 is", spot2, "(" .. table.concat(spot2,",") .. ")")
+ if not spot1 or not spot2 then
+ crash()
+ end
+ local spots_same = true
+ for i = 1,3 do
+ if spot1[i] ~= spot2[i] then
+ spots_same = false
+ break
+ end
+ end
+ if not spots_same then
+ puz.tiles[spot1[1]][spot1[2]][spot1[3]] = tilenum
+ puz.tiles[spot2[1]][spot2[2]][spot2[3]] = tilenum
+
+ for i = 0,1 do
+ for j = 0,1 do
+ local x1,y1,z1 = spot1[1],spot1[2] + i,spot1[3] + j
+ local x2,y2,z2 = spot2[1],spot2[2] + i,spot2[3] + j
+ puz.unused_spots[x1][y1][z1] = 0
+ puz.unused_spots[x2][y2][z2] = 0
+ end
+ end
+
+ for k,v in pairs({spot1,spot2}) do
+ --local tile = create_tile(tilenum)
+ --set_tile_pos(tile,v[1],v[3],v[2])
+ --puz.tiles[v[1]][v[2]][v[3]] = tile
+ end
+
+ tilenum = tilenum + 101
+ end
+ coroutine.yield(puz)
+ end
+ for layer = 1,puz.unused_spots.layers do
+ for col = puz.unused_spots.columns,1,-1 do
+ for row = 1,puz.unused_spots.rows do
+ local tilenum = puz.tiles[layer][row][col]
+ if tilenum then
+ local tile = create_tile(tilenum)
+ set_tile_pos(tile,layer,col,row)
+ puz.tiles[layer][row][col] = tile
+ coroutine.yield()
+ end
+ end
+ end
+ end
+
+ return puz
+end
+
+for i = 1,10 do
+ print(math.round(math.random(1,2)))
+end
+
+local puzzle = nil
+local e
+local co = coroutine.create(function()
+ return gen_puzzle(turtle)
+end)
+local ogt = GAME.tick
+local game_generated = false
+function GAME.tick()
+ print("Running tick...\n")
+ if coroutine.status(co) == "suspended" then
+ e,puzzle = coroutine.resume(co)
+ if not e then
+ error(puzzle)
+ co = coroutine.create(function()
+ return gen_puzzle(turtle)
+ end)
+ end
+ else
+ print("After generation, puzzle was", puzzle)
+ game_generated = true
+ end
+ if ogt then
+ ogt()
+ end
+end
+--print_puzzle(puzzle)
+
+local xoff = 36
+local yoff = 30
+local rectx = tilewidth
+local recty = tileheight
+local selected = nil
+local game_has_ended = false
+function GAME.onMouseDown(x,y,mouse)
+ local possible_tiles = {}
+ for layernum,layer in pairs(puzzle.tiles) do
+ for rownum,row in pairs(layer) do
+ for colnum,tile in pairs(row) do
+ local clip = tile.rect
+ if x > clip[1][1] and x < clip[2][1] and y > clip[1][2] and y < clip[2][2] then
+ possible_tiles[#possible_tiles + 1] = tile
+ end
+ end
+ end
+ end
+
+ local toptile = possible_tiles[#possible_tiles]
+ if toptile == nil then return end
+ local has_removed = false
+ -- Check if the tile we selected can move
+ if is_free(puzzle,toptile) then
+ if selected == nil then
+ selected = toptile
+ selected.iguitexture:setcolor({255,0,0,255})
+ else
+ if toptile.n == selected.n and toptile ~= selected then
+ toptile.iguitexture:remove()
+ selected.iguitexture:remove()
+ toptile.iguitexture = nil
+ selected.iguitexture = nil
+ tl,tc,tr = unpack(toptile.position)
+ sl,sc,sr = unpack(selected.position)
+ puzzle.tiles[tl][tr][tc] = nil
+ puzzle.tiles[sl][sr][sc] = nil
+ selected = nil
+ has_removed = true
+ else
+ selected.iguitexture:setcolor({255,255,255,255})
+ selected = toptile
+ selected.iguitexture:setcolor({255,0,0,255})
+ end
+ end
+ end
+
+ --Check to see if the tile we removed has finished the game
+ local numtiles = 0
+ if has_removed then
+ for layernum,layer in pairs(puzzle.tiles) do
+ if numtiles > 0 then break end
+ for rownum,row in pairs(layer) do
+ if numtiles > 0 then break end
+ for columnnum,tile in pairs(row) do
+ if tile ~= nil then
+ numtiles = numtiles + 1
+ break
+ end
+ end
+ end
+ end
+ else
+ numtiles = 1 -- don't finish the game if we didn't remove a tile
+ end
+
+ --We're done! End the game!
+ if numtiles == 0 then
+ game_has_ended = true
+ end
+
+ if not any_free(puzzle) and not game_has_ended then
+ error("You fail! (no moves left)")
+ end
+
+ --::foundtile::
+end
+
+local fireworks = {}
+local stars = {}
+local screenw = scrw()
+local screeny = scrh()
+
+print("About to create firework star image")
+local starwidth = 3
+local starheight = 3
+local riseimg= video.newiimage(video.A8R8G8B8,{starwidth,starheight})
+for i = starheight - starwidth,1,-1 do
+ print("Going through loop, i is",i)
+ local color = {255,255,255,255} --alpha = 127 it's not there, alpha = 128 it's there
+ riseimg:setPixel({0,i},color,true)
+ riseimg:setPixel({1,i-1},color,true)
+ riseimg:setPixel({2,i},color,true)
+end
+local bloomwidth,bloomheight = 100,100
+local starimg = video.newiimage(video.A8R8G8B8,{bloomwidth,bloomheight})
+for i = -bloomwidth,bloomwidth do
+ for j = -bloomheight, bloomheight do
+ if math.abs(i^2 + j^2) > 50^2 then
+ starimg:setPixel({i + (bloomwidth / 2),j + (bloomheight / 2)},{255,255,255,255},true)
+ end
+ end
+end
+local fizzleimg = video.newiimage(video.A8R8G8B8,{3,3})
+for i = 0,2 do
+ for j = 0,2 do
+ fizzleimg:setPixel({i,j},{255,255,255,255},true)
+ end
+end
+local sparkimg = video.newiimage(video.A8R8G8B8,{1,1})
+sparkimg:setPixel({0,0},{255,255,255,255},true)
+print("Done creating firework star image")
+print("video is:")
+for k,v in pairs(video) do
+ print(k,":",v)
+end
+local risetex = video.newtexture("rise",riseimg)
+local startex = video.newtexture("w/e",starimg)
+local fizzletex = video.newtexture("fizz",fizzleimg)
+local sparktex = video.newtexture("spark",sparkimg)
+local fadetest = video.newiimage(video.A8R8G8B8,{100,100})
+for i = 0,99 do
+ for j = 0,99 do
+ fadetest:setPixel({i,j},{i+j,i+j,i+j,i+j},true)
+ end
+end
+print("video:",video)
+for k,v in pairs(video) do
+ print(k,":",v)
+end
+
+for k,v in pairs(fadetest) do
+ print(k,":",v)
+end
+local fadetex = video.newtexture("test",fadetest)
+local left = true
+local loadpos = 0
+GAME.draw = function()
+ if not game_generated then
+ if left then
+ loadpos = loadpos + 1
+ end
+ video.drawtexture(fadetex,{screenw/2 - 100,screeny/2 - 5},{{0,0},{loadpos,10}},{255,255,255,255},true)
+ end
+ for _,v in pairs(fireworks) do
+ for i = 1,3 do
+ local tcolor = {}
+ for k,v in pairs(v.color) do tcolor[k] = v end
+ tcolor[4] = 255 - (i * 15)
+ video.drawtexture(risetex,{v.x,v.y + i},{{0,0},{starwidth,starheight}},tcolor,true)
+ end
+ end
+ local fw, fh = 20,20
+ local stars_to_remove = {}
+ for _,v in pairs(stars) do
+ local fizzle_in = false
+ for i,j in pairs(v.fizzles) do
+ video.drawtexture(fizzletex,{j.x,j.y},{{0,0},{3,3}},v.color,true)
+ j.x = j.x + j.vx
+ j.y = j.y + j.vy
+ if math.random(0,1) == 1 then
+ j.vy = j.vy + 1
+ end
+ if j.y < screenw then
+ fizzle_in = true
+ end
+ end
+ if not fizzle_in then
+ stars_to_remove[v] = true
+ end
+ end
+ local cursor1 = 1
+ local cursor2 = 1
+ local starlen = #stars
+ while cursor1 < starlen do
+ if stars_to_remove[stars[cursor1]] then
+ cursor2 = cursor2 + 1
+ else
+ cursor1 = cursor1 + 1
+ cursor2 = cursor2 + 1
+ end
+ stars[cursor1] = stars[cursor2]
+ end
+end
+local function create_firework()
+ local xstart = math.random(50,screenw)
+ local rngcolor = {}
+ --Only generate "bright" colors:
+ -- 1 color should be close to 255
+ -- 1 color should be close to 0
+ -- the last color can range from 0 to 255
+ local bright = math.random(1,3)
+ local dark = math.random(1,2)
+ local brightval = math.random(200,255)
+ local darkval = math.random(0,55)
+ local medval = math.random(0,255)
+ local colorset = {brightval,medval,darkval}
+ for i = 1,3 do
+ local toplace = math.random(1,#colorset)
+ rngcolor[i] = colorset[toplace]
+ for j = toplace,#colorset do
+ colorset[j] = colorset[j + 1]
+ end
+ end
+ rngcolor[4] = 255
+ local firework = {
+ x = xstart,
+ y = screeny,
+ color = rngcolor,
+ yexp = math.random(150,screeny - 150),
+ }
+ --firework.img:setcolor(rngcolor)
+ fireworks[#fireworks + 1] = firework
+end
+local function create_star(pos,color)
+ --print("creating star at pos")
+ for k,v in pairs(pos) do print(k,":",v) end
+ --print("with color")
+ for k,v in pairs(color) do print(k,":",v) end
+ local star = {}
+ star.x = pos.x
+ star.y = pos.y
+ star.color = color
+ star.life = 0
+ star.fizzles = {}
+ for i = 1,10 do
+ local ang = math.random(0,2 * math.pi)
+ local pow = math.random(0.5,5)
+ star.fizzles[i] = {
+ x = pos.x,
+ y = pos.y,
+ vx = math.sin(ang) * pow,
+ vy = math.cos(ang) * pow
+ }
+ end
+ stars[#stars + 1] = star
+end
+local tryimg = gui.newiguiimage({0,0},true,risetex)
+local ogt = GAME.tick
+function GAME.tick()
+ if game_has_ended then
+ if math.random() < 0.10 then
+ create_firework()
+ end
+ end
+ local fireworks_to_remove = {}
+ local crash = false
+ local numtoremove = 0
+ for _,firework in pairs(fireworks) do
+ firework.y = firework.y - 3
+ if firework.y < firework.yexp then
+ fireworks_to_remove[firework] = true
+ if not firework.exploded then
+ create_star({
+ x = firework.x,
+ y = firework.y
+ },firework.color)
+ firework.exploded = true
+ end
+ numtoremove = numtoremove + 1
+ crash = true
+ end
+ end
+ local cursor1 = 1
+ local cursor2 = 1
+ local fwlen = #fireworks
+ while cursor1 < fwlen+1 do
+ local firework = fireworks[cursor2]
+ if fireworks_to_remove[firework] then
+ cursor1 = cursor1 + 1
+ else
+ cursor2 = cursor2 + 1
+ cursor1 = cursor1 + 1
+ end
+ fireworks[cursor2] = fireworks[cursor1]
+ end
+ if ogt then
+ ogt()
+ end
+end
+
+print("At end of mahjong, GAME.tick is", GAME.tick)
diff --git a/data/names.txt b/data/names.txt
new file mode 100644
index 0000000..988da6f
--- /dev/null
+++ b/data/names.txt
@@ -0,0 +1,200 @@
+'James',
+'John',
+'Robert',
+'Michael',
+'William',
+'David',
+'Richard',
+'Joseph',
+'Thomas',
+'Charles',
+'Christopher',
+'Daniel',
+'Matthew',
+'Anthony',
+'Donald',
+'Mark',
+'Paul',
+'Steven',
+'Andrew',
+'Kenneth',
+'Joshua',
+'George',
+'Kevin',
+'Brian',
+'Edward',
+'Ronald',
+'Timothy',
+'Jason',
+'Jeffrey',
+'Ryan',
+'Jacob',
+'Gary',
+'Nicholas',
+'Eric',
+'Stephen',
+'Jonathan',
+'Larry',
+'Justin',
+'Scott',
+'Brandon',
+'Frank',
+'Benjamin',
+'Gregory',
+'Samuel',
+'Raymond',
+'Patrick',
+'Alexander',
+'Jack',
+'Dennis',
+'Jerry',
+'Tyler',
+'Aaron',
+'Jose',
+'Henry',
+'Douglas',
+'Adam',
+'Peter',
+'Nathan',
+'Zachary',
+'Walter',
+'Kyle',
+'Harold',
+'Carl',
+'Jeremy',
+'Keith',
+'Roger',
+'Gerald',
+'Ethan',
+'Arthur',
+'Terry',
+'Christian',
+'Sean',
+'Lawrence',
+'Austin',
+'Joe',
+'Noah',
+'Jesse',
+'Albert',
+'Bryan',
+'Billy',
+'Bruce',
+'Willie',
+'Jordan',
+'Dylan',
+'Alan',
+'Ralph',
+'Gabriel',
+'Roy',
+'Juan',
+'Wayne',
+'Eugene',
+'Logan',
+'Randy',
+'Louis',
+'Russell',
+'Vincent',
+'Philip',
+'Bobby',
+'Johnny',
+'Bradley',
+'Mary',
+'Patricia',
+'Jennifer',
+'Linda',
+'Elizabeth',
+'Barbara',
+'Susan',
+'Jessica',
+'Sarah',
+'Karen',
+'Nancy',
+'Margaret',
+'Lisa',
+'Betty',
+'Dorothy',
+'Sandra',
+'Ashley',
+'Kimberly',
+'Donna',
+'Emily',
+'Michelle',
+'Carol',
+'Amanda',
+'Melissa',
+'Deborah',
+'Stephanie',
+'Rebecca',
+'Laura',
+'Sharon',
+'Cynthia',
+'Kathleen',
+'Helen',
+'Amy',
+'Shirley',
+'Angela',
+'Anna',
+'Brenda',
+'Pamela',
+'Nicole',
+'Ruth',
+'Katherine',
+'Samantha',
+'Christine',
+'Emma',
+'Catherine',
+'Debra',
+'Virginia',
+'Rachel',
+'Carolyn',
+'Janet',
+'Maria',
+'Heather',
+'Diane',
+'Julie',
+'Joyce',
+'Victoria',
+'Kelly',
+'Christina',
+'Joan',
+'Evelyn',
+'Lauren',
+'Judith',
+'Olivia',
+'Frances',
+'Martha',
+'Cheryl',
+'Megan',
+'Andrea',
+'Hannah',
+'Jacqueline',
+'Ann',
+'Jean',
+'Alice',
+'Kathryn',
+'Gloria',
+'Teresa',
+'Doris',
+'Sara',
+'Janice',
+'Julia',
+'Marie',
+'Madison',
+'Grace',
+'Judy',
+'Theresa',
+'Beverly',
+'Denise',
+'Marilyn',
+'Amber',
+'Danielle',
+'Abigail',
+'Brittany',
+'Rose',
+'Diana',
+'Natalie',
+'Sophia',
+'Alexis',
+'Lori',
+'Kayla',
+'Jane',
diff --git a/data/portraits.lua b/data/portraits.lua
new file mode 100644
index 0000000..9990485
--- /dev/null
+++ b/data/portraits.lua
@@ -0,0 +1,33 @@
+return {
+ "TCP Cyberpunk 3.jpg",
+ "TCP Cyberpunk 3.jpg",
+ "TCP Cyberpunk 5.jpg",
+ "TCP Dwarf 1.jpg",
+ "TCP Dwarf 4.jpg",
+ "TCP Dwarf 6.jpg",
+ "TCP Elf 2.jpg",
+ "TCP Gnome 1.jpg",
+ "TCP Gnome 2.jpg",
+ "TCP Hero 1.jpg",
+ "TCP Hero 3.jpg",
+ "TCP Human 1.jpg",
+ "TCP Human 2.jpg",
+ "TCP Human 3.jpg",
+ "TCP Human 4.jpg",
+ "TCP Human 5.jpg",
+ "TCP Human 6.jpg",
+ "TCP Human 7.jpg",
+ "TCP Human 8.jpg",
+ "TCP Human 9.jpg",
+ "TCP Mad Scientist 2.jpg",
+ "TCP Pirate 1.jpg",
+ "TCP Pirate 2.jpg",
+ "TCP Pirate 5.jpg",
+ "TCP Scary 1.jpg",
+ "TCP Scary 2.jpg",
+ "TCP Scary 3.jpg",
+ "TCP Toon 1.jpg",
+ "TCP Vampire 1.jpg",
+ "TCP Vampire 2.jpg",
+ "TCP Vampire 4.jpg",
+}
diff --git a/data/res/font.xml b/data/res/font.xml
new file mode 100644
index 0000000..3665304
--- /dev/null
+++ b/data/res/font.xml
Binary files differ
diff --git a/data/res/font0.png b/data/res/font0.png
new file mode 100644
index 0000000..d14887b
--- /dev/null
+++ b/data/res/font0.png
Binary files differ
diff --git a/data/res/font1.png b/data/res/font1.png
new file mode 100644
index 0000000..ebdaa21
--- /dev/null
+++ b/data/res/font1.png
Binary files differ
diff --git a/data/res/font2.png b/data/res/font2.png
new file mode 100644
index 0000000..aec13da
--- /dev/null
+++ b/data/res/font2.png
Binary files differ
diff --git a/data/smol/TCP Cyberpunk 3.jpg b/data/smol/TCP Cyberpunk 3.jpg
new file mode 100644
index 0000000..e077954
--- /dev/null
+++ b/data/smol/TCP Cyberpunk 3.jpg
Binary files differ
diff --git a/data/smol/TCP Cyberpunk 5.jpg b/data/smol/TCP Cyberpunk 5.jpg
new file mode 100644
index 0000000..33ff1ca
--- /dev/null
+++ b/data/smol/TCP Cyberpunk 5.jpg
Binary files differ
diff --git a/data/smol/TCP Dwarf 1.jpg b/data/smol/TCP Dwarf 1.jpg
new file mode 100644
index 0000000..5a3a54a
--- /dev/null
+++ b/data/smol/TCP Dwarf 1.jpg
Binary files differ
diff --git a/data/smol/TCP Dwarf 4.jpg b/data/smol/TCP Dwarf 4.jpg
new file mode 100644
index 0000000..558b216
--- /dev/null
+++ b/data/smol/TCP Dwarf 4.jpg
Binary files differ
diff --git a/data/smol/TCP Dwarf 6.jpg b/data/smol/TCP Dwarf 6.jpg
new file mode 100644
index 0000000..cfb3c47
--- /dev/null
+++ b/data/smol/TCP Dwarf 6.jpg
Binary files differ
diff --git a/data/smol/TCP Elf 2.jpg b/data/smol/TCP Elf 2.jpg
new file mode 100644
index 0000000..7bc195b
--- /dev/null
+++ b/data/smol/TCP Elf 2.jpg
Binary files differ
diff --git a/data/smol/TCP Gnome 1.jpg b/data/smol/TCP Gnome 1.jpg
new file mode 100644
index 0000000..33e14e9
--- /dev/null
+++ b/data/smol/TCP Gnome 1.jpg
Binary files differ
diff --git a/data/smol/TCP Gnome 2.jpg b/data/smol/TCP Gnome 2.jpg
new file mode 100644
index 0000000..0451693
--- /dev/null
+++ b/data/smol/TCP Gnome 2.jpg
Binary files differ
diff --git a/data/smol/TCP Hero 1.jpg b/data/smol/TCP Hero 1.jpg
new file mode 100644
index 0000000..27003a6
--- /dev/null
+++ b/data/smol/TCP Hero 1.jpg
Binary files differ
diff --git a/data/smol/TCP Hero 3.jpg b/data/smol/TCP Hero 3.jpg
new file mode 100644
index 0000000..de832d6
--- /dev/null
+++ b/data/smol/TCP Hero 3.jpg
Binary files differ
diff --git a/data/smol/TCP Human 1.jpg b/data/smol/TCP Human 1.jpg
new file mode 100644
index 0000000..44e84c1
--- /dev/null
+++ b/data/smol/TCP Human 1.jpg
Binary files differ
diff --git a/data/smol/TCP Human 2.jpg b/data/smol/TCP Human 2.jpg
new file mode 100644
index 0000000..2ad4cc7
--- /dev/null
+++ b/data/smol/TCP Human 2.jpg
Binary files differ
diff --git a/data/smol/TCP Human 3.jpg b/data/smol/TCP Human 3.jpg
new file mode 100644
index 0000000..07f8442
--- /dev/null
+++ b/data/smol/TCP Human 3.jpg
Binary files differ
diff --git a/data/smol/TCP Human 4.jpg b/data/smol/TCP Human 4.jpg
new file mode 100644
index 0000000..f2e705a
--- /dev/null
+++ b/data/smol/TCP Human 4.jpg
Binary files differ
diff --git a/data/smol/TCP Human 5.jpg b/data/smol/TCP Human 5.jpg
new file mode 100644
index 0000000..abff6d7
--- /dev/null
+++ b/data/smol/TCP Human 5.jpg
Binary files differ
diff --git a/data/smol/TCP Human 6.jpg b/data/smol/TCP Human 6.jpg
new file mode 100644
index 0000000..e19cdc6
--- /dev/null
+++ b/data/smol/TCP Human 6.jpg
Binary files differ
diff --git a/data/smol/TCP Human 7.jpg b/data/smol/TCP Human 7.jpg
new file mode 100644
index 0000000..91a4794
--- /dev/null
+++ b/data/smol/TCP Human 7.jpg
Binary files differ
diff --git a/data/smol/TCP Human 8.jpg b/data/smol/TCP Human 8.jpg
new file mode 100644
index 0000000..36cfb45
--- /dev/null
+++ b/data/smol/TCP Human 8.jpg
Binary files differ
diff --git a/data/smol/TCP Human 9.jpg b/data/smol/TCP Human 9.jpg
new file mode 100644
index 0000000..4878cfa
--- /dev/null
+++ b/data/smol/TCP Human 9.jpg
Binary files differ
diff --git a/data/smol/TCP Mad Scientist 2.jpg b/data/smol/TCP Mad Scientist 2.jpg
new file mode 100644
index 0000000..597b816
--- /dev/null
+++ b/data/smol/TCP Mad Scientist 2.jpg
Binary files differ
diff --git a/data/smol/TCP Pirate 1.jpg b/data/smol/TCP Pirate 1.jpg
new file mode 100644
index 0000000..4845f6e
--- /dev/null
+++ b/data/smol/TCP Pirate 1.jpg
Binary files differ
diff --git a/data/smol/TCP Pirate 2.jpg b/data/smol/TCP Pirate 2.jpg
new file mode 100644
index 0000000..73fa3b9
--- /dev/null
+++ b/data/smol/TCP Pirate 2.jpg
Binary files differ
diff --git a/data/smol/TCP Pirate 5.jpg b/data/smol/TCP Pirate 5.jpg
new file mode 100644
index 0000000..8da4d58
--- /dev/null
+++ b/data/smol/TCP Pirate 5.jpg
Binary files differ
diff --git a/data/smol/TCP Scary 1.jpg b/data/smol/TCP Scary 1.jpg
new file mode 100644
index 0000000..21a1bde
--- /dev/null
+++ b/data/smol/TCP Scary 1.jpg
Binary files differ
diff --git a/data/smol/TCP Scary 2.jpg b/data/smol/TCP Scary 2.jpg
new file mode 100644
index 0000000..395d655
--- /dev/null
+++ b/data/smol/TCP Scary 2.jpg
Binary files differ
diff --git a/data/smol/TCP Scary 3.jpg b/data/smol/TCP Scary 3.jpg
new file mode 100644
index 0000000..8948149
--- /dev/null
+++ b/data/smol/TCP Scary 3.jpg
Binary files differ
diff --git a/data/smol/TCP Toon 1.jpg b/data/smol/TCP Toon 1.jpg
new file mode 100644
index 0000000..2e0da7f
--- /dev/null
+++ b/data/smol/TCP Toon 1.jpg
Binary files differ
diff --git a/data/smol/TCP Vampire 1.jpg b/data/smol/TCP Vampire 1.jpg
new file mode 100644
index 0000000..26daee2
--- /dev/null
+++ b/data/smol/TCP Vampire 1.jpg
Binary files differ
diff --git a/data/smol/TCP Vampire 2.jpg b/data/smol/TCP Vampire 2.jpg
new file mode 100644
index 0000000..89abe7e
--- /dev/null
+++ b/data/smol/TCP Vampire 2.jpg
Binary files differ
diff --git a/data/smol/TCP Vampire 4.jpg b/data/smol/TCP Vampire 4.jpg
new file mode 100644
index 0000000..db37a37
--- /dev/null
+++ b/data/smol/TCP Vampire 4.jpg
Binary files differ
diff --git a/data/traits.lua b/data/traits.lua
new file mode 100644
index 0000000..b0fcc38
--- /dev/null
+++ b/data/traits.lua
@@ -0,0 +1,134 @@
+return {
+ {
+ text = "High school graduate",
+ payback_chance = 0.7,
+ payback_varience = 0.2,
+ category = "Education",
+ },
+ {
+ text = "Trade school graduate",
+ payback_chance = 0.75,
+ payback_varience = 0.1,
+ category = "Education",
+ },
+ {
+ text = "College graduate",
+ payback_chance = 0.8,
+ payback_varience = 0.3,
+ category = "Education",
+ },
+ {
+ text = "Went hikeing in the Grand Canyon",
+ payback_chance = -1,
+ payback_varience = -1,
+ category = {}
+ },
+ {
+ text = "Likes to cycle to work",
+ payback_chance = -1,
+ payback_varience = -1,
+ category = "Habit",
+ },
+ {
+ text = "President of their local drone enthusiast club",
+ payback_chance = 0.9,
+ payback_varience = 0.1,
+ category = "Habit",
+ },
+ {
+ text = "Is married",
+ payback_chance = 0.8,
+ payback_varience = 0.2,
+ cateogry = "Marital",
+ },
+ {
+ text = "Recently Divorced",
+ payback_chance = 0.6,
+ payback_varience = 0.1,
+ cateogry = "Marital",
+ },
+ {
+ text = "Unmarried",
+ payback_chance = 0.55,
+ payback_varience = 0.3,
+ category = "Marital",
+ },
+ {
+ text = "Has 2 children",
+ payback_chance = 0.8,
+ payback_varience = 0.1,
+ category = "Children",
+ },
+ {
+ text = "Has 6 children",
+ payback_chance = 0.85,
+ payback_varience = 0.15,
+ category = "Children",
+ },
+ {
+ text = "Dislikes cat pictures on the internet",
+ payback_chance = -1,
+ payback_varience = -1,
+ cateogry = {}
+ },
+ {
+ text = "Is left handed",
+ payback_chance = -1,
+ payback_varience = -1,
+ category = {}
+ },
+ {
+ text = "Previous criminal conviction",
+ payback_chance = 0.5,
+ payback_varience = 0.1,
+ category = {}
+ },
+ {
+ text = "Impulsive shopper",
+ payback_chance = 0.4,
+ payback_varience = 0.2,
+ cateogry = {}
+ },
+ {
+ text = "Buys expensive cloths",
+ payback_chance = -1,
+ payback_varience = -1,
+ category = {}
+ },
+ {
+ text = "Charged with fraud",
+ payback_chance = 0.1,
+ payback_varience = 0.1,
+ category = {}
+ },
+ {
+ text = "Frequently misses payments on utility bills",
+ payback_chance = 0.3,
+ payback_varience = 0.3,
+ cateogry = {}
+ },
+ {
+ text = "Poor fashion sense",
+ payback_chance = -1,
+ payback_varience = -1,
+ category = {}
+ },
+ {
+ text = "Invests in a 401k",
+ payback_chance = 1,
+ payback_varience = 0,
+ category = {}
+ },
+ {
+ text = "Invests in stocks",
+ payback_chance = 0.5,
+ payback_varience = 0.5,
+ category = {}
+ },
+ {
+ text = "Invests in bonds",
+ payback_chance = 0.9,
+ payback_varience = 0.05,
+ category = {}
+ }
+}