diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml
index 2aa65fc42..396111170 100644
--- a/.github/workflows/cppcheck.yml
+++ b/.github/workflows/cppcheck.yml
@@ -21,7 +21,22 @@ jobs:
- name: Run cppcheck
run: |
cd ${{ env.WORKSPACE }}
- cppcheck --enable=all --output-file=cppcheck-result.txt --force --quiet -I Library Projects
+ cppcheck \
+ --enable=warning,style,performance,portability \
+ --suppress=missingIncludeSystem \
+ --suppress=unusedFunction \
+ --suppress=syntaxError:*/UnitTest/* \
+ --inline-suppr \
+ --output-file=cppcheck-result.txt \
+ --quiet \
+ -I Library \
+ -j $(nproc) \
+ Library/PAX_GRAPHICA \
+ Library/PAX_MAHOROBA \
+ Library/PAX_SAPIENTICA \
+ Projects/MapViewer \
+ Projects/IntegrationTest \
+ Projects/UnitTest
- name: Setup reviewdog
uses: reviewdog/action-setup@80a06617492b461a66508e2dedf16233f0506804
diff --git a/.github/workflows/reviewdog-cpplint.yml b/.github/workflows/reviewdog-cpplint.yml
index 579a8a8c0..ca74547b1 100644
--- a/.github/workflows/reviewdog-cpplint.yml
+++ b/.github/workflows/reviewdog-cpplint.yml
@@ -11,7 +11,7 @@ jobs:
uses: actions/checkout@v4
- name: cpplint
- uses: reviewdog/action-cpplint@b6c13159b10435813edfddea9e1cd02157544f45
+ uses: reviewdog/action-cpplint@v1
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
diff --git a/.gitignore b/.gitignore
index 82a5afed9..9fc938e8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -284,3 +284,4 @@ Document/Doxygen/*/
DevelopmentBuild/
ProductionBuild/
SimulationResults/
+LabeledSimulationResults/
diff --git a/Data/Font/noto-sans-sc/NotoSansSC-Regular.otf b/Data/Font/noto-sans-sc/NotoSansSC-Regular.otf
index 25622c930..ee1e304d6 100644
Binary files a/Data/Font/noto-sans-sc/NotoSansSC-Regular.otf and b/Data/Font/noto-sans-sc/NotoSansSC-Regular.otf differ
diff --git a/Data/LoadingScreen/LoadingScreen.png b/Data/LoadingScreen/LoadingScreen.png
new file mode 100644
index 000000000..e16874480
Binary files /dev/null and b/Data/LoadingScreen/LoadingScreen.png differ
diff --git a/Data/LoadingScreen/LoadingScreenSample.png b/Data/LoadingScreen/LoadingScreenSample.png
new file mode 100644
index 000000000..fc4748522
Binary files /dev/null and b/Data/LoadingScreen/LoadingScreenSample.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy2_10_840_432_40_72.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy2_10_840_432_40_72.png
new file mode 100644
index 000000000..3fda4eaa7
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy2_10_840_432_40_72.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_10_908_326_20_59.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_10_908_326_20_59.png
new file mode 100644
index 000000000..7c1f8b276
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_10_908_326_20_59.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs2_10_908_326_20_59.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs2_10_908_326_20_59.png
new file mode 100644
index 000000000..7d77d38de
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs2_10_908_326_20_59.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs_10_908_326_20_59.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs_10_908_326_20_59.png
new file mode 100644
index 000000000..499dedc42
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy5_hs_10_908_326_20_59.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_840_432_40_72.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_840_432_40_72.png
new file mode 100644
index 000000000..fcdd3ffb2
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_840_432_40_72.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_976_608_48_64.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_976_608_48_64.png
new file mode 100644
index 000000000..2f03927b4
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_10_976_608_48_64.png differ
diff --git a/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_7_105_54_5_9.png b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_7_105_54_5_9.png
new file mode 100644
index 000000000..9f17859ea
Binary files /dev/null and b/Data/Map/XYZTile/Union/ColorCodingByProvincesOfJapan/zxy_7_105_54_5_9.png differ
diff --git a/Data/MenuIcon/Reload.png b/Data/MenuIcon/Reload.png
index a3810e285..fb6cbef61 100644
Binary files a/Data/MenuIcon/Reload.png and b/Data/MenuIcon/Reload.png differ
diff --git a/Data/Settings/Languages.tsv b/Data/Settings/Languages.tsv
index 58a696506..81bd53e56 100644
--- a/Data/Settings/Languages.tsv
+++ b/Data/Settings/Languages.tsv
@@ -47,19 +47,19 @@ menu_bar_view_license License ライセンス 许可 许可 라이선스 らい
menu_bar_view_debug Debug デバッグ 调试 调试 디버깅 でばっぐ Depurar Depurar Debuggen Débogage Debug Hata Ayıklama Debugowanie Αποσφαλμάτωση Debug Ladění Налагодження Отладка Debug اشکال زدایی Debug Debug
menu_bar_view_3d 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D سه بعدی ثلاثي الأبعاد 3D
> menu_bar_place_names
-place_names Feature 地物 地物 地物 지물 ちぶつ Características Caraterísticas Merkmal Fonctionnalité Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature
-place_names_place_name Place Name 地名 地名 地名 지명 ちめい Topónimo Topônimo Geografischer Name Place Name Toponimo Place Name Toponim Place Name Toponiem Toponymum Топонім Топоним Place Name Place Name Place Name Sinre
-place_names_site Archaeological site 遺跡 遺蹟 遗蹟 유적 いせき Yacimiento arqueológico Sítio arqueológico Site Site archéologique Sito archeologico Arkeolojik sit Stanowisko archeologiczne Αρχαιολογική θέση Vindplaats Archeologická lokalita Пам'ятка археології Археологический памятник Sito archeologico محوطه باستانی موقع أثري Archaeological site
+place_names Feature 地物 地物 地物 지물 ちぶつ Características Caraterísticas Merkmal Entité Elemento Özellik Obiekt Στοιχείο Kenmerk Prvek Об'єкт Объект Fitur ویژگی ميزة Feature
+place_names_place_name Place Name 地名 地名 地名 지명 ちめい Topónimo Topônimo Geografischer Name Toponyme Toponimo Yer adı Toponim Toponym Toponiem Toponymum Топонім Топоним Nama tempat نام مکان اسم مكان Sinre
+place_names_site Archaeological site 遺跡 遺蹟 遗迹 유적 いせき Yacimiento arqueológico Sítio arqueológico Fundstätte Site archéologique Sito archeologico Arkeolojik sit Stanowisko archeologiczne Αρχαιολογική θέση Vindplaats Archeologická lokalita Пам'ятка археології Археологический памятник Situs arkeologi محوطه باستانی موقع أثري Archaeological site
place_names_tumulus Tumulus 墳丘墓 墳冢 坟冢 분구묘 ふんきゅうぼ Túmulo Tumulus Hügelgrab Tumulus Tumulo Tümülüs Tumulus Τύμβος Grafheuvel Mohyla Тумулус Тумулус Tumulus گورپشته جثوة Tumulus
place_names_dolmen Dolmen 支石墓 石棚 石棚 고인돌 しせきぼ Dolmen Dólmen Dolmen Dolmen Dolmen Dolmen Dolmen Ντολμέν Hunebed Dolmen Дольмен Дольмен Dolmen میزسنگ دلمن Dolmen
-place_names_kamekanbo Jar burial 甕棺墓 甕棺葬 瓮棺葬 독무덤 かめかんぼ Vasija de enterramiento Jar burial Jar burial Jar burial Jar burial Jar burial Jar burial Jar burial Jar burial Jar burial Глекові поховання Кувшинные погребения Jar burial گورخمره الدفن في الجرار Jar burial
-place_names_stone_coffin Stone Coffin 石棺 Stone Coffin 石棺 석관 せっかん Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin Stone Coffin ناووس Suma Ot
-place_names_doken Bronze Sword 銅剣 銅劍 铜剑 청동 검 どうけん Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Bronze Sword Hurekane Emus
-place_names_dotaku Dotaku 銅鐸 銅鐸 铜鐸 동탁 どうたく Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku Dotaku
-place_names_bronze_mirror Bronze Mirror 銅鏡 銅鏡 铜镜 동경 どうきょう Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Bronze Mirror Hurekane Kankami
-place_names_human_bone Human Bone 人骨 人骨 人骨 인골 じんこつ Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Human Bone Aynu Pone
-place_names_mtdna mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA
-place_names_ydna Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA
+place_names_kamekanbo Jar burial 甕棺墓 甕棺葬 瓮棺葬 독무덤 かめかんぼ Vasija de enterramiento Sepultamento em urna Gefäßbestattung Sépulture en jarre Jar burial Çömlek mezar Pochówek w naczyniu Ταφή σε πίθο Potbegrafenis Pohřeb v nádobě Глекові поховання Кувшинные погребения Jar burial گورخمره الدفن في الجرار Jar burial
+place_names_stone_coffin Stone Coffin 石棺 石棺 石棺 석관 せっかん Sarcófago de piedra Sarcófago de pedra Steinsarg Sarcophage en pierre Sepoltura in giara Taş Lahit Kamienny sarkofag Πέτρινη Σαρκοφάγος Stenen sarcofaag Kamenná rakev Кам'яний саркофаг Каменный саркофаг Peti mati batu تابوت سنگی ناووس Suma Ot
+place_names_doken Bronze Sword 銅剣 銅劍 铜剑 청동 검 どうけん Espada de bronce Espada de bronze Bronzeschwert Épée de bronze Spada di bronzo Bronz Kılıç Brązowy miecz Χάλκινο σπαθί Bronzen zwaard Bronzový meč Бронзовий меч Бронзовый меч Pedang Perunggu شمشیر مفرغی سيف برونزي Hurekane Emus
+place_names_dotaku Dotaku 銅鐸 銅鐸 铜铎 동탁 どうたく Dotaku Dotaku Dotaku Dōtaku Dotaku Dotaku Dōtaku Ντοτάκου Dotaku Dótaku Дотаку Дотаку Dotaku Dotaku Dotaku Dotaku
+place_names_bronze_mirror Bronze Mirror 銅鏡 銅鏡 铜镜 동경 どうきょう Espejo de bronce Espelho de bronze Bronzespiegel Miroir de bronze Specchio di bronzo Bronz Ayna Brązowe lustro Χάλκινος καθρέφτης Bronzen spiegel Bronzové zrcadlo Бронзове дзеркало Бронзовое зеркало Cermin Perunggu آینه برنزی مرآة برونزية Hurekane Kankami
+place_names_human_bone Human Bone 人骨 人骨 人骨 인골 じんこつ Hueso humano Osso humano Menschlicher Knochen Os humain Osso umano İnsan Kemiği Ludzka kość Ανθρώπινο οστό Menselijk bot Lidská kost Людська кістка Человеческая кость Tulang Manusia استخوان انسان عظم بشري Aynu Pone
+place_names_mtdna mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA ADNmt ADNmt mtDNA ADNmt mtDNA mtDNA mtDNA mtDNA mtDNA mtDNA мтДНК мтДНК mtDNA دیانای میتوکندری الحمض النووي للميتوكوندريا mtDNA
+place_names_ydna Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA ADN-Y ADN-Y Y-DNA ADN-Y Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-DNA Y-ДНК Y-ДНК Y-DNA دیانای Y الحمض النووي Y Y-DNA
> menu_bar_calendar
menu_bar_calendar Calendar(C) カレンダー(C) 日曆(C) 日历(C) 캘린더(C) かれんだー Calendario(C) Calendário(C) Kalender(C) Calendrier(C) Calendario(C) Takvim (C) Kalendarz(C) Ημερολόγιο(C) Kalender (C) Kalendář(C) Календар(C) Календарь (C) Kalender (C) تقویم (C) التقويم (C) Tonukarpe(C)
menu_bar_calendar_japan Japanese Calendar 和暦 日本曆 日本历 일본 달력 わ れき Calendario japonés Calendário Japonês Japanischer Kalender Calendrier japonais Calendario giapponese Japon Takvimi Kalendarz japoński Ιαπωνικό ημερολόγιο Japanse kalender Japonský kalendář Японський календар Японский календарь Kalender Jepang تقویم ژاپنی التقويم الياباني Japanese Tonukarpe
diff --git a/Data/Settings/XYZTiles.tsv b/Data/Settings/XYZTiles.tsv
index c3a5a9fad..8c4398b2a 100644
--- a/Data/Settings/XYZTiles.tsv
+++ b/Data/Settings/XYZTiles.tsv
@@ -4,7 +4,6 @@ map_land_and_water menu_bar_map_land_and_water 0 asset_file Data/Map/XYZTile/L
map_kinai menu_bar_map_ryosei_line 1 asset_file Data/Map/XYZTile/Kinai/ {z}/{n}_{z}_{x}_{y} texture zxy 12 12 11
map_heijokyo menu_bar_map_ryosei_line 1 asset_file Data/Map/XYZTile/Heijokyo/ {z}/{n}_{z}_{x}_{y} texture zxy 16 16 15
map_soil menu_bar_map_soil 0 asset_file Data/Map/XYZTile/Soil/Image/Soil/2023/ {z}/{n}_{z}_{x}_{y} texture soil 12 12 8
-map_soil menu_bar_map_soil 1 asset_file Data/XYZTiles/east_asia/ {z}/{n}_{z}_{x}_{y} texture zxy 10 10 8
map_balhae_line menu_bar_map_ryosei_line 1 asset_file Data/XYZTiles/NationalBorders/Balhae/ {z}/{n}_{z}_{x}_{y} texture zxy 5 9 5
map_silla_line menu_bar_map_ryosei_line 1 asset_file Data/XYZTiles/NationalBorders/Silla/ {z}/{n}_{z}_{x}_{y} texture zxy 5 10 5
map_ryoseikoku_line menu_bar_map_ryosei_line 1 asset_file Data/XYZTiles/NationalBorders/Ryoseikoku/ {z}/{n}_{z}_{x}_{y} texture zxy 6 9 6
\ No newline at end of file
diff --git a/Data/Simulations/Aotearoa/District.tsv b/Data/Simulations/Aotearoa/District.tsv
index 17d1a8f5a..89395be3b 100644
--- a/Data/Simulations/Aotearoa/District.tsv
+++ b/Data/Simulations/Aotearoa/District.tsv
@@ -1,91 +1,91 @@
-id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
-1 NewZealand NewZealand 1 10 100 20000 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-2 NewZealand2 NewZealand2 1 15 35 10000 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-3 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-4 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-5 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-6 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-7 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-8 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-9 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-10 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-11 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-12 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-13 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-14 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-15 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-16 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-17 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-18 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-19 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-20 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-21 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-22 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-23 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-24 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-25 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-26 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-27 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-28 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-29 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-30 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-31 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-32 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-33 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-34 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-35 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-36 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-37 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-38 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-39 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-40 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-41 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-42 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-43 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-44 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-45 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-46 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-47 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-48 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-49 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-50 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-51 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-52 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-53 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-54 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-55 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-56 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-57 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-58 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-59 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-60 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-61 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-62 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-63 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-64 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-65 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-66 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-67 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-68 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-69 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-70 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-71 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-72 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-73 null null 4 0 0 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-74 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-75 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-76 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-77 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-78 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-79 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-80 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-81 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-82 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-83 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-84 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-85 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-86 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-87 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-88 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-89 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-90 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 NewZealand NewZealand 1 10 100 20000 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+2 NewZealand2 NewZealand2 1 15 35 10000 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+3 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+4 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+5 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+6 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+7 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+8 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+9 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+10 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+11 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+12 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+13 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+14 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+15 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+16 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+17 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+18 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+19 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+20 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+21 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+22 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+23 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+24 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+25 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+26 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+27 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+28 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+29 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+30 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+31 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+32 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+33 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+34 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+35 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+36 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+37 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+38 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+39 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+40 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+41 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+42 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+43 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+44 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+45 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+46 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+47 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+48 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+49 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+50 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+51 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+52 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+53 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+54 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+55 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+56 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+57 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+58 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+59 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+60 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+61 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+62 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+63 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+64 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+66 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+67 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+68 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+69 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+71 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 null null 4 0 0 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+74 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
diff --git a/Data/Simulations/Aotearoa/Language.tsv b/Data/Simulations/Aotearoa/Language.tsv
new file mode 100644
index 000000000..b584de967
--- /dev/null
+++ b/Data/Simulations/Aotearoa/Language.tsv
@@ -0,0 +1,10 @@
+language_region language_dist
+test1 test1/1
+test2 test2/1
+test3 test3/1
+test4 test4/1
+test5 test5/1
+test6 test6/1
+test7 test7/1
+test8 test8/1
+test9 test9/1
\ No newline at end of file
diff --git a/Data/Simulations/Aotearoa/Language_List.tsv b/Data/Simulations/Aotearoa/Language_List.tsv
new file mode 100644
index 000000000..5a17a6fd6
--- /dev/null
+++ b/Data/Simulations/Aotearoa/Language_List.tsv
@@ -0,0 +1,10 @@
+language
+test1
+test2
+test3
+test4
+test5
+test6
+test7
+test8
+test9
\ No newline at end of file
diff --git a/Data/Simulations/Area.tsv b/Data/Simulations/Area.tsv
index a56d95d67..2b586c748 100644
--- a/Data/Simulations/Area.tsv
+++ b/Data/Simulations/Area.tsv
@@ -9,5 +9,6 @@ Kyusyu 877 406 887 421 10
Japan 858 366 913 438 10
Yaponesia 853 326 973 448 10
AynuMosir 908 347 936 383 10
+AynuMosir2 908 326 929 383 10
Philippines 840 432 880 504 10
Aotearoa 976 608 1024 672 10
\ No newline at end of file
diff --git a/Data/Simulations/AynuMosir/District.tsv b/Data/Simulations/AynuMosir/District.tsv
index 9e945d69c..9f86eff15 100644
--- a/Data/Simulations/AynuMosir/District.tsv
+++ b/Data/Simulations/AynuMosir/District.tsv
@@ -1,91 +1,91 @@
-id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
-1 渡島 渡島 1 15 35 1048 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-2 檜山 檜山 1 15 35 1048 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-3 奥尻島 奥尻島 1 50 180 173 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-4 後志(内陸部) 後志(内陸部) 1 15 35 2464 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-5 後志(沿岸部) 後志(沿岸部) 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-6 石狩(内陸部) 石狩(内陸部) 1 15 35 2464 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-7 石狩(沿岸部) 石狩(沿岸部) 1 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-8 空知 空知 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-9 胆振 胆振 1 15 35 2464 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-10 日高 日高 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-11 宗谷(内陸部) 宗谷(内陸部) 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-12 宗谷(沿岸部) 宗谷(沿岸部) 1 50 180 433 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-13 留萌(内陸部) 留萌(内陸部) 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-14 留萌(沿岸部) 留萌(沿岸部) 1 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-15 上川 上川 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-16 利尻島・礼文島 利尻島・礼文島 1 50 180 346 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-17 オホーツク(内陸部) オホーツク(内陸部) 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-18 オホーツク(沿岸部) オホーツク(沿岸部) 1 50 180 433 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-19 十勝 十勝 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-20 釧路 釧路 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-21 根室(内陸部) 根室(内陸部) 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-22 根室(沿岸部) 根室(沿岸部) 1 50 180 606 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-23 歯舞群島 歯舞群島 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-24 色丹島 色丹島 2 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-25 国後島 国後島 2 50 180 346 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-26 択捉島 択捉島 2 50 180 346 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-27 ネベリスク ネベリスク 3 50 180 433 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-28 ホルムスク ホルムスク 3 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-29 トマリ トマリ 3 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-30 ウグレゴルスク ウグレゴルスク 3 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-31 アニワ アニワ 3 50 180 260 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-32 コルサコフ コルサコフ 3 50 180 433 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-33 ユジノサハリンスク ユジノサハリンスク 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-34 ドリンスク ドリンスク 3 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-35 マカロフ マカロフ 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-36 ポロナイスク ポロナイスク 3 50 180 87 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-37 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-38 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-39 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-40 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-41 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-42 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-43 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-44 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-45 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-46 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-47 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-48 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-49 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-50 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-51 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-52 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-53 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-54 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-55 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-56 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-57 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-58 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-59 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-60 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-61 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-62 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-63 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-64 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-65 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-66 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-67 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-68 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-69 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-70 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-71 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-72 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-73 null null 4 0 0 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-74 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-75 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-76 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-77 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-78 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-79 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-80 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-81 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-82 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-83 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-84 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-85 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-86 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-87 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-88 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-89 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-90 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 渡島 渡島 1 15 35 1048 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+2 檜山 檜山 1 15 35 1048 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+3 奥尻島 奥尻島 1 50 180 173 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+4 後志(内陸部) 後志(内陸部) 1 15 35 2464 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+5 後志(沿岸部) 後志(沿岸部) 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+6 石狩(内陸部) 石狩(内陸部) 1 15 35 2464 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+7 石狩(沿岸部) 石狩(沿岸部) 1 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+8 空知 空知 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+9 胆振 胆振 1 15 35 2464 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+10 日高 日高 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+11 宗谷(内陸部) 宗谷(内陸部) 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+12 宗谷(沿岸部) 宗谷(沿岸部) 1 50 180 433 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+13 留萌(内陸部) 留萌(内陸部) 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+14 留萌(沿岸部) 留萌(沿岸部) 1 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+15 上川 上川 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+16 利尻島・礼文島 利尻島・礼文島 1 50 180 346 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+17 オホーツク(内陸部) オホーツク(内陸部) 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+18 オホーツク(沿岸部) オホーツク(沿岸部) 1 50 180 433 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+19 十勝 十勝 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+20 釧路 釧路 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+21 根室(内陸部) 根室(内陸部) 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+22 根室(沿岸部) 根室(沿岸部) 1 50 180 606 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+23 歯舞群島 歯舞群島 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+24 色丹島 色丹島 2 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+25 国後島 国後島 2 50 180 346 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+26 択捉島 択捉島 2 50 180 346 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+27 ネベリスク ネベリスク 3 50 180 433 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+28 ホルムスク ホルムスク 3 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+29 トマリ トマリ 3 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+30 ウグレゴルスク ウグレゴルスク 3 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+31 アニワ アニワ 3 50 180 260 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+32 コルサコフ コルサコフ 3 50 180 433 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+33 ユジノサハリンスク ユジノサハリンスク 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+34 ドリンスク ドリンスク 3 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+35 マカロフ マカロフ 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+36 ポロナイスク ポロナイスク 3 50 180 87 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+37 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+38 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+39 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+40 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+41 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+42 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+43 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+44 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+45 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+46 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+47 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+48 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+49 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+50 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+51 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+52 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+53 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+54 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+55 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+56 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+57 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+58 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+59 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+60 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+61 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+62 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+63 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+64 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+66 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+67 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+68 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+69 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+71 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 null null 4 0 0 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+74 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
diff --git a/Data/Simulations/AynuMosir/Language.tsv b/Data/Simulations/AynuMosir/Language.tsv
new file mode 100644
index 000000000..b584de967
--- /dev/null
+++ b/Data/Simulations/AynuMosir/Language.tsv
@@ -0,0 +1,10 @@
+language_region language_dist
+test1 test1/1
+test2 test2/1
+test3 test3/1
+test4 test4/1
+test5 test5/1
+test6 test6/1
+test7 test7/1
+test8 test8/1
+test9 test9/1
\ No newline at end of file
diff --git a/Data/Simulations/AynuMosir/Language_List.tsv b/Data/Simulations/AynuMosir/Language_List.tsv
new file mode 100644
index 000000000..5a17a6fd6
--- /dev/null
+++ b/Data/Simulations/AynuMosir/Language_List.tsv
@@ -0,0 +1,10 @@
+language
+test1
+test2
+test3
+test4
+test5
+test6
+test7
+test8
+test9
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/Childbearing.tsv b/Data/Simulations/EpiJomon/Childbearing.tsv
new file mode 100644
index 000000000..2ec8db3ba
--- /dev/null
+++ b/Data/Simulations/EpiJomon/Childbearing.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer agricultural
+0 0 0
+1 0 0
+2 0 0
+3 0 0
+4 0 0
+5 0 0
+6 0 0
+7 0 0
+8 0 0
+9 0 0
+10 0 0
+11 0 0
+12 0 0
+13 0 0
+14 0.009022766008 0.003007588669
+15 0.03746975846 0.01248991949
+16 0.06757353696 0.02252451232
+17 0.09958830351 0.03319610117
+18 0.1337557159 0.04458523864
+19 0.1703668704 0.05678895681
+20 0.2098868832 0.0699622944
+21 0.2526807842 0.08422692807
+22 0.2995459554 0.09984865178
+23 0.3511586331 0.1170528777
+24 0.4089346823 0.1363115608
+25 0.4743033249 0.1581011083
+26 0.5500259893 0.1833419964
+27 0.6405890518 0.2135296839
+28 0.7534403528 0.2511467843
+29 0.9056625696 0.3018875232
+30 1.151236496 0.3837454986
+31 1.312976024 0.4376586748
+32 1.087701736 0.3625672452
+33 0.8668848806 0.2889616269
+34 0.7222288212 0.2407429404
+35 0.6129487486 0.2043162495
+36 0.5239938899 0.17466463
+37 0.4484244189 0.1494748063
+38 0.3825212912 0.1275070971
+39 0.3241175852 0.1080391951
+40 0.2715395289 0.09051317629
+41 0.2237504232 0.07458347441
+42 0.1799112904 0.05997043012
+43 0.139559001 0.046519667
+44 0.1021741604 0.03405805348
+45 0.06747719441 0.02249239814
+46 0.03521142259 0.01173714086
+47 0.005148315889 0.001716105296
+48 0 0
+49 0 0
+50 0 0
+51 0 0
+52 0 0
+53 0 0
+54 0 0
+55 0 0
+56 0 0
+57 0 0
+58 0 0
+59 0 0
+60 0 0
+61 0 0
+62 0 0
+63 0 0
+64 0 0
+65 0 0
+66 0 0
+67 0 0
+68 0 0
+69 0 0
+70 0 0
+71 0 0
+72 0 0
+73 0 0
+74 0 0
+75 0 0
+76 0 0
+77 0 0
+78 0 0
+79 0 0
+80 0 0
+81 0 0
+82 0 0
+83 0 0
+84 0 0
+85 0 0
+86 0 0
+87 0 0
+88 0 0
+89 0 0
+90 0 0
+91 0 0
+92 0 0
+93 0 0
+94 0 0
+95 0 0
+96 0 0
+97 0 0
+98 0 0
+99 0 0
+100 0 0
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/ChildbearingCMR45.tsv b/Data/Simulations/EpiJomon/ChildbearingCMR45.tsv
new file mode 100644
index 000000000..4bf9003d0
--- /dev/null
+++ b/Data/Simulations/EpiJomon/ChildbearingCMR45.tsv
@@ -0,0 +1,101 @@
+age hunter_gatherer agricultural
+1 0.00000 0.00000
+2 0.00000 0.00000
+3 0.00000 0.00000
+4 0.00000 0.00000
+5 0.00000 0.00000
+6 0.00000 0.00000
+7 0.00000 0.00000
+8 0.00000 0.00000
+9 0.00000 0.00000
+10 0.00000 0.00000
+11 0.00000 0.00000
+12 0.00000 0.00000
+13 0.00000 0.00000
+14 0.00000 0.00000
+15 0.01086 0.01090
+16 0.01086 0.01090
+17 0.01086 0.01090
+18 0.01086 0.01090
+19 0.01086 0.01090
+20 0.02480 0.02490
+21 0.02480 0.02490
+22 0.02480 0.02490
+23 0.02480 0.02490
+24 0.02480 0.02490
+25 0.02604 0.02615
+26 0.02604 0.02615
+27 0.02604 0.02615
+28 0.02604 0.02615
+29 0.02604 0.02615
+30 0.02045 0.02053
+31 0.02045 0.02053
+32 0.02045 0.02053
+33 0.02045 0.02053
+34 0.02045 0.02053
+35 0.01464 0.01469
+36 0.01464 0.01469
+37 0.01464 0.01469
+38 0.01464 0.01469
+39 0.01464 0.01469
+40 0.00601 0.00604
+41 0.00601 0.00604
+42 0.00601 0.00604
+43 0.00601 0.00604
+44 0.00601 0.00604
+45 0.00151 0.00152
+46 0.00151 0.00152
+47 0.00151 0.00152
+48 0.00151 0.00152
+49 0.00151 0.00152
+50 0.00151 0.00152
+51 0.00000 0.00000
+52 0.00000 0.00000
+53 0.00000 0.00000
+54 0.00000 0.00000
+55 0.00000 0.00000
+56 0.00000 0.00000
+57 0.00000 0.00000
+58 0.00000 0.00000
+59 0.00000 0.00000
+60 0.00000 0.00000
+61 0.00000 0.00000
+62 0.00000 0.00000
+63 0.00000 0.00000
+64 0.00000 0.00000
+65 0.00000 0.00000
+66 0.00000 0.00000
+67 0.00000 0.00000
+68 0.00000 0.00000
+69 0.00000 0.00000
+70 0.00000 0.00000
+71 0.00000 0.00000
+72 0.00000 0.00000
+73 0.00000 0.00000
+74 0.00000 0.00000
+75 0.00000 0.00000
+76 0.00000 0.00000
+77 0.00000 0.00000
+78 0.00000 0.00000
+79 0.00000 0.00000
+80 0.00000 0.00000
+81 0.00000 0.00000
+82 0.00000 0.00000
+83 0.00000 0.00000
+84 0.00000 0.00000
+85 0.00000 0.00000
+86 0.00000 0.00000
+87 0.00000 0.00000
+88 0.00000 0.00000
+89 0.00000 0.00000
+90 0.00000 0.00000
+91 0.00000 0.00000
+92 0.00000 0.00000
+93 0.00000 0.00000
+94 0.00000 0.00000
+95 0.00000 0.00000
+96 0.00000 0.00000
+97 0.00000 0.00000
+98 0.00000 0.00000
+99 0.00000 0.00000
+100 0.00000 0.00000
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/ChildbearingCMR48.tsv b/Data/Simulations/EpiJomon/ChildbearingCMR48.tsv
new file mode 100644
index 000000000..6e9309f3f
--- /dev/null
+++ b/Data/Simulations/EpiJomon/ChildbearingCMR48.tsv
@@ -0,0 +1,101 @@
+age hunter_gatherer agricultural
+1 0.00000 0.00000
+2 0.00000 0.00000
+3 0.00000 0.00000
+4 0.00000 0.00000
+5 0.00000 0.00000
+6 0.00000 0.00000
+7 0.00000 0.00000
+8 0.00000 0.00000
+9 0.00000 0.00000
+10 0.00000 0.00000
+11 0.00000 0.00000
+12 0.00000 0.00000
+13 0.00000 0.00000
+14 0.00000 0.00000
+15 0.01088 0.01083
+16 0.01088 0.01083
+17 0.01088 0.01083
+18 0.01088 0.01083
+19 0.01088 0.01083
+20 0.02485 0.02475
+21 0.02485 0.02475
+22 0.02485 0.02475
+23 0.02485 0.02475
+24 0.02485 0.02475
+25 0.02610 0.02599
+26 0.02610 0.02599
+27 0.02610 0.02599
+28 0.02610 0.02599
+29 0.02610 0.02599
+30 0.02049 0.02041
+31 0.02049 0.02041
+32 0.02049 0.02041
+33 0.02049 0.02041
+34 0.02049 0.02041
+35 0.01467 0.01461
+36 0.01467 0.01461
+37 0.01467 0.01461
+38 0.01467 0.01461
+39 0.01467 0.01461
+40 0.00603 0.00600
+41 0.00603 0.00600
+42 0.00603 0.00600
+43 0.00603 0.00600
+44 0.00603 0.00600
+45 0.00152 0.00151
+46 0.00152 0.00151
+47 0.00152 0.00151
+48 0.00152 0.00151
+49 0.00152 0.00151
+50 0.00152 0.00151
+51 0.00000 0.00000
+52 0.00000 0.00000
+53 0.00000 0.00000
+54 0.00000 0.00000
+55 0.00000 0.00000
+56 0.00000 0.00000
+57 0.00000 0.00000
+58 0.00000 0.00000
+59 0.00000 0.00000
+60 0.00000 0.00000
+61 0.00000 0.00000
+62 0.00000 0.00000
+63 0.00000 0.00000
+64 0.00000 0.00000
+65 0.00000 0.00000
+66 0.00000 0.00000
+67 0.00000 0.00000
+68 0.00000 0.00000
+69 0.00000 0.00000
+70 0.00000 0.00000
+71 0.00000 0.00000
+72 0.00000 0.00000
+73 0.00000 0.00000
+74 0.00000 0.00000
+75 0.00000 0.00000
+76 0.00000 0.00000
+77 0.00000 0.00000
+78 0.00000 0.00000
+79 0.00000 0.00000
+80 0.00000 0.00000
+81 0.00000 0.00000
+82 0.00000 0.00000
+83 0.00000 0.00000
+84 0.00000 0.00000
+85 0.00000 0.00000
+86 0.00000 0.00000
+87 0.00000 0.00000
+88 0.00000 0.00000
+89 0.00000 0.00000
+90 0.00000 0.00000
+91 0.00000 0.00000
+92 0.00000 0.00000
+93 0.00000 0.00000
+94 0.00000 0.00000
+95 0.00000 0.00000
+96 0.00000 0.00000
+97 0.00000 0.00000
+98 0.00000 0.00000
+99 0.00000 0.00000
+100 0.00000 0.00000
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/ChildbearingCMR50.tsv b/Data/Simulations/EpiJomon/ChildbearingCMR50.tsv
new file mode 100644
index 000000000..9d85fa996
--- /dev/null
+++ b/Data/Simulations/EpiJomon/ChildbearingCMR50.tsv
@@ -0,0 +1,101 @@
+age hunter_gatherer agricultural
+1 0.00000 0.00000
+2 0.00000 0.00000
+3 0.00000 0.00000
+4 0.00000 0.00000
+5 0.00000 0.00000
+6 0.00000 0.00000
+7 0.00000 0.00000
+8 0.00000 0.00000
+9 0.00000 0.00000
+10 0.00000 0.00000
+11 0.00000 0.00000
+12 0.00000 0.00000
+13 0.00000 0.00000
+14 0.00000 0.00000
+15 0.01096 0.01092
+16 0.01096 0.01092
+17 0.01096 0.01092
+18 0.01096 0.01092
+19 0.01096 0.01092
+20 0.02505 0.02495
+21 0.02505 0.02495
+22 0.02505 0.02495
+23 0.02505 0.02495
+24 0.02505 0.02495
+25 0.02631 0.02621
+26 0.02631 0.02621
+27 0.02631 0.02621
+28 0.02631 0.02621
+29 0.02631 0.02621
+30 0.02066 0.02058
+31 0.02066 0.02058
+32 0.02066 0.02058
+33 0.02066 0.02058
+34 0.02066 0.02058
+35 0.01478 0.01472
+36 0.01478 0.01472
+37 0.01478 0.01472
+38 0.01478 0.01472
+39 0.01478 0.01472
+40 0.00607 0.00605
+41 0.00607 0.00605
+42 0.00607 0.00605
+43 0.00607 0.00605
+44 0.00607 0.00605
+45 0.00153 0.00152
+46 0.00153 0.00152
+47 0.00153 0.00152
+48 0.00153 0.00152
+49 0.00153 0.00152
+50 0.00153 0.00152
+51 0.00000 0.00000
+52 0.00000 0.00000
+53 0.00000 0.00000
+54 0.00000 0.00000
+55 0.00000 0.00000
+56 0.00000 0.00000
+57 0.00000 0.00000
+58 0.00000 0.00000
+59 0.00000 0.00000
+60 0.00000 0.00000
+61 0.00000 0.00000
+62 0.00000 0.00000
+63 0.00000 0.00000
+64 0.00000 0.00000
+65 0.00000 0.00000
+66 0.00000 0.00000
+67 0.00000 0.00000
+68 0.00000 0.00000
+69 0.00000 0.00000
+70 0.00000 0.00000
+71 0.00000 0.00000
+72 0.00000 0.00000
+73 0.00000 0.00000
+74 0.00000 0.00000
+75 0.00000 0.00000
+76 0.00000 0.00000
+77 0.00000 0.00000
+78 0.00000 0.00000
+79 0.00000 0.00000
+80 0.00000 0.00000
+81 0.00000 0.00000
+82 0.00000 0.00000
+83 0.00000 0.00000
+84 0.00000 0.00000
+85 0.00000 0.00000
+86 0.00000 0.00000
+87 0.00000 0.00000
+88 0.00000 0.00000
+89 0.00000 0.00000
+90 0.00000 0.00000
+91 0.00000 0.00000
+92 0.00000 0.00000
+93 0.00000 0.00000
+94 0.00000 0.00000
+95 0.00000 0.00000
+96 0.00000 0.00000
+97 0.00000 0.00000
+98 0.00000 0.00000
+99 0.00000 0.00000
+100 0.00000 0.00000
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/District.tsv b/Data/Simulations/EpiJomon/District.tsv
new file mode 100644
index 000000000..fe5525a5d
--- /dev/null
+++ b/Data/Simulations/EpiJomon/District.tsv
@@ -0,0 +1,91 @@
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 道南 道南 1 15 35 2174 0 0 JomonHokkaido test1 0 1/1/1/1/1/1/1/1 160 0 255 0 255
+2 道央 道央 1 15 35 4959 0 0 JomonHokkaido test2 0 1/1/1/1/1/1/1/1 160 0 255 0 255
+3 道北 道北 1 15 35 1000 0 0 JomonHokkaido test3 0 1/1/1/1/1/1/1/1 160 0 255 0 255
+4 道東 道東 1 15 35 3000 0 0 JomonHokkaido test4 0 1/1/1/1/1/1/1/1 160 0 255 0 255
+5 サハリン南部 サハリン南部 2 15 35 1000 0 0 Sakhalin2 test5 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+6 サハリン中部 サハリン中部 2 15 35 1000 0 0 Sakhalin2 test6 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+7 サハリン北部 サハリン北部 2 15 35 1000 30 0 Sakhalin1 test7 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+8 アムール川下流域 アムール川下流域 3 15 35 0 0 0 Sakhalin1 test8 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+9 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+10 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+11 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+12 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+13 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+14 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+15 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+16 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+17 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+18 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+19 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+20 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+21 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+22 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+23 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+24 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+25 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+26 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+27 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+28 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+29 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+30 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+31 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+32 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+33 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+34 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+35 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+36 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+37 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+38 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+39 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+40 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+41 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+42 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+43 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+44 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+45 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+46 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+47 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+48 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+49 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+50 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+51 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+52 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+53 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+54 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+55 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+56 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+57 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+58 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+59 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+60 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+61 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+62 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+63 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+64 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+66 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+67 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+68 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+69 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+71 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 null null 4 4 35 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 null null 4 0 0 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+74 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 null null 4 4 20 0 0 0 okhotsk test9 0 1/1/1/1/1/1/1/1 160 0 255 0 0
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/Language.tsv b/Data/Simulations/EpiJomon/Language.tsv
new file mode 100644
index 000000000..b584de967
--- /dev/null
+++ b/Data/Simulations/EpiJomon/Language.tsv
@@ -0,0 +1,10 @@
+language_region language_dist
+test1 test1/1
+test2 test2/1
+test3 test3/1
+test4 test4/1
+test5 test5/1
+test6 test6/1
+test7 test7/1
+test8 test8/1
+test9 test9/1
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/Language_List.tsv b/Data/Simulations/EpiJomon/Language_List.tsv
new file mode 100644
index 000000000..5a17a6fd6
--- /dev/null
+++ b/Data/Simulations/EpiJomon/Language_List.tsv
@@ -0,0 +1,10 @@
+language
+test1
+test2
+test3
+test4
+test5
+test6
+test7
+test8
+test9
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpan.tsv b/Data/Simulations/EpiJomon/LifeSpan.tsv
new file mode 100644
index 000000000..a96294b2f
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpan.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 30 30 25 25
+1 2.437705134 2.422221692 2.562626297 2.573569918
+2 1.78945613 1.783878323 1.911296549 1.911594501
+3 1.334924021 1.334230387 1.444518419 1.439868977
+4 1.018727091 1.020392441 1.111808619 1.105959702
+5 0.8024792723 0.8036153195 0.8761534313 0.8714042629
+6 0.6557783749 0.6557918614 0.7104798111 0.7081261152
+7 0.556825112 0.5552872352 0.5938853804 0.5944511753
+8 0.4868520494 0.4835063733 0.5089644676 0.5121279152
+9 0.4312863863 0.4272416818 0.4435092162 0.4483217554
+10 0.3798901227 0.3754805115 0.3878724321 0.3927175473
+11 0.3264403713 0.3233716466 0.3372457328 0.3403948799
+12 0.2736644382 0.2729723869 0.2917472101 0.2921150615
+13 0.2271525668 0.2284942856 0.2532847284 0.2505896189
+14 0.1932391918 0.1965097336 0.2262954345 0.2211172468
+15 0.1768029321 0.1808317903 0.2140664496 0.2073126832
+16 0.1817709481 0.1861051352 0.2209709473 0.2138426636
+17 0.2181226313 0.221631598 0.2544210166 0.2490355383
+18 0.3068730104 0.305921021 0.3255019253 0.3267068586
+19 0.4941213814 0.4795143816 0.4536700589 0.4731398647
+20 0.8519166147 0.7945028943 0.6516412381 0.7116660948
+21 1.424597695 1.281297953 0.9075535354 1.038648208
+22 2.123243782 1.853118085 1.160564851 1.380979053
+23 2.640908518 2.259568974 1.310788588 1.597675481
+24 2.734948092 2.339028266 1.32227462 1.624436129
+25 2.478298002 2.12678264 1.22661601 1.496700912
+26 2.103173353 1.827071636 1.104457017 1.326677768
+27 1.807526449 1.593703948 1.017117165 1.199579606
+28 1.645967406 1.463937761 0.9791017674 1.136283797
+29 1.613966771 1.443971372 0.9923079248 1.140435365
+30 1.691364255 1.507964485 1.035884328 1.189786321
+31 1.842519231 1.627588623 1.082398708 1.255990796
+32 2.029201896 1.767595875 1.108126699 1.311047057
+33 2.200065547 1.884478782 1.09581819 1.329629103
+34 2.306966127 1.94995506 1.057956512 1.314648568
+35 2.319052333 1.948511324 1.017235597 1.281944427
+36 2.231009411 1.887497335 1.000357326 1.256178974
+37 2.063633009 1.784747726 1.032064461 1.260428149
+38 1.849662209 1.659019816 1.122681579 1.301611675
+39 1.623028808 1.526338079 1.279977162 1.380413878
+40 1.409226715 1.397704032 1.489983425 1.481212172
+41 1.22406508 1.28002472 1.713057542 1.577367549
+42 1.072568002 1.175990741 1.895123239 1.642663875
+43 0.9535975643 1.086158829 1.978675672 1.654924383
+44 0.8632055586 1.009154763 1.953991837 1.615163888
+45 0.7964245671 0.9432108184 1.849197251 1.538674756
+46 0.7493097385 0.8875464184 1.713762059 1.449052199
+47 0.7188243006 0.8420641229 1.593564347 1.36878841
+48 0.7033785298 0.8091769246 1.51173657 1.311688452
+49 0.7026022343 0.7923300147 1.480071319 1.286678603
+50 0.7164819054 0.7956838959 1.500895693 1.297914219
+51 0.745044982 0.8240165344 1.57355356 1.347924555
+52 0.7858809212 0.8768455209 1.689976394 1.432319803
+53 0.8322745941 0.9487854288 1.832651105 1.539531354
+54 0.8719803449 1.020808086 1.964734792 1.641811603
+55 0.8865825701 1.061135757 2.032391793 1.697232383
+56 0.8590874874 1.039919578 1.986895072 1.66735676
+57 0.7815215295 0.9437864622 1.808204497 1.533944686
+58 0.6625972085 0.7946746222 1.52981162 1.32101574
+59 0.5246529853 0.6302521943 1.213830786 1.075273712
+60 0.391348654 0.4818119925 0.9181714538 0.8413132679
+61 0.2789685822 0.364634353 0.6751589433 0.6457389164
+62 0.192746591 0.2793393536 0.4929031685 0.4959350972
+63 0.1307164145 0.2208472842 0.3652711087 0.3886390312
+64 0.08791199733 0.1830307243 0.2809815355 0.316512479
+65 0.05908399299 0.1610323246 0.2296491199 0.2726396928
+66 0.03986604981 0.1511873305 0.2023551189 0.2508363715
+67 0.02704904731 0.1510986245 0.1933460222 0.2469282977
+68 0.01846049783 0.1583793721 0.1981096835 0.2568178225
+69 0.04123422395 0.1694348728 0.2115967666 0.2746120208
+70 0.000146375061 0.1790759806 0.2270177487 0.2917694744
+71 0.00000007768994035 0.180407873 0.2341899049 0.2962756208
+72 0 0.169943384 0.2262024064 0.2812986802
+73 0 0.149624169 0.2032974922 0.2491341221
+74 0 0.1250781704 0.1722073536 0.208939098
+75 0 0.1024422622 0.141889065 0.1713150745
+76 0 0.08446490388 0.1169700646 0.1412092897
+77 0 0.07165345798 0.09878166763 0.1196910476
+78 0 0.06314158791 0.08640074727 0.1053815099
+79 0 0.05747815788 0.07792028011 0.0958526768
+80 0 0.05346021646 0.07173127173 0.0890810258
+81 0 0.04993257562 0.0663032354 0.08311767064
+82 0 0.04622858616 0.06078155313 0.07684459873
+83 0 0.04216219901 0.05494328844 0.06995984426
+84 0 0.03784642903 0.0489371858 0.06266603808
+85 0 0.03364407956 0.04320608636 0.05558114552
+86 0 0.02981258351 0.03804775049 0.04913797724
+87 0 0.02649524917 0.03361277562 0.04357173549
+88 0 0.02370337839 0.02989192555 0.03889474442
+89 0 0.02133766929 0.0267467587 0.03493513288
+90 0 0.0192940272 0.0240388364 0.03151550381
+91 0 0.01746355011 0.02162939937 0.02845301731
+92 0 0.01577805985 0.01943155522 0.02563455835
+93 0 0.01421148476 0.01741001138 0.02301817423
+94 0 0.0127569339 0.01555242441 0.02059361987
+95 0 0.01142577273 0.01386766084 0.0183802486
+96 0 0.01022394833 0.01235820281 0.01638752547
+97 0 0.009150679333 0.01101886523 0.01461308994
+98 0 0.00819840074 0.009837104846 0.01304317785
+99 0 0.007352375222 0.008792701923 0.01165228803
+100 0 0.06246771978 0.07409177771 0.09438254289
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR45.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR45.tsv
new file mode 100644
index 000000000..cf1c256ac
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR45.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 25 25 25 25
+1 2.611221016 2.595138407 2.562626297 2.573569918
+2 1.916840495 1.911217517 1.911296549 1.911594501
+3 1.429957941 1.429467148 1.444518419 1.439868977
+4 1.091254377 1.093225048 1.111808619 1.105959702
+5 0.859613634 0.860974659 0.876153431 0.871404263
+6 0.70247031 0.70260152 0.710479811 0.708126115
+7 0.596473687 0.594925763 0.59388538 0.594451175
+8 0.521520287 0.51802422 0.508964468 0.512127915
+9 0.461999656 0.457745875 0.443509216 0.448321755
+10 0.406944647 0.40229115 0.387872432 0.392717547
+11 0.349689106 0.346462144 0.337245733 0.34039488
+12 0.29315469 0.292463366 0.29174721 0.292115062
+13 0.243330028 0.244807713 0.253284728 0.250589619
+14 0.207000959 0.210537562 0.226295435 0.221117247
+15 0.189393692 0.193738407 0.21406645 0.207312683
+16 0.194715068 0.199386372 0.220970947 0.213842664
+17 0.233655132 0.237447023 0.254421017 0.249035538
+18 0.328725586 0.32775151 0.325501925 0.326706859
+19 0.529309381 0.513735929 0.453670059 0.473139865
+20 0.912588922 0.851213116 0.651641238 0.711666095
+21 1.526067058 1.372770128 0.907553535 1.038648208
+22 2.274498748 1.985430419 1.160564851 1.380979053
+23 2.829075992 2.420912398 1.310788588 1.597675481
+24 2.929854927 2.506045959 1.32227462 1.624436129
+25 2.654947571 2.278638876 1.22661601 1.496700912
+26 2.253108189 1.957521054 1.104457017 1.326677768
+27 1.936401309 1.707487375 1.017117165 1.199579606
+28 1.763336593 1.568456266 0.979101767 1.136283797
+29 1.729067455 1.547068373 0.992307925 1.140435365
+30 1.812001424 1.615637749 1.035884328 1.189786321
+31 1.973961826 1.743812562 1.082398708 1.255990796
+32 2.173996738 1.893826853 1.108126699 1.311047057
+33 2.357098068 2.019064283 1.09581819 1.329629103
+34 2.471682139 2.089221803 1.057956512 1.314648568
+35 2.484685203 2.087677968 1.017235597 1.281944427
+36 2.390402262 2.02230846 1.000357326 1.256178974
+37 2.211106822 1.912222883 1.032064461 1.260428149
+38 1.981876231 1.777518549 1.122681579 1.301611675
+39 1.739071039 1.635364321 1.279977162 1.380413878
+40 1.510011276 1.497546902 1.489983425 1.481212172
+41 1.311639511 1.371466159 1.713057542 1.577367549
+42 1.149338602 1.260004625 1.895123239 1.642663875
+43 1.021887029 1.163758742 1.978675672 1.654924383
+44 0.925051372 1.081256275 1.953991837 1.615163888
+45 0.853505276 1.010603424 1.849197251 1.538674756
+46 0.803020555 0.950964064 1.713762059 1.449052199
+47 0.770343446 0.902233992 1.593564347 1.36878841
+48 0.753773913 0.866998753 1.51173657 1.311688452
+49 0.752922095 0.848949841 1.480071319 1.286678603
+50 0.76778202 0.852545215 1.500895693 1.297914219
+51 0.798395037 0.882904494 1.57355356 1.347924555
+52 0.842188914 0.939511239 1.689976394 1.432319803
+53 0.891975358 1.016595827 1.832651105 1.539531354
+54 0.934629284 1.093771147 1.964734792 1.641811603
+55 0.95039373 1.136988991 2.032391793 1.697232383
+56 0.921020776 1.114266142 1.986895072 1.66735676
+57 0.837928508 1.011270795 1.808204497 1.533944686
+58 0.710442665 0.851505734 1.52981162 1.32101574
+59 0.562525139 0.675330202 1.213830786 1.075273712
+60 0.419569772 0.516275237 0.918171454 0.841313268
+61 0.299057851 0.390715711 0.675158943 0.645738916
+62 0.206609313 0.299318099 0.492903169 0.495935097
+63 0.140113317 0.236640632 0.365271109 0.388639031
+64 0.094237282 0.196118217 0.280981536 0.316512479
+65 0.063346449 0.172546401 0.22964912 0.272639693
+66 0.042755682 0.16199841 0.202355119 0.250836372
+67 0.029023113 0.161905927 0.193346022 0.246928298
+68 0.019819914 0.169711524 0.198109684 0.256817823
+69 0.044437578 0.18156295 0.211596767 0.274612021
+70 0.000156932 0.1918985 0.227017749 0.291769474
+71 8.2759E-08 0.193327676 0.234189905 0.296275621
+72 0 0.182112703 0.226202406 0.28129868
+73 0 0.160335408 0.203297492 0.249134122
+74 0 0.134028824 0.172207354 0.208939098
+75 0 0.109770822 0.141889065 0.171315075
+76 0 0.090506689 0.116970065 0.14120929
+77 0 0.076779593 0.098781668 0.119691048
+78 0 0.067660604 0.086400747 0.10538151
+79 0 0.061594111 0.07792028 0.095852677
+80 0 0.057290593 0.071731272 0.089081026
+81 0 0.053511634 0.066303235 0.083117671
+82 0 0.049542614 0.060781553 0.076844599
+83 0 0.04518434 0.054943288 0.069959844
+84 0 0.040558338 0.048937186 0.062666038
+85 0 0.036053962 0.043206086 0.055581146
+86 0 0.031947399 0.03804775 0.049137977
+87 0 0.028392311 0.033612776 0.043571735
+88 0 0.025400739 0.029891926 0.038894744
+89 0 0.022866073 0.026746759 0.034935133
+90 0 0.020676593 0.024038836 0.031515504
+91 0 0.01871544 0.021629399 0.028453017
+92 0 0.016909471 0.019431555 0.025634558
+93 0 0.015230749 0.017410011 0.023018174
+94 0 0.013671927 0.015552424 0.02059362
+95 0 0.012245261 0.013867661 0.018380249
+96 0 0.010957182 0.012358203 0.016387525
+97 0 0.009806896 0.011018865 0.01461309
+98 0 0.008786318 0.009837105 0.013043178
+99 0 0.00787966 0.008792702 0.011652288
+100 0 0.066951174 0.074091778 0.094382543
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR46.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR46.tsv
new file mode 100644
index 000000000..bc3bda76d
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR46.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 26 26 26 26
+1 2.576923542 2.560559872 2.528471239 2.539250775
+2 1.891652727 1.885754123 1.885823145 1.886104304
+3 1.411161969 1.41042377 1.425266545 1.420669854
+4 1.076906951 1.078662011 1.096991088 1.091213313
+5 0.8483094291 0.8495058152 0.8644764799 0.859785395
+6 0.6932308745 0.6932421993 0.7010105913 0.6986841042
+7 0.5886269757 0.5870003042 0.5859697048 0.5865244848
+8 0.5146583655 0.5111225684 0.5021802224 0.5052984978
+9 0.4559198378 0.4516466439 0.437597067 0.4423427946
+10 0.4015885373 0.3969303248 0.3827017099 0.3874798787
+11 0.3450860633 0.3418450562 0.3327498855 0.3358549923
+12 0.2892955669 0.2885659354 0.2878580606 0.2882192398
+13 0.2401267367 0.2415456075 0.2499085893 0.2472478998
+14 0.2042759551 0.2077324607 0.2232793782 0.2181689007
+15 0.1869005437 0.1911574984 0.2112136982 0.2045487431
+16 0.1921519211 0.1967305543 0.2180264298 0.2109919397
+17 0.2305793606 0.2342844684 0.2510308687 0.2457158062
+18 0.3243980664 0.3233861922 0.3211644774 0.3223516395
+19 0.5223403341 0.5068929443 0.4476241175 0.4668320205
+20 0.9005706937 0.8398734478 0.642955861 0.7021770558
+21 1.505962276 1.354479766 0.8954557823 1.024797678
+22 2.244517653 1.95897399 1.145093239 1.362562068
+23 2.791758197 2.388650902 1.29331412 1.576368382
+24 2.891176332 2.472649361 1.304647749 1.602773118
+25 2.619869619 2.248273291 1.210265487 1.476742878
+26 2.22331726 1.93143546 1.089735864 1.308988327
+27 1.910780788 1.684734017 1.003560685 1.183585681
+28 1.739991304 1.547555348 0.9660519456 1.121134014
+29 1.706161591 1.526451549 0.9790814961 1.125229841
+30 1.787980913 1.594105667 1.022076134 1.173922021
+31 1.947774765 1.720570414 1.067969527 1.239242898
+32 2.145131136 1.868583311 1.09335387 1.29356441
+33 2.325770139 1.992149671 1.081209284 1.311898561
+34 2.438793943 2.061370568 1.043852618 1.297118137
+35 2.451582156 2.059846213 1.003675058 1.264850718
+36 2.358511935 1.995347214 0.9870222781 1.239429479
+37 2.181566673 1.886728283 1.018307013 1.243622452
+38 1.955360951 1.753818782 1.107716116 1.284257031
+39 1.715772183 1.613558704 1.262914374 1.362008387
+40 1.489754964 1.477577692 1.47012015 1.46146232
+41 1.294023254 1.353177016 1.69021922 1.556335193
+42 1.133885195 1.243200801 1.869856529 1.620760623
+43 1.008133132 1.148237536 1.952294314 1.63285771
+44 0.9125884077 1.066834588 1.927939318 1.593627699
+45 0.8419946156 0.9971233749 1.824541918 1.518158897
+46 0.7921794096 0.938278885 1.690912431 1.429731737
+47 0.75993222 0.8901982664 1.572317046 1.350538392
+48 0.7435757493 0.8554325354 1.491579782 1.29419987
+49 0.7427256195 0.8376239031 1.460336033 1.269523491
+50 0.7573759558 0.8411708007 1.480881949 1.280609307
+51 0.7875672897 0.8711244734 1.552570249 1.329952968
+52 0.8307598237 0.9269752538 1.667440007 1.413223263
+53 0.8798570785 1.003030335 1.808211613 1.519005851
+54 0.9219039032 1.079174438 1.938533183 1.619922948
+55 0.9374034619 1.121813587 2.005286547 1.674605118
+56 0.9083603451 1.099391642 1.960394387 1.645127682
+57 0.8263309192 0.9977687323 1.78408431 1.513493777
+58 0.7005451289 0.8401347311 1.509402336 1.303403132
+59 0.554657176 0.666310501 1.197635201 1.060937256
+60 0.4137013436 0.5093792299 0.9059199276 0.830096336
+61 0.2948928781 0.3854967326 0.6661501012 0.6371300542
+62 0.2037506785 0.2953201515 0.4863267145 0.4893241103
+63 0.1381837169 0.2334801289 0.3603981282 0.3834590434
+64 0.09293795406 0.1934991267 0.2772334736 0.3122943839
+65 0.06246402385 0.1702421331 0.2265859647 0.2690065733
+66 0.04214760924 0.1598347948 0.1996559032 0.24749379
+67 0.02859748969 0.1597430469 0.1907665401 0.2436374569
+68 0.01951760855 0.1674435913 0.1954659113 0.2533945497
+69 0.04361425264 0.1791357051 0.2087720896 0.2709507811
+70 0.0001544508478 0.1893322255 0.2239863406 0.2878788335
+71 0.0000000817450308 0.1907418394 0.2310622647 0.2923247378
+72 0 0.1796769479 0.223181557 0.2775479659
+73 0 0.1581913709 0.2005830902 0.2458131073
+74 0 0.1322371044 0.1699087605 0.2061547517
+75 0 0.1083037648 0.1399956862 0.1690326913
+76 0 0.08929722337 0.1154094643 0.1393282248
+77 0 0.07575345557 0.09746371498 0.1180965389
+78 0 0.06675603825 0.08524773907 0.1039773165
+79 0 0.06077025167 0.07688006954 0.0945750587
+80 0 0.05652388649 0.07077326519 0.0878933148
+81 0 0.05279517599 0.06541735863 0.08200928106
+82 0 0.04887911125 0.05996920663 0.07581988343
+83 0 0.0445791669 0.05420887359 0.06902712158
+84 0 0.04001520037 0.04828309842 0.06183082058
+85 0 0.03557128315 0.0426287531 0.05484058067
+86 0 0.03151984831 0.03753956122 0.04848338453
+87 0 0.02801246334 0.03316405062 0.04299129826
+88 0 0.02506099045 0.0294930666 0.03837651568
+89 0 0.0225602399 0.02638997809 0.03446951949
+90 0 0.02039999224 0.02371818026 0.03109532679
+91 0 0.01846496548 0.02134077181 0.02807357705
+92 0 0.01668301939 0.01917205408 0.02529267959
+93 0 0.01502662783 0.01717727417 0.02271123008
+94 0 0.01348857305 0.01534431272 0.02031909869
+95 0 0.01208096982 0.01368197155 0.01813534979
+96 0 0.01081016752 0.01219271252 0.01616929834
+97 0 0.009675362966 0.0108713904 0.01441859715
+98 0 0.008668553296 0.009705586134 0.01286965607
+99 0 0.007774123144 0.008675285202 0.01149731007
+100 0 0.06605201626 0.07310148804 0.09312489753
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR47.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR47.tsv
new file mode 100644
index 000000000..926fae087
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR47.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 27 27 27 27
+1 2.541152301 2.52596274 2.494172825 2.504982234
+2 1.86541293 1.860276778 1.860246916 1.860650489
+3 1.391597709 1.391369714 1.405939425 1.401497433
+4 1.061982998 1.064090612 1.082117146 1.076487008
+5 0.8365576079 0.838030249 0.8527559948 0.8481820786
+6 0.6836306317 0.6838773188 0.6915066264 0.6892545431
+7 0.5804781515 0.5790701201 0.5780253124 0.5786081083
+8 0.5075360443 0.5042168299 0.4953715538 0.498477864
+9 0.4496125198 0.4455438649 0.4316637399 0.4363714503
+10 0.3960344641 0.391566471 0.3775125298 0.3822488387
+11 0.3403144039 0.3372254617 0.3282380377 0.3313208342
+12 0.285295742 0.2846664842 0.2839551166 0.2843283389
+13 0.2368067098 0.238281891 0.2465205274 0.2439104175
+14 0.2014513864 0.2049260343 0.2202527268 0.2152243115
+15 0.1843159656 0.1885754108 0.2083509854 0.20178834
+16 0.1894945236 0.1940735468 0.2150716959 0.2081448705
+17 0.2273905309 0.2311205002 0.2476290371 0.2424003201
+18 0.3199122739 0.3190188882 0.3168122006 0.318001951
+19 0.5151192744 0.5000467378 0.4415577222 0.4605320841
+20 0.8881264021 0.8285282311 0.6342414988 0.6926996812
+21 1.485166965 1.336180193 0.8833183582 1.010963709
+22 2.213554667 1.932504181 1.129572004 1.344166329
+23 2.753295072 2.356373581 1.275785057 1.555084849
+24 2.851400511 2.439237379 1.286967368 1.581133021
+25 2.583877738 2.217894894 1.193866767 1.456805074
+26 2.192813241 1.905339881 1.074972533 1.291316137
+27 1.884596151 1.661972715 0.989966413 1.167606806
+28 1.716174281 1.526647691 0.9529667372 1.105997997
+29 1.682834353 1.505828501 0.9658202461 1.110037633
+30 1.763564614 1.572567468 1.008232753 1.158071053
+31 1.921211762 1.697322113 1.053504876 1.222508425
+32 2.11592075 1.843333703 1.078546123 1.276095043
+33 2.294154828 1.965229444 1.066567252 1.294180702
+34 2.405708453 2.033514588 1.029718083 1.279599452
+35 2.418399186 2.032010916 0.9900863169 1.247767693
+36 2.326669999 1.968383751 0.9736607272 1.222689706
+37 2.152194416 1.861232717 1.004523538 1.226825755
+38 1.929108343 1.730119119 1.09272391 1.266910871
+39 1.692798962 1.591754054 1.245823176 1.343610963
+40 1.469857503 1.457610133 1.450226707 1.441720013
+41 1.27677669 1.334890082 1.66735023 1.535309538
+42 1.118799604 1.22639966 1.844561118 1.598862797
+43 0.9947411883 1.132719429 1.92588914 1.610794797
+44 0.9004840948 1.052416369 1.901869782 1.572093422
+45 0.8308466789 0.9836471182 1.799876771 1.497643143
+46 0.7817144135 0.9255977793 1.668059481 1.410409752
+47 0.7499200651 0.8781668608 1.55107192 1.332285412
+48 0.7338069097 0.8438708887 1.471430014 1.276706983
+49 0.7329915722 0.8263028413 1.440612584 1.252362681
+50 0.7474642895 0.8298016981 1.460885566 1.263297071
+51 0.7772608549 0.8593504248 1.531611376 1.311971982
+52 0.8198785107 0.914446202 1.644937573 1.394114582
+53 0.8683303363 0.9894730925 1.783818811 1.498464623
+54 0.9098600811 1.064587564 1.912394265 1.598014194
+55 0.9252629778 1.106649578 1.978261668 1.651953087
+56 0.8967762231 1.084529609 1.933989874 1.62286984
+57 0.8160051124 0.9842792522 1.760069518 1.493011971
+58 0.6919576309 0.8287753974 1.489098223 1.285759977
+59 0.5479130335 0.6573008559 1.181535733 1.046572805
+60 0.4086250802 0.5024914544 0.8937501077 0.818855237
+61 0.2911773749 0.3802843363 0.6572072447 0.6285010952
+62 0.2010970243 0.291327477 0.4798021265 0.4826966505
+63 0.1363451999 0.2303239553 0.3555658724 0.378265432
+64 0.09170773946 0.190883749 0.2735182001 0.3080646674
+65 0.06167315507 0.1679412428 0.2235506049 0.2653630128
+66 0.04166124935 0.157674463 0.1969819372 0.2441412064
+67 0.02831284042 0.157583571 0.1882118493 0.2403363618
+68 0.01936102659 0.1651793659 0.1928482427 0.2499601577
+69 0.04356881017 0.1767125798 0.205976167 0.2672771304
+70 0.0001557843158 0.186770463 0.2209869605 0.2839744174
+71 0.00000008360120321 0.1881606928 0.2279692075 0.2883592492
+72 0 0.1772457249 0.2201958912 0.2737827873
+73 0 0.1560514059 0.197902048 0.2424787434
+74 0 0.1304488458 0.1676398698 0.2033587454
+75 0 0.1068395893 0.1381278189 0.1667403382
+76 0 0.08809018215 0.1138705799 0.1374385696
+77 0 0.07472943382 0.09616454826 0.1164944009
+78 0 0.06585341381 0.08411149739 0.1025660826
+79 0 0.05994825735 0.0758553324 0.09329075791
+80 0 0.05575903422 0.06982995947 0.08669917993
+81 0 0.05208058215 0.06454567874 0.08089477284
+82 0 0.04821746211 0.05917059712 0.07478947099
+83 0 0.04397577593 0.05348758995 0.06808921885
+84 0 0.03947369556 0.04764128584 0.0609909731
+85 0 0.03509001188 0.04206258361 0.05409587547
+86 0 0.03109343184 0.03704125431 0.04782503659
+87 0 0.02763347093 0.03272389322 0.04240738569
+88 0 0.02472185395 0.02910155223 0.03785501459
+89 0 0.02225485989 0.02603953737 0.03400081827
+90 0 0.02012379361 0.02340314336 0.03067226865
+91 0 0.01821495676 0.02105734534 0.02769151069
+92 0 0.01645718482 0.01891758557 0.02494846899
+93 0 0.01482329524 0.01694951478 0.02240223506
+94 0 0.01330613699 0.01514111155 0.02004274623
+95 0 0.01191762654 0.01350099124 0.01788873035
+96 0 0.01066401356 0.01203155463 0.01594934702
+97 0 0.009544513983 0.01072773963 0.0142223046
+98 0 0.008551250964 0.009577325157 0.01269424152
+99 0 0.007668851261 0.008560619815 0.01134040827
+100 0 0.06515838491 0.07213882233 0.09185386445
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR48.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR48.tsv
new file mode 100644
index 000000000..d62203644
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR48.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 28 28 28 28
+1 2.506849758 2.491395267 2.460002869 2.470659332
+2 1.840221274 1.834818437 1.83476416 1.835158896
+3 1.372798715 1.372327988 1.386681682 1.382298233
+4 1.047633196 1.049527433 1.06729589 1.061741211
+5 0.825251511 0.826560436 0.841076599 0.836564079
+6 0.674389673 0.674516781 0.682035682 0.679813443
+7 0.5726302 0.571143529 0.570108282 0.570682239
+8 0.500673109 0.497314303 0.488586125 0.491649114
+9 0.443531874 0.439444095 0.425750474 0.43039298
+10 0.39067768 0.386205446 0.372340727 0.37701149
+11 0.335710809 0.332608447 0.323741158 0.326781125
+12 0.281436155 0.280769286 0.280065009 0.2804326
+13 0.233603013 0.235020068 0.243143525 0.240568732
+14 0.198726007 0.202121199 0.217235894 0.212275983
+15 0.181822442 0.185994724 0.205497514 0.199024423
+16 0.186930961 0.191417908 0.212126463 0.20529419
+17 0.224314239 0.227958087 0.244238103 0.239080668
+18 0.315584018 0.314653656 0.3124738 0.313646883
+19 0.508149082 0.493203707 0.435510526 0.454224534
+20 0.876106331 0.817188207 0.625554411 0.683211185
+21 1.465059371 1.317888893 0.871218315 0.997114064
+22 2.183569779 1.906046084 1.114097541 1.325750552
+23 2.715972966 2.324110016 1.258307417 1.533779081
+24 2.812717745 2.405838904 1.269337332 1.55947123
+25 2.548796179 2.187528028 1.177513348 1.436848031
+26 2.163019352 1.879253574 1.060248813 1.273627466
+27 1.858973189 1.639218987 0.97640761 1.151613497
+28 1.692826907 1.50574655 0.939914732 1.090848747
+29 1.659926637 1.48521145 0.952591674 1.094832626
+30 1.739542412 1.551035059 0.994422408 1.142207294
+31 1.89502316 1.674079488 1.039073539 1.205761102
+32 2.087053793 1.81808954 1.063771176 1.258612991
+33 2.262825803 1.938314141 1.051956333 1.276450739
+34 2.372819514 2.005662691 1.015612316 1.262069554
+35 2.385295841 2.004178613 0.976524044 1.23067446
+36 2.294779875 1.941422099 0.960324046 1.20594064
+37 2.122654965 1.83573783 0.990764494 1.210020465
+38 1.902594178 1.706419138 1.077756832 1.249556639
+39 1.669501503 1.569948251 1.22875872 1.325205909
+40 1.449602719 1.43764074 1.430361732 1.421970625
+41 1.259161962 1.316600756 1.644510268 1.514277641
+42 1.103347649 1.209595659 1.819292969 1.576959946
+43 0.980988647 1.117198062 1.899506676 1.588728407
+44 0.888022422 1.037994543 1.87581655 1.550557366
+45 0.819337319 0.970166954 1.775221098 1.477127275
+46 0.770874664 0.912912504 1.645209825 1.391089172
+47 0.739510405 0.866131049 1.529824849 1.314035213
+48 0.723610514 0.832304589 1.451273696 1.259218193
+49 0.722797015 0.814976822 1.420878036 1.235207354
+50 0.737060165 0.818427208 1.440872911 1.245991934
+51 0.766434852 0.847570343 1.510629655 1.294000135
+52 0.808450788 0.901910185 1.622403489 1.375017701
+53 0.8562131 0.975907616 1.75938259 1.477938641
+54 0.897135904 1.049990924 1.886197102 1.576124883
+55 0.91227512 1.091474284 1.951162059 1.629325002
+56 0.884120418 1.069655221 1.907495743 1.60063985
+57 0.804414458 0.970777262 1.735956239 1.472560176
+58 0.68206795 0.817404416 1.468695579 1.268146599
+59 0.540051554 0.648281144 1.165346062 1.03223572
+60 0.402760275 0.495595433 0.881503558 0.807637795
+61 0.287013104 0.375065362 0.648202452 0.6198918
+62 0.198237299 0.287329561 0.473228923 0.476085277
+63 0.134414173 0.227163506 0.350695518 0.373085086
+64 0.090407579 0.188264727 0.269772316 0.303846237
+65 0.060790811 0.165637046 0.22048934 0.261729579
+66 0.041054031 0.155510911 0.194284462 0.240798329
+67 0.027888507 0.155420734 0.18563408 0.237045244
+68 0.019060127 0.162911446 0.19020626 0.246536623
+69 0.042752714 0.174285317 0.20315344 0.263615631
+70 0.000150461 0.184204158 0.21795771 0.280083489
+71 7.89019E-08 0.185574855 0.224843903 0.284408006
+72 0 0.174810034 0.21717744 0.270031614
+73 0 0.153907498 0.195189929 0.2391572
+74 0 0.128657285 0.16534328 0.200573871
+75 0 0.105372671 0.136236075 0.164457506
+76 0 0.086880799 0.112311242 0.13555718
+77 0 0.073703308 0.094847544 0.114899705
+78 0 0.064948792 0.082959212 0.101161825
+79 0 0.059124298 0.074815741 0.092013156
+80 0 0.054992224 0.068872604 0.085511502
+81 0 0.051364069 0.06366062 0.079786354
+82 0 0.047553996 0.058359316 0.073764602
+83 0 0.043370738 0.052754457 0.067156209
+84 0 0.03893076 0.046988566 0.060155383
+85 0 0.034607534 0.0414865 0.05335495
+86 0 0.03066601 0.03653401 0.047170192
+87 0 0.027253628 0.032275704 0.041826863
+88 0 0.024381963 0.028702812 0.037336875
+89 0 0.021948756 0.025682578 0.033535406
+90 0 0.019846839 0.023082203 0.030252301
+91 0 0.017964113 0.020768555 0.027312168
+92 0 0.016230417 0.01865823 0.024606479
+93 0 0.014618957 0.016717295 0.022094949
+94 0 0.013122686 0.014933834 0.019767702
+95 0 0.011753348 0.013316281 0.017643243
+96 0 0.010517092 0.011866978 0.015730601
+97 0 0.009413119 0.010580942 0.014027465
+98 0 0.008433638 0.009446146 0.012520597
+99 0 0.007563458 0.008443218 0.011185504
+100 0 0.064260294 0.071150011 0.090597245
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR49.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR49.tsv
new file mode 100644
index 000000000..e84396197
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR49.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 29 29 29 29
+1 2.472003233 2.456819765 2.425844761 2.436330977
+2 1.814644534 1.809356786 1.809289166 1.809663919
+3 1.353720601 1.353285578 1.367429085 1.36309693
+4 1.033075082 1.034964911 1.052478129 1.046994087
+5 0.8137840001 0.8150918537 0.8293996757 0.8249452023
+6 0.665018294 0.6651575943 0.6725666027 0.6703717081
+7 0.5646722735 0.5632181547 0.5621927713 0.5627558491
+8 0.4937143859 0.4904127313 0.4818020232 0.4848198913
+9 0.4373665737 0.433344965 0.4198384244 0.4244140527
+10 0.3852465362 0.380844754 0.3671700539 0.3717736988
+11 0.3310436336 0.3279915215 0.3192453147 0.3222410054
+12 0.2775236933 0.2768720313 0.2761758302 0.2765364993
+13 0.2303559149 0.2317581359 0.2397673369 0.2372267429
+14 0.1959641979 0.1993162611 0.2142197786 0.2093274037
+15 0.1792960476 0.1834139685 0.2026446988 0.1962602926
+16 0.1843340383 0.1887622425 0.2091818783 0.2024433088
+17 0.2211983302 0.2247957013 0.240847886 0.2357607953
+18 0.3112004556 0.3102885427 0.3081362876 0.3092915247
+19 0.5010904031 0.4863609875 0.4294645499 0.4479165302
+20 0.8639350161 0.8058488734 0.6168690681 0.6737219306
+21 1.44470313 1.2995989 0.8591206987 0.9832632043
+22 2.153226263 1.87959 1.098626158 1.307333078
+23 2.678228239 2.291848841 1.240833194 1.512471363
+24 2.77362857 2.372442682 1.251710645 1.537807577
+25 2.513377363 2.157162939 1.161162926 1.416889447
+26 2.132965177 1.853168558 1.045527689 1.255937596
+27 1.833147546 1.616466214 0.9628511114 1.135619233
+28 1.66931314 1.484846174 0.9268648689 1.07569868
+29 1.636873075 1.464595098 0.9393652073 1.079626845
+30 1.715385275 1.529503362 0.9806141954 1.126342746
+31 1.868706871 1.650837641 1.024644365 1.189012954
+32 2.058068079 1.792846236 1.048998373 1.241130092
+33 2.231393934 1.911399749 1.037347454 1.258719947
+34 2.339854542 1.977811693 1.001508435 1.244538887
+35 2.352155351 1.976347117 0.9629634935 1.213580541
+36 2.262899555 1.914461097 0.9469889624 1.189190966
+37 2.093172975 1.810243394 0.9770069912 1.193214625
+38 1.876177409 1.682719409 1.062791306 1.232201891
+39 1.646327685 1.548142531 1.211695887 1.30680036
+40 1.429483069 1.417671309 1.410498463 1.402220768
+41 1.24168128 1.298311331 1.621672032 1.493245334
+42 1.088021159 1.192791549 1.794026443 1.55505679
+43 0.967350983 1.101676613 1.873125583 1.566661869
+44 0.8756678438 1.023572677 1.849764341 1.529021346
+45 0.8079344441 0.9566867851 1.750566078 1.45661162
+46 0.7601501223 0.9002272373 1.622360482 1.371768957
+47 0.7292349245 0.8540952273 1.508577792 1.2957855
+48 0.7135763557 0.820738236 1.43111711 1.241729983
+49 0.7127986685 0.8036506852 1.401142921 1.218052689
+50 0.7268881631 0.8070525262 1.420859328 1.228687544
+51 0.7558729688 0.8357899985 1.489646526 1.27602914
+52 0.7973100088 0.8893738375 1.599867339 1.355921815
+53 0.8443922994 0.9623417424 1.734943415 1.457413852
+54 0.8847043346 1.035393805 1.859995885 1.554237024
+55 0.8995706713 1.076298387 1.92405722 1.60669867
+56 0.8717453545 1.054780071 1.880995382 1.578411904
+57 0.7931167496 0.9572743613 1.711836214 1.452110613
+58 0.6724930305 0.8060324584 1.448286292 1.250535471
+59 0.5325199576 0.63926051 1.149150387 1.017900727
+60 0.3972166095 0.4886986353 0.8692519414 0.7964221741
+61 0.283133333 0.3698457964 0.6391935766 0.611284014
+62 0.1956050932 0.2833312219 0.4666525003 0.4694751216
+63 0.1326459233 0.2240027638 0.3458226138 0.3679057218
+64 0.08921126483 0.1856454904 0.2660243487 0.2996286092
+65 0.05996638621 0.1633326623 0.2174262717 0.2580968265
+66 0.04047411148 0.1533471505 0.1915853069 0.2374560637
+67 0.02747467055 0.1532576161 0.1830546132 0.2337547101
+68 0.01876280369 0.1606431289 0.1875624453 0.2431136862
+69 0.04205473604 0.1718575272 0.2003286631 0.2599547841
+70 0.0001511758747 0.1816372391 0.2149261745 0.2761933084
+71 0.0000000817366138 0.1829884403 0.2217161832 0.2804576263
+72 0 0.17237393 0.2141566309 0.2662813985
+73 0 0.1517633847 0.1924756994 0.2358366333
+74 0 0.1268656685 0.1630449329 0.1977899025
+75 0 0.1039057289 0.1343429215 0.1621754403
+76 0 0.08567132681 0.110750778 0.1336763945
+77 0 0.07267696603 0.09352960516 0.1133054574
+78 0 0.06404380443 0.08180609756 0.09975788952
+79 0 0.05829984513 0.07377534087 0.09073579504
+80 0 0.05422485279 0.06791438788 0.08432404157
+81 0 0.0506470262 0.06277459754 0.07867819402
+82 0 0.04689013496 0.05754695651 0.07274007959
+83 0 0.04276549299 0.05202017559 0.0662236367
+84 0 0.03838779918 0.04633471525 0.05932027892
+85 0 0.0341251432 0.04090941267 0.05261447953
+86 0 0.0302386986 0.0360259772 0.04651569768
+87 0 0.02687384626 0.03182697586 0.04124655082
+88 0 0.02404204506 0.02830376386 0.03681881471
+89 0 0.02164254864 0.02532545219 0.03307001513
+90 0 0.0195697517 0.02276111592 0.02983240269
+91 0 0.01771317354 0.02047950456 0.02693305196
+92 0 0.01600364846 0.01839840426 0.02426494893
+93 0 0.01441472894 0.01648438322 0.02178834328
+94 0 0.01293942632 0.01472571041 0.01949346562
+95 0 0.01158927374 0.01313071099 0.01739853186
+96 0 0.01037030608 0.01170168339 0.01551242929
+97 0 0.009281730409 0.01043368367 0.01383288206
+98 0 0.008315871428 0.009314820269 0.01234684834
+99 0 0.007457776175 0.008325948716 0.01103020114
+100 0 0.06336205634 0.07016046089 0.08933955023
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpanCMR50.tsv b/Data/Simulations/EpiJomon/LifeSpanCMR50.tsv
new file mode 100644
index 000000000..bd94a2b48
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanCMR50.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 30 30 30 30
+1 2.437705134 2.422221692 2.391664237 2.402062336
+2 1.78945613 1.783878323 1.783796459 1.784209906
+3 1.334924021 1.334230387 1.348162321 1.343924269
+4 1.018727091 1.020392441 1.037648899 1.032267532
+5 0.802479272 0.80361532 0.817713344 0.81334164
+6 0.655778375 0.655791861 0.663089697 0.660941915
+7 0.556825112 0.555287235 0.554270665 0.554839259
+8 0.486852049 0.483506373 0.475012313 0.477999064
+9 0.431286386 0.427241682 0.413921596 0.418442538
+10 0.379890123 0.375480512 0.36199534 0.366542513
+11 0.326440371 0.323371647 0.314746101 0.317706727
+12 0.273664438 0.272972387 0.272283859 0.272645501
+13 0.227152567 0.228494286 0.236388819 0.233889181
+14 0.193239192 0.196509734 0.211201647 0.206382746
+15 0.176802932 0.18083179 0.199790013 0.193499826
+16 0.181770948 0.186105135 0.206235376 0.199596173
+17 0.218122631 0.221631598 0.237455448 0.232445229
+18 0.30687301 0.305921021 0.303795888 0.30494173
+19 0.494121381 0.479514382 0.423414456 0.441616446
+20 0.851916615 0.794502894 0.608177675 0.664244346
+21 1.424597695 1.281297953 0.847014532 0.969428944
+22 2.123243782 1.853118085 1.083143842 1.288936974
+23 2.640908518 2.259568974 1.22334685 1.491187448
+24 2.734948092 2.339028266 1.234072146 1.516167154
+25 2.478298002 2.12678264 1.144802036 1.396951423
+26 2.103173353 1.827071636 1.030797587 1.238265276
+27 1.807526449 1.593703948 0.949286702 1.119640269
+28 1.645967406 1.463937761 0.913807667 1.06056258
+29 1.613966771 1.443971372 0.926131516 1.064434539
+30 1.691364255 1.507964485 0.966798629 1.110491657
+31 1.842519231 1.627588623 1.010207701 1.172278342
+32 2.029201896 1.767595875 1.034218125 1.223660583
+33 2.200065547 1.884478782 1.022731479 1.241001967
+34 2.306966127 1.94995506 0.987397994 1.227020118
+35 2.319052333 1.948511324 0.949396937 1.196497467
+36 2.231009411 1.887497335 0.933648277 1.172451165
+37 2.063633009 1.784747726 0.963244019 1.176417896
+38 1.849662209 1.659019816 1.04782017 1.214855668
+39 1.623028808 1.526338079 1.194627061 1.288402816
+40 1.409226715 1.397704032 1.39062875 1.382478267
+41 1.22406508 1.28002472 1.59882713 1.472219417
+42 1.072568002 1.175990741 1.768753534 1.533158667
+43 0.953597564 1.086158829 1.846739038 1.544598672
+44 0.863205559 1.009154763 1.823708068 1.507486837
+45 0.796424567 0.943210818 1.725908514 1.436095705
+46 0.749309739 0.887546418 1.59950999 1.352446875
+47 0.718824301 0.842064123 1.487330769 1.277532464
+48 0.70337853 0.809176925 1.410961593 1.224237062
+49 0.702602234 0.792330015 1.381409887 1.200891855
+50 0.716481905 0.795683896 1.400848971 1.211375297
+51 0.745044982 0.824016534 1.468668084 1.258048175
+52 0.785880921 0.876845521 1.577337844 1.336813219
+53 0.832274594 0.948785429 1.710513546 1.436872811
+54 0.871980345 1.020808086 1.833807319 1.532328581
+55 0.88658257 1.061135757 1.896968739 1.584047052
+56 0.859087487 1.039919578 1.854514709 1.556154509
+57 0.78152153 0.943786462 1.687737838 1.431629198
+58 0.662597209 0.794674622 1.427898664 1.232892595
+59 0.524652985 0.630252194 1.132974556 1.003536444
+60 0.391348654 0.481811993 0.857017245 0.785181167
+61 0.278968582 0.364634353 0.630198421 0.602655117
+62 0.192746591 0.279339354 0.460086918 0.462847725
+63 0.130716415 0.220847284 0.340958277 0.362712193
+64 0.087911997 0.183030724 0.262283331 0.295399004
+65 0.059083993 0.161032325 0.214369145 0.254453411
+66 0.03986605 0.151187331 0.188891595 0.234103668
+67 0.027049047 0.151098625 0.180480534 0.230453855
+68 0.018460498 0.158379372 0.184924333 0.239679595
+69 0.041234224 0.169434873 0.197510171 0.256281492
+70 0.000146375 0.179075981 0.211901598 0.27228928
+71 0.00000007768994035 0.180407873 0.218595877 0.276492496
+72 0 0.169943384 0.21114322 0.262516494
+73 0 0.149624169 0.189768335 0.232502444
+74 0 0.12507817 0.160752581 0.194993998
+75 0 0.102442262 0.13245485 0.159883167
+76 0 0.084464904 0.109194615 0.131786838
+77 0 0.071653458 0.092215395 0.111703462
+78 0 0.063141588 0.080656337 0.09834685
+79 0 0.057478158 0.072738066 0.089451728
+80 0 0.053460216 0.066959162 0.083130151
+81 0 0.049932576 0.061891463 0.077563894
+82 0 0.046228586 0.05673737 0.071709793
+83 0 0.042162199 0.051288511 0.065285754
+84 0 0.037846429 0.045683276 0.058480348
+85 0 0.03364408 0.040334494 0.051869619
+86 0 0.029812584 0.035519858 0.045857162
+87 0 0.026495249 0.031379928 0.040662453
+88 0 0.023703378 0.02790621 0.036297154
+89 0 0.021337669 0.024969709 0.032601186
+90 0 0.019294027 0.022441381 0.029409245
+91 0 0.01746355 0.020191846 0.026550903
+92 0 0.01577806 0.018140045 0.023920666
+93 0 0.014211485 0.016252987 0.021479294
+94 0 0.012756934 0.014519076 0.019217095
+95 0 0.011425773 0.012946487 0.01715196
+96 0 0.010223948 0.01153748 0.015292617
+97 0 0.009150679 0.010287199 0.013636824
+98 0 0.008198401 0.00918395 0.012171745
+99 0 0.007352375 0.008208899 0.010873638
+100 0 0.06246772 0.069174862 0.088069649
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/LifeSpanImazu2022.tsv b/Data/Simulations/EpiJomon/LifeSpanImazu2022.tsv
new file mode 100644
index 000000000..4fa2c82dc
--- /dev/null
+++ b/Data/Simulations/EpiJomon/LifeSpanImazu2022.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer_male_ndx hunter_gatherer_female_ndx agricultural_male_ndx agricultural_female_ndx
+0 30 30 25 25
+1 1.771 1.771 1.8975 1.8975
+2 1.7466624 1.7466624 1.871424 1.871424
+3 1.71524431 1.71524431 1.837761761 1.837761761
+4 1.690421135 1.690421135 1.811165502 1.811165502
+5 1.658916478 1.658916478 1.777410512 1.777410512
+6 1.633712301 1.633712301 1.750406037 1.750406037
+7 1.602212362 1.602212362 1.716656103 1.716656103
+8 1.57672762 1.57672762 1.689351022 1.689351022
+9 1.550979833 1.550979833 1.661764107 1.661764107
+10 1.524999223 1.524999223 1.633927739 1.633927739
+11 1.493462569 1.493462569 1.600138467 1.600138467
+12 1.467405662 1.467405662 1.572220352 1.572220352
+13 1.441195299 1.441195299 1.54413782 1.54413782
+14 1.419772057 1.419772057 1.521184347 1.521184347
+15 1.393052832 1.393052832 1.492556605 1.492556605
+16 1.36626996 1.36626996 1.463860671 1.463860671
+17 1.339449386 1.339449386 1.435124342 1.435124342
+18 1.316977201 1.316977201 1.411047001 1.411047001
+19 1.289891951 1.289891951 1.38202709 1.38202709
+20 1.266950905 1.266950905 1.357447399 1.357447399
+21 1.239722531 1.239722531 1.328274141 1.328274141
+22 1.216441178 1.216441178 1.303329834 1.303329834
+23 1.19291305 1.19291305 1.278121125 1.278121125
+24 1.16917408 1.16917408 1.252686514 1.252686514
+25 1.145259418 1.145259418 1.227063662 1.227063662
+26 1.121203384 1.121203384 1.20128934 1.20128934
+27 1.100304423 1.100304423 1.178897596 1.178897596
+28 1.075844035 1.075844035 1.152690038 1.152690038
+29 1.054394671 1.054394671 1.129708576 1.129708576
+30 1.029680391 1.029680391 1.103228991 1.103228991
+31 1.007836457 1.007836457 1.079824775 1.079824775
+32 0.9857492243 0.9857492243 1.056159883 1.056159883
+33 0.9634603391 0.9634603391 1.032278935 1.032278935
+34 0.9435536647 0.9435536647 1.010950355 1.010950355
+35 0.9207924036 0.9207924036 0.9865632896 0.9865632896
+36 0.9003116296 0.9003116296 0.9646196031 0.9646196031
+37 0.8795205587 0.8795205587 0.9423434558 0.9423434558
+38 0.8584682821 0.8584682821 0.9197874451 0.9197874451
+39 0.8372026719 0.8372026719 0.8970028627 0.8970028627
+40 0.8157702835 0.8157702835 0.8740395894 0.8740395894
+41 0.7961439756 0.7961439756 0.8530114025 0.8530114025
+42 0.7761998943 0.7761998943 0.8316427439 0.8316427439
+43 0.7577632988 0.7577632988 0.8118892487 0.8118892487
+44 0.7371939202 0.7371939202 0.7898506288 0.7898506288
+45 0.7180938189 0.7180938189 0.7693862345 0.7693862345
+46 0.6986756219 0.6986756219 0.7485810234 0.7485810234
+47 0.6804790723 0.6804790723 0.7290847203 0.7290847203
+48 0.6618783248 0.6618783248 0.709155348 0.709155348
+49 0.6429418307 0.6429418307 0.6888662472 0.6888662472
+50 0.6250169353 0.6250169353 0.6696610021 0.6696610021
+51 0.5920795674 0.5920795674 0.6343709651 0.6343709651
+52 0.5737360652 0.5737360652 0.6147172128 0.6147172128
+53 0.5563530215 0.5563530215 0.5960925231 0.5960925231
+54 0.5387177324 0.5387177324 0.5771975705 0.5771975705
+55 0.52089559 0.52089559 0.5581024178 0.5581024178
+56 0.5038895892 0.5038895892 0.5398817027 0.5398817027
+57 0.4866678464 0.4866678464 0.5214298354 0.5214298354
+58 0.4701395564 0.4701395564 0.5037209533 0.5037209533
+59 0.4533870291 0.4533870291 0.4857718168 0.4857718168
+60 0.4372315232 0.4372315232 0.4684623463 0.4684623463
+61 0.4215666557 0.4215666557 0.4516785597 0.4516785597
+62 0.4056362299 0.4056362299 0.4346102463 0.4346102463
+63 0.3901449027 0.3901449027 0.4180123958 0.4180123958
+64 0.3744312101 0.3744312101 0.4011762965 0.4011762965
+65 0.3596710384 0.3596710384 0.3853618269 0.3853618269
+66 0.3446355883 0.3446355883 0.3692524161 0.3692524161
+67 0.3298945658 0.3298945658 0.3534584633 0.3534584633
+68 0.3154047788 0.3154047788 0.3379336916 0.3379336916
+69 0.3007220449 0.3007220449 0.322202191 0.322202191
+70 0.2867049467 0.2867049467 0.3071838715 0.3071838715
+71 0.2728618191 0.2728618191 0.292351949 0.292351949
+72 0.2591852806 0.2591852806 0.2776985149 0.2776985149
+73 0.2459741716 0.2459741716 0.2635437553 0.2635437553
+74 0.2325874383 0.2325874383 0.2492008267 0.2492008267
+75 0.2196415337 0.2196415337 0.2353302147 0.2353302147
+76 0.2068364323 0.2068364323 0.2216104631 0.2216104631
+77 0.1942018643 0.1942018643 0.208073426 0.208073426
+78 0.1819597288 0.1819597288 0.1949568523 0.1949568523
+79 0.1697304101 0.1697304101 0.1818540108 0.1818540108
+80 0.1577802281 0.1577802281 0.1690502444 0.1690502444
+81 0.1461461046 0.1461461046 0.1565851121 0.1565851121
+82 0.1346176886 0.1346176886 0.1442332378 0.1442332378
+83 0.1233386512 0.1233386512 0.1321485548 0.1321485548
+84 0.1122326762 0.1122326762 0.1202492959 0.1202492959
+85 0.1013988072 0.1013988072 0.1086415791 0.1086415791
+86 0.09079050542 0.09079050542 0.09727554152 0.09727554152
+87 0.08038026482 0.08038026482 0.0861217123 0.0861217123
+88 0.07075874712 0.07075874712 0.07581294334 0.07581294334
+89 0.06228892509 0.06228892509 0.06673813402 0.06673813402
+90 0.05483294076 0.05483294076 0.05874957938 0.05874957938
+91 0.04826943775 0.04826943775 0.05171725473 0.05171725473
+92 0.04249158605 0.04249158605 0.04552669934 0.04552669934
+93 0.0374053432 0.0374053432 0.04007715343 0.04007715343
+94 0.03292792362 0.03292792362 0.03527991816 0.03527991816
+95 0.02898645116 0.02898645116 0.03105691196 0.03105691196
+96 0.02551677296 0.02551677296 0.0273393996 0.0273393996
+97 0.02246241523 0.02246241523 0.02406687346 0.02406687346
+98 0.01977366413 0.01977366413 0.02118606871 0.02118606871
+99 0.01740675653 0.01740675653 0.01865009629 0.01865009629
+100 0.1280130976 0.1280130976 0.1371568902 0.1371568902
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/MapList.tsv b/Data/Simulations/EpiJomon/MapList.tsv
new file mode 100644
index 000000000..9f0039e7a
--- /dev/null
+++ b/Data/Simulations/EpiJomon/MapList.tsv
@@ -0,0 +1,3 @@
+key file_name_type data_type file_path z min_x min_y max_x max_y file_name_extension file_format
+slope z_original u8 Data/XYZTiles/Slope_GMTED2010_8bit/2010/8/ 8 0 0 255 255 .bin binary
+district z_original u8 Data/XYZTiles/AynuMosir20250822/ 10 861 326 950 441 .bin binary
diff --git a/Data/Simulations/EpiJomon/Marriage.tsv b/Data/Simulations/EpiJomon/Marriage.tsv
new file mode 100644
index 000000000..18a9351d1
--- /dev/null
+++ b/Data/Simulations/EpiJomon/Marriage.tsv
@@ -0,0 +1,102 @@
+age hunter_gatherer agricultural
+0 0 0
+1 0 0
+2 0 0
+3 0 0
+4 0 0
+5 0 0
+6 0 0
+7 0 0
+8 0 0
+9 0 0
+10 0 0
+11 0 0
+12 0 0
+13 0 0
+14 0.00002406070935 0.00002406070935
+15 0.0000999193559 0.0000999193559
+16 0.0001801960986 0.0001801960986
+17 0.0002655688094 0.0002655688094
+18 0.0003566819091 0.0003566819091
+19 0.0004543116545 0.0004543116545
+20 0.0005596983552 0.0005596983552
+21 0.0006738154246 0.0006738154246
+22 0.0007987892143 0.0007987892143
+23 0.0009364230216 0.0009364230216
+24 0.001090492486 0.001090492486
+25 0.001264808867 0.001264808867
+26 0.001466735971 0.001466735971
+27 0.001708237472 0.001708237472
+28 0.002009174274 0.002009174274
+29 0.002415100186 0.002415100186
+30 0.003069963989 0.003069963989
+31 0.003501269398 0.003501269398
+32 0.002900537962 0.002900537962
+33 0.002311693015 0.002311693015
+34 0.001925943523 0.001925943523
+35 0.001634529996 0.001634529996
+36 0.00139731704 0.00139731704
+37 0.00119579845 0.00119579845
+38 0.001020056776 0.001020056776
+39 0.0008643135606 0.0008643135606
+40 0.0007241054103 0.0007241054103
+41 0.0005966677953 0.0005966677953
+42 0.000479763441 0.000479763441
+43 0.000372157336 0.000372157336
+44 0.0002724644279 0.0002724644279
+45 0.0001799391851 0.0001799391851
+46 0.0000938971269 0.0000938971269
+47 0.00001372884237 0.00001372884237
+48 0 0
+49 0 0
+50 0 0
+51 0 0
+52 0 0
+53 0 0
+54 0 0
+55 0 0
+56 0 0
+57 0 0
+58 0 0
+59 0 0
+60 0 0
+61 0 0
+62 0 0
+63 0 0
+64 0 0
+65 0 0
+66 0 0
+67 0 0
+68 0 0
+69 0 0
+70 0 0
+71 0 0
+72 0 0
+73 0 0
+74 0 0
+75 0 0
+76 0 0
+77 0 0
+78 0 0
+79 0 0
+80 0 0
+81 0 0
+82 0 0
+83 0 0
+84 0 0
+85 0 0
+86 0 0
+87 0 0
+88 0 0
+89 0 0
+90 0 0
+91 0 0
+92 0 0
+93 0 0
+94 0 0
+95 0 0
+96 0 0
+97 0 0
+98 0 0
+99 0 0
+100 0 0
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/Settings.tsv b/Data/Simulations/EpiJomon/Settings.tsv
new file mode 100644
index 000000000..156feabf5
--- /dev/null
+++ b/Data/Simulations/EpiJomon/Settings.tsv
@@ -0,0 +1,49 @@
+key value ja-JP
+#Time -------------------- #時間 --------------------------------------------------
+start_julian_day 1356198 シミュレーション開始日(ユリウス日)
+steps_per_year 12 1年あたりのStepの数(step/年)
+output_step_frequency 120 何Stepおきに出力するか?(step)
+immigration_start_steps 1 渡来開始Step数目(step)
+immigration_end_steps 10000000 渡来終了Step数目(step)
+immigration_step_interval 24 渡来のステップ間隔 (step)
+init_lifespan_grace_period 180 初期化時の寿命までの最低Step間隔(step)
+total_steps 20645 総ステップ数
+num_iterations 20 シミュレーションの繰り返し回数
+output_directory_name BaseI24_30_MD10_L シミュレーションを繰り返す際に使う出力データのフォルダ名
+#Space -------------------- #空間 --------------------------------------------------
+area AynuMosir2 シミュレーションの対象範囲
+cell_group_length 256 集落をグループ分けする際の1グリッド辺の長さ(cell)
+immigration_district_id 8 渡来地区ID
+land_key district 陸地データのKey
+district_key district 地区データのKey
+#Marriage -------------------- #婚姻 --------------------------------------------------
+maternal_residence_probability 0.5 母方居住婚になる確率(父方居住婚にならない確率)
+marriage_search_range 32 結婚時に近くの集落からエージェントを探す際の探索距離(cell)
+female_marriageable_age_min 13 女性の最小婚姻可能年齢(歳)
+male_marriageable_age_min 17 男性の最小婚姻可能年齢(歳)
+female_marriageable_age_max 60 女性の最大婚姻可能年齢(歳)
+male_marriageable_age_max 70 男性の最大婚姻可能年齢(歳)
+#Childbirth -------------------- #出産 --------------------------------------------------
+birth_interval 10 妊娠から出産までのStep間隔(step)
+hunter_gatherer_stillbirth_rate 0 狩猟採集死産率 (no effect)
+agricultural_stillbirth_rate 0 水田稲作死産率 (no effect)
+child_agriculture_priority 0.5 片親が農耕文化を持ち、もう一方の片親が農耕文化を持たない時の農耕文化継承の優先度
+childbearing_age_min 15 出産の最小可能年齢(歳)
+childbearing_age_max 50 出産の最大可能年齢(歳)
+#Movement -------------------- #移動 --------------------------------------------------
+max_hunter_gatherer_settlement_population 180 狩猟採集集落の最大人数(人)
+max_agricultural_settlement_population 80 水田稲作集落の最大人数(人)
+min_move_distance 1 最小移動距離(cell)
+max_move_distance 800 最大移動距離(cell)
+move_probability 0.1 移動確率
+ocean_cost 0.1 海上の通行コスト
+coast_cost 0.01 海岸の通行コスト
+land_cost 2.5 傾斜度0度の陸上の通行コスト
+move_redo 10 移動再試行回数
+move_method astar 移動の手法(astar/random)
+move_astar_loop 8 A*を行うルート数
+move_astar_distance 128 A*を行うルート間隔
+#File -------------------- #ファイル --------------------------------------------------
+marriage_file Marriage.tsv 年別婚姻率
+childbearing_file Childbearing.tsv 年別出産率
+life_span_file LifeSpanCMR50.tsv 年別死亡重み
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/mtDNA.tsv b/Data/Simulations/EpiJomon/mtDNA.tsv
new file mode 100644
index 000000000..cd11fdd93
--- /dev/null
+++ b/Data/Simulations/EpiJomon/mtDNA.tsv
@@ -0,0 +1,16 @@
+haplo_group_region haplo_dist
+Sakhalin1 Y1a1/1
+Sakhalin2 G1b/1
+JomonHokkaido N9b/1
+Hokkaido D4h/6/M7a/3/N9b/19
+okhotsk Y1a1/14/G1b/9/N9b/4/A/3/M7a/2/C3/2/Y/1/B5b/1
+epijomon N9b1/14/N9b/8/G1b/6/M7a2/1/D4h2/3/M7a/1/D4/1/G1/2
+sakhalin Y/1
+chugoku_jomon M7a/1
+shikoku_jomon M7a/1/N9b/1
+kinki_jomon N9b/1
+chubu_jomon D4b/1/G2/1/M7a/3/M9a/3/N9b/7
+kanto_jomon B4b/3/B4f/1/B5b/1/D4b/1/E1a/1/G2a/1/M10/2/M7a/14/M7b/1/M8a/1/N9b/42
+tohoku_jomon D4b/1/D4h/1/M7a/13/N9b/13
+hokkaido_jomon D4h/6/M7a/3/N9b/19
+toraijin A5a/5/B4c/5/B5a/1/B5b/1/C1a/1/C5b/1/D4a/5/D4b/14/D4c/8/D4e/3/D4g/8/D4i/2/D4m/1/D5a/2/D5c/2/G1a/2/M7a/1
\ No newline at end of file
diff --git a/Data/Simulations/EpiJomon/mtDNA_List.tsv b/Data/Simulations/EpiJomon/mtDNA_List.tsv
new file mode 100644
index 000000000..f28dca2d6
--- /dev/null
+++ b/Data/Simulations/EpiJomon/mtDNA_List.tsv
@@ -0,0 +1,6 @@
+mtdna
+D4h
+N9b
+M7a
+G1b
+Y1a1
\ No newline at end of file
diff --git a/Data/Simulations/ModelLanguages.tsv b/Data/Simulations/ModelLanguages.tsv
index 235335ecd..acb56c505 100644
--- a/Data/Simulations/ModelLanguages.tsv
+++ b/Data/Simulations/ModelLanguages.tsv
@@ -1,6 +1,7 @@
key en-US ja-JP zh-TW zh-CN ko-KR hiragana es-ES pt-BR de-DE fr-FR it-IT tr-TR pl-PL el-GR nl-NL cs-CZ uk-UA ru-RU id-ID fa-IR ar-SA ain
Gaikokugo 英語 日本語 中国語(繁体字) 中国語(簡体字) 韓国語 ひらがな スペイン語 ポルトガル語 ドイツ語 フランス語 イタリア語 トルコ語 ポーランド語 ギリシャ語 オランダ語 チェコ語 ウクライナ語 ロシア語 インドネシア語 ペルシャ語 アラビア語 アイヌ語
Sample Select a model サンプルモデル 選擇型號(樣本) 选择型号(样本) 모델 선택 (샘플 모델) さんぷるもでる
+EpiJomon AynuMosir2 続縄文時代 愛努2 阿伊努2 아이누2 ほっかいどう2
Yaponesia Yayoi (Japan) 弥生時代 彌生時代(日本) 弥生时代(日本) 야요이 시대(일본) やぽねしあ اليابان
AynuMosir AynuMosir 擦文時代 愛努 阿伊努 아이누 ほっかいどう
Philippines Philippines フィリピン 菲律賓 菲律宾 필리핀 ふぃりぴん
diff --git a/Data/Simulations/Models.txt b/Data/Simulations/Models.txt
index f5538fcf2..47e4e4ccf 100644
--- a/Data/Simulations/Models.txt
+++ b/Data/Simulations/Models.txt
@@ -1,4 +1,5 @@
Sample
+EpiJomon
Yaponesia
AynuMosir
Philippines
diff --git a/Data/Simulations/Philippines/District.tsv b/Data/Simulations/Philippines/District.tsv
index e8ee4dc64..33b607b15 100644
--- a/Data/Simulations/Philippines/District.tsv
+++ b/Data/Simulations/Philippines/District.tsv
@@ -1,91 +1,91 @@
-id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
-1 フィリピン フィリピン 1 10 100 1000 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-2 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-3 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-4 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-5 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-6 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-7 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-8 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-9 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-10 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-11 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-12 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-13 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-14 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-15 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-16 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-17 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-18 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-19 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-20 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-21 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-22 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-23 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-24 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-25 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-26 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-27 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-28 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-29 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-30 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-31 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-32 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-33 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-34 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-35 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-36 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-37 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-38 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-39 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-40 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-41 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-42 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-43 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-44 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-45 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-46 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-47 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-48 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-49 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-50 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-51 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-52 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-53 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-54 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-55 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-56 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-57 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-58 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-59 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-60 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-61 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-62 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-63 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-64 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-65 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-66 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-67 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-68 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-69 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-70 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-71 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-72 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-73 null null 4 0 0 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-74 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-75 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-76 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-77 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-78 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-79 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-80 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-81 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-82 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-83 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-84 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-85 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-86 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-87 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-88 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-89 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-90 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 フィリピン フィリピン 1 10 100 1000 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+2 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+3 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+4 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+5 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+6 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+7 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+8 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+9 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+10 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+11 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+12 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+13 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+14 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+15 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+16 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+17 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+18 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+19 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+20 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+21 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+22 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+23 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+24 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+25 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+26 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+27 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+28 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+29 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+30 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+31 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+32 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+33 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+34 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+35 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+36 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+37 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+38 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+39 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+40 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+41 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+42 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+43 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+44 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+45 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+46 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+47 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+48 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+49 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+50 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+51 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+52 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+53 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+54 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+55 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+56 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+57 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+58 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+59 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+60 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+61 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+62 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+63 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+64 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+66 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+67 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+68 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+69 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+71 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 null null 4 0 0 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+74 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
diff --git a/Data/Simulations/Philippines/Language.tsv b/Data/Simulations/Philippines/Language.tsv
new file mode 100644
index 000000000..b584de967
--- /dev/null
+++ b/Data/Simulations/Philippines/Language.tsv
@@ -0,0 +1,10 @@
+language_region language_dist
+test1 test1/1
+test2 test2/1
+test3 test3/1
+test4 test4/1
+test5 test5/1
+test6 test6/1
+test7 test7/1
+test8 test8/1
+test9 test9/1
\ No newline at end of file
diff --git a/Data/Simulations/Philippines/Language_List.tsv b/Data/Simulations/Philippines/Language_List.tsv
new file mode 100644
index 000000000..5a17a6fd6
--- /dev/null
+++ b/Data/Simulations/Philippines/Language_List.tsv
@@ -0,0 +1,10 @@
+language
+test1
+test2
+test3
+test4
+test5
+test6
+test7
+test8
+test9
\ No newline at end of file
diff --git a/Data/Simulations/Sample/District.tsv b/Data/Simulations/Sample/District.tsv
index e8ee4dc64..33b607b15 100644
--- a/Data/Simulations/Sample/District.tsv
+++ b/Data/Simulations/Sample/District.tsv
@@ -1,91 +1,91 @@
-id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
-1 フィリピン フィリピン 1 10 100 1000 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-2 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-3 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-4 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-5 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-6 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-7 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-8 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-9 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-10 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-11 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-12 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-13 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-14 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-15 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-16 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-17 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-18 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-19 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-20 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-21 null null 1 15 35 0 0 0 epijomon 0 1/1/1/1/1/1/1/1 160 1 255 0 255
-22 null null 1 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-23 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-24 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-25 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-26 null null 2 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-27 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-28 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-29 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-30 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-31 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-32 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-33 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-34 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-35 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-36 null null 3 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-37 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-38 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-39 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-40 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-41 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-42 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-43 null null 4 50 180 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-44 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-45 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-46 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-47 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-48 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-49 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-50 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-51 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-52 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-53 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-54 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-55 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-56 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-57 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-58 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-59 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-60 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-61 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-62 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-63 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-64 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-65 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-66 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-67 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-68 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-69 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-70 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-71 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-72 null null 4 4 35 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-73 null null 4 0 0 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 3 255 0 0
-74 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-75 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-76 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-77 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-78 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-79 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-80 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-81 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-82 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-83 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-84 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-85 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-86 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-87 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 1 255 0 0
-88 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-89 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
-90 null null 4 4 20 0 0 0 okhotsk 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 フィリピン フィリピン 1 10 100 1000 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+2 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+3 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+4 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+5 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+6 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+7 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+8 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+9 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+10 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+11 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+12 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+13 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+14 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+15 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+16 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+17 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+18 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+19 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+20 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+21 null null 1 15 35 0 0 0 epijomon test1 0 1/1/1/1/1/1/1/1 160 1 255 0 255
+22 null null 1 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+23 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+24 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+25 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+26 null null 2 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+27 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+28 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+29 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+30 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+31 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+32 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+33 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+34 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+35 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+36 null null 3 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+37 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+38 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+39 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+40 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+41 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+42 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+43 null null 4 50 180 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+44 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+45 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+46 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+47 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+48 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+49 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+50 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+51 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+52 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+53 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+54 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+55 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+56 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+57 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+58 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+59 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+60 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+61 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+62 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+63 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+64 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+66 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+67 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+68 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+69 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+71 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 null null 4 4 35 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 null null 4 0 0 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 3 255 0 0
+74 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 null null 4 4 20 0 0 0 okhotsk test1 0 1/1/1/1/1/1/1/1 160 0 255 0 0
diff --git a/Data/Simulations/Sample/Language.tsv b/Data/Simulations/Sample/Language.tsv
new file mode 100644
index 000000000..b584de967
--- /dev/null
+++ b/Data/Simulations/Sample/Language.tsv
@@ -0,0 +1,10 @@
+language_region language_dist
+test1 test1/1
+test2 test2/1
+test3 test3/1
+test4 test4/1
+test5 test5/1
+test6 test6/1
+test7 test7/1
+test8 test8/1
+test9 test9/1
\ No newline at end of file
diff --git a/Data/Simulations/Sample/Language_List.tsv b/Data/Simulations/Sample/Language_List.tsv
new file mode 100644
index 000000000..5a17a6fd6
--- /dev/null
+++ b/Data/Simulations/Sample/Language_List.tsv
@@ -0,0 +1,10 @@
+language
+test1
+test2
+test3
+test4
+test5
+test6
+test7
+test8
+test9
\ No newline at end of file
diff --git a/Data/Simulations/Yaponesia/District.tsv b/Data/Simulations/Yaponesia/District.tsv
index 187e6df07..6f19cc83f 100644
--- a/Data/Simulations/Yaponesia/District.tsv
+++ b/Data/Simulations/Yaponesia/District.tsv
@@ -1,91 +1,91 @@
-id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
-1 satsuma 薩摩 2 4 20 220 0 0 kyushu_jomon 38400 1/1/2/4/4/2/4/1 160 1 255 0 0
-2 osumi 大隅 2 4 20 220 0 0 kyushu_jomon 40600 1/2/2/2/4/2/2/2 160 1 255 0 0
-3 hyuga 日向 2 4 20 220 0 0 kyushu_jomon 30800 10/4/1/1/1/1/1/1 160 1 255 0 0
-4 higo 肥後 2 4 20 2400 0 0 kyushu_jomon 108700 10/4/1/1/1/1/1/4 160 1 255 0 0
-5 bungo 豊後 3 4 20 340 0 0 kyushu_jomon 51600 10/4/1/1/1/1/1/2 160 0 255 0 0
-6 chikugo 筑後 3 4 20 480 0 0 kyushu_jomon 59300 10/10/1/2/2/1/1/2 160 0 255 0 0
-7 hizen 肥前 3 4 20 1210 0 0 kyushu_jomon 48300 4/4/4/4/1/1/1/1 160 0 255 0 0
-8 chikuzen 筑前 3 4 20 480 10 0 kyushu_jomon 112000 4/4/1/1/1/1/4/10 160 0 255 0 0
-9 buzen 豊前 3 4 20 420 0 0 kyushu_jomon 47200 10/2/1/1/1/1/1/2 160 0 255 0 0
-10 iki 壱岐 3 4 20 80 0 0 kyushu_jomon 12100 4/4/1/1/2/1/1/1 160 0 255 0 0
-11 tsushima 対馬 3 4 20 80 0 0 kyushu_jomon 9900 1/1/1/4/4/1/1/1 160 0 255 0 0
-12 nagato 長門 5 4 20 50 0 0 chugoku_jomon 43900 2/2/1/1/1/2/10/10 160 0 255 0 0
-13 suo 周防 5 4 20 50 0 0 chugoku_jomon 49400 1/1/2/1/1/2/10/10 160 0 255 0 0
-14 aki 安芸 5 4 20 190 0 0 chugoku_jomon 69200 1/1/1/2/1/4/10/10 160 0 255 0 0
-15 bingo 備後 5 4 20 190 0 0 chugoku_jomon 71400 1/1/1/1/1/2/10/4 160 0 255 0 0
-16 bitchu 備中 5 4 20 200 0 0 chugoku_jomon 79100 1/1/1/1/1/2/10/4 160 0 255 0 0
-17 mimasaka 美作 5 4 20 200 0 0 chugoku_jomon 70300 2/2/1/2/2/2/1/2 160 0 255 0 0
-18 bizen 備前 5 4 20 180 0 0 chugoku_jomon 56000 2/1/1/1/4/4/10/4 160 0 255 0 0
-19 harima 播磨 7 4 20 70 0 0 kinki_jomon 107600 1/1/2/2/2/10/10/4 160 0 255 0 0
-20 iwami 石見 6 4 20 410 0 0 chugoku_jomon 40600 2/2/1/2/1/1/10/10 160 0 255 0 0
-21 izumo 出雲 6 4 20 410 0 0 chugoku_jomon 85700 4/2/2/2/1/1/10/10 160 0 255 0 0
-22 hoki 伯耆 6 4 20 50 0 0 chugoku_jomon 52700 2/2/2/1/1/2/10/10 160 0 255 0 0
-23 oki 隠岐 6 4 20 110 0 0 chugoku_jomon 13200 1/1/1/1/10/1/1/1 160 0 255 0 0
-24 inaba 因幡 6 4 20 50 0 0 chugoku_jomon 54900 2/2/4/2/1/1/10/10 160 0 255 0 0
-25 tajima 但馬 6 4 20 70 0 0 chugoku_jomon 64800 2/2/2/1/1/4/10/10 160 0 255 0 0
-26 tango 丹後 6 4 20 60 0 0 chugoku_jomon 38400 2/2/2/2/2/4/10/4 160 0 255 0 0
-27 tanba 丹波 7 4 20 60 0 0 kinki_jomon 74700 2/2/2/2/2/10/4/4 160 0 255 0 0
-28 iyo 伊予 4 4 20 370 0 0 shikoku_jomon 79100 4/2/1/1/1/1/4/10 160 0 255 0 0
-29 tosa 土佐 4 4 20 50 0 0 shikoku_jomon 47200 4/4/1/1/1/1/2/4 160 0 255 0 0
-30 awa 阿波 4 4 20 50 0 0 shikoku_jomon 50500 2/2/1/1/1/1/4/4 160 0 255 0 0
-31 sanuki 讃岐 4 4 20 50 0 0 shikoku_jomon 98800 10/10/2/4/4/4/2/10 160 0 255 0 0
-32 awaji 淡路 7 4 20 70 0 0 kinki_jomon 18700 4/2/2/2/1/2/10/10 160 0 255 0 0
-33 kii 紀伊 7 4 20 440 0 0 kinki_jomon 61500 2/2/2/10/4/4/2/2 160 0 255 0 0
-34 yamato 大和 8 4 20 610 0 0 kinki_jomon 171700 2/2/1/1/1/1/1/2 160 0 255 0 0
-35 kawachi 河内 8 4 20 60 0 0 kinki_jomon 87900 1/1/1/1/1/1/2/1 160 0 255 0 0
-36 yamashiro 山城 8 4 20 60 0 0 kinki_jomon 85700 1/1/1/1/2/2/2/1 160 0 255 0 0
-37 izumi 和泉 8 4 20 60 0 0 kinki_jomon 26400 2/1/1/1/1/1/2/2 160 0 255 0 0
-38 settsu 摂津 8 4 20 60 0 0 kinki_jomon 85700 1/2/1/1/2/4/10/4 160 0 255 0 0
-39 wakasa 若狭 11 4 20 40 0 0 chubu_jomon 23100 2/1/2/1/1/2/4/10 160 0 255 0 0
-40 echizen 越前 11 4 20 40 0 0 chubu_jomon 60400 10/2/1/2/1/1/2/10 160 0 255 0 0
-41 kaga 加賀 11 4 20 270 0 0 chubu_jomon 32900 10/2/1/1/1/1/2/10 160 0 255 0 0
-42 etchu 越中 11 4 20 860 0 0 chubu_jomon 46100 2/4/2/2/2/1/4/10 160 0 255 0 0
-43 noto 能登 11 4 20 270 0 0 chubu_jomon 28600 1/1/1/1/4/4/10/4 160 0 255 0 0
-44 echigo 越後 11 4 20 3290 0 0 chubu_jomon 37300 4/2/2/4/4/4/1/4 160 0 255 0 0
-45 sado 佐渡 11 4 20 470 0 0 chubu_jomon 24200 1/1/1/4/4/4/4/4 160 0 255 0 0
-46 shima 志摩 7 4 20 150 0 0 kinki_jomon 154000 4/2/2/2/1/1/1/4 160 0 255 0 0
-47 ise 伊勢 7 4 20 150 0 0 kinki_jomon 103200 2/2/2/2/1/1/4/10 160 0 255 0 0
-48 iga 伊賀 7 4 20 150 0 0 kinki_jomon 19800 1/1/1/1/1/1/1/4 160 0 255 0 0
-49 owari 尾張 9 4 20 2510 0 0 chubu_jomon 75800 2/2/1/2/1/4/10/2 160 0 255 0 0
-50 mikawa 参河 9 4 20 2510 0 0 chubu_jomon 75800 2/2/2/1/1/4/10/4 160 0 255 0 0
-51 totomi 遠江 9 4 20 570 0 0 chubu_jomon 105400 1/4/2/1/1/2/4/10 160 0 255 0 0
-52 suruga 駿河 9 4 20 570 0 0 chubu_jomon 64800 4/1/1/4/2/4/4/10 160 0 255 0 0
-53 izu 伊豆 9 4 20 560 0 0 chubu_jomon 23100 4/2/2/1/1/1/1/10 160 0 255 0 0
-54 kai 甲斐 10 4 20 440 0 0 chubu_jomon 34000 2/4/2/2/2/2/2/2 160 0 255 0 0
-55 sagami 相模 12 4 20 280 0 0 kanto_jomon 73600 4/4/2/2/1/2/4/10 160 0 255 0 0
-56 musashi 武蔵 12 4 20 2650 0 0 kanto_jomon 130700 4/10/2/2/2/4/4/4 160 0 255 0 0
-57 shimosa 下総 12 4 20 690 0 0 kanto_jomon 99900 4/4/4/2/2/1/1/2 160 0 255 0 0
-58 kazusa 上総 12 4 20 270 0 0 kanto_jomon 83500 2/4/4/2/2/1/1/1 160 0 255 0 0
-59 awa1 安房 12 4 20 270 0 0 kanto_jomon 35100 4/10/2/1/1/1/1/2 160 0 255 0 0
-60 hitachi 常陸 13 4 20 1220 0 0 kanto_jomon 168000 4/10/2/2/2/2/2/2 160 0 255 0 0
-61 omi 近江 7 4 20 150 0 0 kinki_jomon 102100 2/2/2/2/4/4/10/2 160 0 255 0 0
-62 mino 美濃 9 4 20 1360 0 0 chubu_jomon 143900 4/10/2/2/4/10/2/2 160 0 255 0 0
-63 hida 飛騨 10 4 20 1360 0 0 chubu_jomon 14300 4/4/2/2/2/2/2/4 160 0 255 0 0
-64 shinano 信濃 10 4 20 2910 0 0 chubu_jomon 73600 1/1/1/1/1/1/1/1 160 0 255 0 0
-65 kozuke 上野 13 4 20 710 0 0 kanto_jomon 112000 4/4/1/1/2/2/2/4 160 0 255 0 0
-66 shimotsuke 下野 13 4 20 1760 0 0 kanto_jomon 76900 4/4/2/2/2/4/2/4 160 0 255 0 0
-67 fukushima 福島 15 4 20 13870 0 0 tohoku_jomon 206500 2/2/4/4/10/2/2/4 160 2 255 0 0
-68 yamagata 山形 14 4 20 9330 0 0 tohoku_jomon 78000 2/2/2/2/10/4/4/2 160 2 255 0 0
-69 akita 秋田 15 4 20 11610 0 0 tohoku_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-70 miyagi 宮城 16 4 20 7290 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-71 iwate 岩手 16 4 20 15380 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-72 aomori 青森 16 4 20 9610 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0
-73 toraijin_land 渡来人 0 0 0 0 0 0 toraijin 0 1/1/1/1/1/1/1/1 160 3 255 0 255
-74 donan 道南 16 4 20 2960 0 0 hokkaido_jomon 2960 1/1/1/1/1/1/1/1 160 2 255 0 0
-75 dochu 道中 16 4 20 10240 0 0 hokkaido_jomon 10240 1/1/1/1/1/1/1/1 160 2 255 0 0
-76 dohoku 道北 16 4 20 8410 0 0 hokkaido_jomon 8410 1/1/1/1/1/1/1/1 160 2 255 0 0
-77 doto 道東 16 4 20 13620 0 0 hokkaido_jomon 13620 1/1/1/1/1/1/1/1 160 2 255 0 0
-78 habomai 歯舞群島 16 4 20 40 0 0 hokkaido_jomon 40 1/1/1/1/1/1/1/1 160 2 255 0 0
-79 shikotan 色丹島 16 4 20 110 0 0 hokkaido_jomon 110 1/1/1/1/1/1/1/1 160 2 255 0 0
-80 kunashir 国後島 16 4 20 670 0 0 hokkaido_jomon 670 1/1/1/1/1/1/1/1 160 2 255 0 0
-81 iturup 択捉島 16 4 20 1430 0 0 hokkaido_jomon 1430 1/1/1/1/1/1/1/1 160 2 255 0 0
-82 osumi 大隅諸島 1 4 20 410 0 0 southern_islands_jomon 410 1/1/1/1/1/1/1/1 160 1 255 0 0
-83 tokara 吐噶喇列島 1 4 20 40 0 0 southern_islands_jomon 40 1/1/1/1/1/1/1/1 160 1 255 0 0
-84 amami 奄美群島 1 4 20 500 0 0 southern_islands_jomon 500 1/1/1/1/1/1/1/1 160 1 255 0 0
-85 okinawa 沖縄諸島 1 4 20 760 0 0 southern_islands_jomon 760 1/1/1/1/1/1/1/1 160 1 255 0 0
-86 daito 大東諸島 1 4 20 20 0 0 southern_islands_jomon 20 1/1/1/1/1/1/1/1 160 1 255 0 0
-87 sakishima 先島諸島 1 4 20 340 0 0 southern_islands_jomon 340 1/1/1/1/1/1/1/1 160 1 255 0 0
-88 north_izu 北伊豆諸島 1 4 20 0 0 0 kanto_jomon 120 1/1/1/1/1/1/1/1 160 0 255 0 0
-89 south_izu 南伊豆諸島 1 4 20 40 0 0 kanto_jomon 40 1/1/1/1/1/1/1/1 160 0 255 0 0
-90 ogasawara 小笠原諸島 1 4 20 40 0 0 southern_islands_jomon 40 1/1/1/1/1/1/1/1 160 0 255 0 0
\ No newline at end of file
+id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region language_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp
+1 satsuma 薩摩 2 4 20 220 0 0 kyushu_jomon satsuma 38400 1/1/2/4/4/2/4/1 160 1 255 0 0
+2 osumi 大隅 2 4 20 220 0 0 kyushu_jomon osumi 40600 1/2/2/2/4/2/2/2 160 1 255 0 0
+3 hyuga 日向 2 4 20 220 0 0 kyushu_jomon hyuga 30800 10/4/1/1/1/1/1/1 160 1 255 0 0
+4 higo 肥後 2 4 20 2400 0 0 kyushu_jomon higo 108700 10/4/1/1/1/1/1/4 160 1 255 0 0
+5 bungo 豊後 3 4 20 340 0 0 kyushu_jomon bungo 51600 10/4/1/1/1/1/1/2 160 0 255 0 0
+6 chikugo 筑後 3 4 20 480 0 0 kyushu_jomon chikugo 59300 10/10/1/2/2/1/1/2 160 0 255 0 0
+7 hizen 肥前 3 4 20 1210 0 0 kyushu_jomon hizen 48300 4/4/4/4/1/1/1/1 160 0 255 0 0
+8 chikuzen 筑前 3 4 20 480 120 0 kyushu_jomon chikuzen 112000 4/4/1/1/1/1/4/10 160 0 255 0 0
+9 buzen 豊前 3 4 20 420 0 0 kyushu_jomon buzen 47200 10/2/1/1/1/1/1/2 160 0 255 0 0
+10 iki 壱岐 3 4 20 80 0 0 kyushu_jomon iki 12100 4/4/1/1/2/1/1/1 160 0 255 0 0
+11 tsushima 対馬 3 4 20 80 0 0 kyushu_jomon tsushima 9900 1/1/1/4/4/1/1/1 160 0 255 0 0
+12 nagato 長門 5 4 20 50 0 0 chugoku_jomon nagato 43900 2/2/1/1/1/2/10/10 160 0 255 0 0
+13 suo 周防 5 4 20 50 0 0 chugoku_jomon suo 49400 1/1/2/1/1/2/10/10 160 0 255 0 0
+14 aki 安芸 5 4 20 190 0 0 chugoku_jomon aki 69200 1/1/1/2/1/4/10/10 160 0 255 0 0
+15 bingo 備後 5 4 20 190 0 0 chugoku_jomon bingo 71400 1/1/1/1/1/2/10/4 160 0 255 0 0
+16 bitchu 備中 5 4 20 200 0 0 chugoku_jomon bitchu 79100 1/1/1/1/1/2/10/4 160 0 255 0 0
+17 mimasaka 美作 5 4 20 200 0 0 chugoku_jomon mimasaka 70300 2/2/1/2/2/2/1/2 160 0 255 0 0
+18 bizen 備前 5 4 20 180 0 0 chugoku_jomon bizen 56000 2/1/1/1/4/4/10/4 160 0 255 0 0
+19 harima 播磨 7 4 20 70 0 0 kinki_jomon harima 107600 1/1/2/2/2/10/10/4 160 0 255 0 0
+20 iwami 石見 6 4 20 410 0 0 chugoku_jomon iwami 40600 2/2/1/2/1/1/10/10 160 0 255 0 0
+21 izumo 出雲 6 4 20 410 0 0 chugoku_jomon izumo 85700 4/2/2/2/1/1/10/10 160 0 255 0 0
+22 hoki 伯耆 6 4 20 50 0 0 chugoku_jomon hoki 52700 2/2/2/1/1/2/10/10 160 0 255 0 0
+23 oki 隠岐 6 4 20 110 0 0 chugoku_jomon oki 13200 1/1/1/1/10/1/1/1 160 0 255 0 0
+24 inaba 因幡 6 4 20 50 0 0 chugoku_jomon inaba 54900 2/2/4/2/1/1/10/10 160 0 255 0 0
+25 tajima 但馬 6 4 20 70 0 0 chugoku_jomon tajima 64800 2/2/2/1/1/4/10/10 160 0 255 0 0
+26 tango 丹後 6 4 20 60 0 0 chugoku_jomon tango 38400 2/2/2/2/2/4/10/4 160 0 255 0 0
+27 tanba 丹波 7 4 20 60 0 0 kinki_jomon tanba 74700 2/2/2/2/2/10/4/4 160 0 255 0 0
+28 iyo 伊予 4 4 20 370 0 0 shikoku_jomon iyo 79100 4/2/1/1/1/1/4/10 160 0 255 0 0
+29 tosa 土佐 4 4 20 50 0 0 shikoku_jomon tosa 47200 4/4/1/1/1/1/2/4 160 0 255 0 0
+30 awa 阿波 4 4 20 50 0 0 shikoku_jomon awa 50500 2/2/1/1/1/1/4/4 160 0 255 0 0
+31 sanuki 讃岐 4 4 20 50 0 0 shikoku_jomon sanuki 98800 10/10/2/4/4/4/2/10 160 0 255 0 0
+32 awaji 淡路 7 4 20 70 0 0 kinki_jomon awaji 18700 4/2/2/2/1/2/10/10 160 0 255 0 0
+33 kii 紀伊 7 4 20 440 0 0 kinki_jomon kii 61500 2/2/2/10/4/4/2/2 160 0 255 0 0
+34 yamato 大和 8 4 20 610 0 0 kinki_jomon yamato 171700 2/2/1/1/1/1/1/2 160 0 255 0 0
+35 kawachi 河内 8 4 20 60 0 0 kinki_jomon kawachi 87900 1/1/1/1/1/1/2/1 160 0 255 0 0
+36 yamashiro 山城 8 4 20 60 0 0 kinki_jomon yamashiro 85700 1/1/1/1/2/2/2/1 160 0 255 0 0
+37 izumi 和泉 8 4 20 60 0 0 kinki_jomon izumi 26400 2/1/1/1/1/1/2/2 160 0 255 0 0
+38 settsu 摂津 8 4 20 60 0 0 kinki_jomon settsu 85700 1/2/1/1/2/4/10/4 160 0 255 0 0
+39 wakasa 若狭 11 4 20 40 0 0 chubu_jomon wakasa 23100 2/1/2/1/1/2/4/10 160 0 255 0 0
+40 echizen 越前 11 4 20 40 0 0 chubu_jomon echizen 60400 10/2/1/2/1/1/2/10 160 0 255 0 0
+41 kaga 加賀 11 4 20 270 0 0 chubu_jomon kaga 32900 10/2/1/1/1/1/2/10 160 0 255 0 0
+42 etchu 越中 11 4 20 860 0 0 chubu_jomon etchu 46100 2/4/2/2/2/1/4/10 160 0 255 0 0
+43 noto 能登 11 4 20 270 0 0 chubu_jomon noto 28600 1/1/1/1/4/4/10/4 160 0 255 0 0
+44 echigo 越後 11 4 20 3290 0 0 chubu_jomon echigo 37300 4/2/2/4/4/4/1/4 160 0 255 0 0
+45 sado 佐渡 11 4 20 470 0 0 chubu_jomon sado 24200 1/1/1/4/4/4/4/4 160 0 255 0 0
+46 shima 志摩 7 4 20 150 0 0 kinki_jomon shima 154000 4/2/2/2/1/1/1/4 160 0 255 0 0
+47 ise 伊勢 7 4 20 150 0 0 kinki_jomon ise 103200 2/2/2/2/1/1/4/10 160 0 255 0 0
+48 iga 伊賀 7 4 20 150 0 0 kinki_jomon iga 19800 1/1/1/1/1/1/1/4 160 0 255 0 0
+49 owari 尾張 9 4 20 2510 0 0 chubu_jomon owari 75800 2/2/1/2/1/4/10/2 160 0 255 0 0
+50 mikawa 参河 9 4 20 2510 0 0 chubu_jomon mikawa 75800 2/2/2/1/1/4/10/4 160 0 255 0 0
+51 totomi 遠江 9 4 20 570 0 0 chubu_jomon totomi 105400 1/4/2/1/1/2/4/10 160 0 255 0 0
+52 suruga 駿河 9 4 20 570 0 0 chubu_jomon suruga 64800 4/1/1/4/2/4/4/10 160 0 255 0 0
+53 izu 伊豆 9 4 20 560 0 0 chubu_jomon izu 23100 4/2/2/1/1/1/1/10 160 0 255 0 0
+54 kai 甲斐 10 4 20 440 0 0 chubu_jomon kai 34000 2/4/2/2/2/2/2/2 160 0 255 0 0
+55 sagami 相模 12 4 20 280 0 0 kanto_jomon sagami 73600 4/4/2/2/1/2/4/10 160 0 255 0 0
+56 musashi 武蔵 12 4 20 2650 0 0 kanto_jomon musashi 130700 4/10/2/2/2/4/4/4 160 0 255 0 0
+57 shimosa 下総 12 4 20 690 0 0 kanto_jomon shimosa 99900 4/4/4/2/2/1/1/2 160 0 255 0 0
+58 kazusa 上総 12 4 20 270 0 0 kanto_jomon kazusa 83500 2/4/4/2/2/1/1/1 160 0 255 0 0
+59 awa1 安房 12 4 20 270 0 0 kanto_jomon awa1 35100 4/10/2/1/1/1/1/2 160 0 255 0 0
+60 hitachi 常陸 13 4 20 1220 0 0 kanto_jomon hitachi 168000 4/10/2/2/2/2/2/2 160 0 255 0 0
+61 omi 近江 7 4 20 150 0 0 kinki_jomon omi 102100 2/2/2/2/4/4/10/2 160 0 255 0 0
+62 mino 美濃 9 4 20 1360 0 0 chubu_jomon mino 143900 4/10/2/2/4/10/2/2 160 0 255 0 0
+63 hida 飛騨 10 4 20 1360 0 0 chubu_jomon hida 14300 4/4/2/2/2/2/2/4 160 0 255 0 0
+64 shinano 信濃 10 4 20 2910 0 0 chubu_jomon shinano 73600 1/1/1/1/1/1/1/1 160 0 255 0 0
+65 kozuke 上野 13 4 20 710 0 0 kanto_jomon kozuke 112000 4/4/1/1/2/2/2/4 160 0 255 0 0
+66 shimotsuke 下野 13 4 20 1760 0 0 kanto_jomon shimotsuke 76900 4/4/2/2/2/4/2/4 160 0 255 0 0
+67 fukushima 福島 15 4 20 13870 0 0 tohoku_jomon fukushima 206500 2/2/4/4/10/2/2/4 160 2 255 0 0
+68 yamagata 山形 14 4 20 9330 0 0 tohoku_jomon yamagata 78000 2/2/2/2/10/4/4/2 160 2 255 0 0
+69 akita 秋田 15 4 20 11610 0 0 tohoku_jomon akita 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+70 miyagi 宮城 16 4 20 7290 0 0 hokkaido_jomon miyagi 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+71 iwate 岩手 16 4 20 15380 0 0 hokkaido_jomon iwate 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+72 aomori 青森 16 4 20 9610 0 0 hokkaido_jomon aomori 0 1/1/1/1/1/1/1/1 160 2 255 0 0
+73 toraijin_land 渡来人 0 0 0 0 0 0 toraijin toraijin_land 0 1/1/1/1/1/1/1/1 160 3 0 255 255
+74 donan 道南 16 4 20 2960 0 0 hokkaido_jomon donan 2960 1/1/1/1/1/1/1/1 160 2 255 0 0
+75 dochu 道中 16 4 20 10240 0 0 hokkaido_jomon dochu 10240 1/1/1/1/1/1/1/1 160 2 255 0 0
+76 dohoku 道北 16 4 20 8410 0 0 hokkaido_jomon dohoku 8410 1/1/1/1/1/1/1/1 160 2 255 0 0
+77 doto 道東 16 4 20 13620 0 0 hokkaido_jomon doto 13620 1/1/1/1/1/1/1/1 160 2 255 0 0
+78 habomai 歯舞群島 16 4 20 40 0 0 hokkaido_jomon habomai 40 1/1/1/1/1/1/1/1 160 2 255 0 0
+79 shikotan 色丹島 16 4 20 110 0 0 hokkaido_jomon shikotan 110 1/1/1/1/1/1/1/1 160 2 255 0 0
+80 kunashir 国後島 16 4 20 670 0 0 hokkaido_jomon kunashir 670 1/1/1/1/1/1/1/1 160 2 255 0 0
+81 iturup 択捉島 16 4 20 1430 0 0 hokkaido_jomon iturup 1430 1/1/1/1/1/1/1/1 160 2 255 0 0
+82 osumi 大隅諸島 1 4 20 410 0 0 southern_islands_jomon osumi 410 1/1/1/1/1/1/1/1 160 1 255 0 0
+83 tokara 吐噶喇列島 1 4 20 40 0 0 southern_islands_jomon tokara 40 1/1/1/1/1/1/1/1 160 1 255 0 0
+84 amami 奄美群島 1 4 20 500 0 0 southern_islands_jomon amami 500 1/1/1/1/1/1/1/1 160 1 255 0 0
+85 okinawa 沖縄諸島 1 4 20 760 0 0 southern_islands_jomon okinawa 760 1/1/1/1/1/1/1/1 160 1 255 0 0
+86 daito 大東諸島 1 4 20 20 0 0 southern_islands_jomon daito 20 1/1/1/1/1/1/1/1 160 1 255 0 0
+87 sakishima 先島諸島 1 4 20 340 0 0 southern_islands_jomon sakishima 340 1/1/1/1/1/1/1/1 160 1 255 0 0
+88 north_izu 北伊豆諸島 1 4 20 0 0 0 kanto_jomon north_izu 120 1/1/1/1/1/1/1/1 160 0 255 0 0
+89 south_izu 南伊豆諸島 1 4 20 40 0 0 kanto_jomon south_izu 40 1/1/1/1/1/1/1/1 160 0 255 0 0
+90 ogasawara 小笠原諸島 1 4 20 40 0 0 southern_islands_jomon ogasawara 40 1/1/1/1/1/1/1/1 160 0 255 0 0
diff --git a/Data/Simulations/Yaponesia/Language.tsv b/Data/Simulations/Yaponesia/Language.tsv
new file mode 100644
index 000000000..cd074fdd4
--- /dev/null
+++ b/Data/Simulations/Yaponesia/Language.tsv
@@ -0,0 +1,91 @@
+language_region language_dist
+satsuma satsuma/1
+osumi osumi/1
+hyuga hyuga/1
+higo higo/1
+bungo bungo/1
+chikugo chikugo/1
+hizen hizen/1
+chikuzen chikuzen/1
+buzen buzen/1
+iki iki/1
+tsushima tsushima/1
+nagato nagato/1
+suo suo/1
+aki aki/1
+bingo bingo/1
+bitchu bitchu/1
+mimasaka mimasaka/1
+bizen bizen/1
+harima harima/1
+iwami iwami/1
+izumo izumo/1
+hoki hoki/1
+oki oki/1
+inaba inaba/1
+tajima tajima/1
+tango tango/1
+tanba tanba/1
+iyo iyo/1
+tosa tosa/1
+awa awa/1
+sanuki sanuki/1
+awaji awaji/1
+kii kii/1
+yamato yamato/1
+kawachi kawachi/1
+yamashiro yamashiro/1
+izumi izumi/1
+settsu settsu/1
+wakasa wakasa/1
+echizen echizen/1
+kaga kaga/1
+etchu etchu/1
+noto noto/1
+echigo echigo/1
+sado sado/1
+shima shima/1
+ise ise/1
+iga iga/1
+owari owari/1
+mikawa mikawa/1
+totomi totomi/1
+suruga suruga/1
+izu izu/1
+kai kai/1
+sagami sagami/1
+musashi musashi/1
+shimosa shimosa/1
+kazusa kazusa/1
+awa1 awa1/1
+hitachi hitachi/1
+omi omi/1
+mino mino/1
+hida hida/1
+shinano shinano/1
+kozuke kozuke/1
+shimotsuke shimotsuke/1
+fukushima fukushima/1
+yamagata yamagata/1
+akita akita/1
+miyagi miyagi/1
+iwate iwate/1
+aomori aomori/1
+toraijin_land toraijin_land/1
+donan donan/1
+dochu dochu/1
+dohoku dohoku/1
+doto doto/1
+habomai habomai/1
+shikotan shikotan/1
+kunashir kunashir/1
+iturup iturup/1
+osumi osumi/1
+tokara tokara/1
+amami amami/1
+okinawa okinawa/1
+daito daito/1
+sakishima sakishima/1
+north_izu north_izu/1
+south_izu south_izu/1
+ogasawara ogasawara/1
diff --git a/Data/Simulations/Yaponesia/Language_List.tsv b/Data/Simulations/Yaponesia/Language_List.tsv
new file mode 100644
index 000000000..1048c3b8c
--- /dev/null
+++ b/Data/Simulations/Yaponesia/Language_List.tsv
@@ -0,0 +1,91 @@
+language
+satsuma
+osumi
+hyuga
+higo
+bungo
+chikugo
+hizen
+chikuzen
+buzen
+iki
+tsushima
+nagato
+suo
+aki
+bingo
+bitchu
+mimasaka
+bizen
+harima
+iwami
+izumo
+hoki
+oki
+inaba
+tajima
+tango
+tanba
+iyo
+tosa
+awa
+sanuki
+awaji
+kii
+yamato
+kawachi
+yamashiro
+izumi
+settsu
+wakasa
+echizen
+kaga
+etchu
+noto
+echigo
+sado
+shima
+ise
+iga
+owari
+mikawa
+totomi
+suruga
+izu
+kai
+sagami
+musashi
+shimosa
+kazusa
+awa1
+hitachi
+omi
+mino
+hida
+shinano
+kozuke
+shimotsuke
+fukushima
+yamagata
+akita
+miyagi
+iwate
+aomori
+toraijin_land
+donan
+dochu
+dohoku
+doto
+habomai
+shikotan
+kunashir
+iturup
+osumi
+tokara
+amami
+okinawa
+daito
+sakishima
+north_izu
+south_izu
+ogasawara
diff --git a/Data/Simulations/Yaponesia/Settings.tsv b/Data/Simulations/Yaponesia/Settings.tsv
index e1aa34fd8..e4a17a5aa 100644
--- a/Data/Simulations/Yaponesia/Settings.tsv
+++ b/Data/Simulations/Yaponesia/Settings.tsv
@@ -5,6 +5,7 @@ steps_per_year 12 1年あたりのStepの数(step/年)
output_step_frequency 120 何Stepおきに出力するか?(step)
immigration_start_steps 1801 渡来開始Step数目(step)
immigration_end_steps 21600 渡来終了Step数目(step)
+immigration_step_interval 12 渡来のステップ間隔 (step)
init_lifespan_grace_period 180 初期化時の寿命までの最低Step間隔(step)
#Space -------------------- #空間 --------------------------------------------------
area Japan シミュレーションの対象範囲
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_908_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_379.bin
new file mode 100644
index 000000000..bbd602ea9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_908_381.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_381.bin
new file mode 100644
index 000000000..3c2e547aa
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_381.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_908_382.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_382.bin
new file mode 100644
index 000000000..4ef16a499
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_908_382.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_909_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_377.bin
new file mode 100644
index 000000000..23ea263e0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_909_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_378.bin
new file mode 100644
index 000000000..471ec3b1c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_909_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_379.bin
new file mode 100644
index 000000000..82265ebfb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_909_382.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_382.bin
new file mode 100644
index 000000000..2cae4c999
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_909_382.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_376.bin
new file mode 100644
index 000000000..b9cc7874f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_377.bin
new file mode 100644
index 000000000..a4045602c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_378.bin
new file mode 100644
index 000000000..017ee219d
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_378.bin
@@ -0,0 +1 @@
+^/(#j
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_379.bin
new file mode 100644
index 000000000..e860b4313
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_380.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_380.bin
new file mode 100644
index 000000000..6a3339b27
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_380.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_381.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_381.bin
new file mode 100644
index 000000000..14aceb403
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_381.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_910_382.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_382.bin
new file mode 100644
index 000000000..f1195288d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_910_382.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_374.bin
new file mode 100644
index 000000000..26605e416
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_374.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_375.bin
new file mode 100644
index 000000000..b6c274771
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_376.bin
new file mode 100644
index 000000000..908d289cb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_377.bin
new file mode 100644
index 000000000..672d01161
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_378.bin
new file mode 100644
index 000000000..36e53a78c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_379.bin
new file mode 100644
index 000000000..d6d09c908
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_380.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_380.bin
new file mode 100644
index 000000000..7c6bd4568
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_380.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_381.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_381.bin
new file mode 100644
index 000000000..bc70cbb9e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_381.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_911_382.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_382.bin
new file mode 100644
index 000000000..5ba27df3f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_911_382.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_366.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_366.bin
new file mode 100644
index 000000000..63d4f4a24
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_366.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_375.bin
new file mode 100644
index 000000000..d2804ae6e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_376.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_376.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_377.bin
new file mode 100644
index 000000000..1fca47233
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_378.bin
new file mode 100644
index 000000000..c90fabdcf
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_379.bin
new file mode 100644
index 000000000..18d18a98e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_380.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_380.bin
new file mode 100644
index 000000000..1d13c3446
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_380.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_912_381.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_381.bin
new file mode 100644
index 000000000..cd5413cbc
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_912_381.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_363.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_363.bin
new file mode 100644
index 000000000..452e3adeb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_363.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_366.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_366.bin
new file mode 100644
index 000000000..0cac8f8eb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_366.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_367.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_367.bin
new file mode 100644
index 000000000..f903e3514
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_367.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_370.bin
new file mode 100644
index 000000000..0536df63d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_373.bin
new file mode 100644
index 000000000..7245ce1ba
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_373.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_375.bin
new file mode 100644
index 000000000..f882b3ccd
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_376.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_376.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_377.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_377.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_378.bin
new file mode 100644
index 000000000..503793079
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_380.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_380.bin
new file mode 100644
index 000000000..1b9eeeb77
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_380.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_913_381.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_381.bin
new file mode 100644
index 000000000..7ece2dfe3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_913_381.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_336.bin
new file mode 100644
index 000000000..ed023c3e0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_336.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_337.bin
new file mode 100644
index 000000000..ccf6ea499
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_337.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_338.bin
new file mode 100644
index 000000000..d2c618af1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_338.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_339.bin
new file mode 100644
index 000000000..9e9adbb2c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_339.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_366.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_366.bin
new file mode 100644
index 000000000..4e426b604
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_366.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_367.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_367.bin
new file mode 100644
index 000000000..125e30008
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_367.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_368.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_368.bin
new file mode 100644
index 000000000..cbfe715bc
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_368.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_370.bin
new file mode 100644
index 000000000..454719f65
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_371.bin
new file mode 100644
index 000000000..6333af610
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_372.bin
new file mode 100644
index 000000000..529cd3aec
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_372.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_373.bin
new file mode 100644
index 000000000..2d695d4ba
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_373.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_374.bin
new file mode 100644
index 000000000..8dc256cc2
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_374.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_375.bin
new file mode 100644
index 000000000..1f0301836
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_376.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_376.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_377.bin
new file mode 100644
index 000000000..4cb75f5fa
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_914_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_378.bin
new file mode 100644
index 000000000..ad1a34475
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_914_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_331.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_331.bin
new file mode 100644
index 000000000..bdc1e84bd
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_331.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_332.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_332.bin
new file mode 100644
index 000000000..ad2d2405c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_332.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_333.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_333.bin
new file mode 100644
index 000000000..9ce79d7f9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_333.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_334.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_334.bin
new file mode 100644
index 000000000..182aee70d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_334.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_335.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_335.bin
new file mode 100644
index 000000000..27dfbc9d8
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_335.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_336.bin
new file mode 100644
index 000000000..84c8bdb81
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_336.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_337.bin
new file mode 100644
index 000000000..738d54090
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_337.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_338.bin
new file mode 100644
index 000000000..b36ec2cee
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_338.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_339.bin
new file mode 100644
index 000000000..8ea001cd3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_339.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_340.bin
new file mode 100644
index 000000000..d0586ab63
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_340.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_351.bin
new file mode 100644
index 000000000..8b793edfe
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_351.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_352.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_352.bin
new file mode 100644
index 000000000..76c854878
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_352.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_353.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_353.bin
new file mode 100644
index 000000000..ad4e10dfc
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_353.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_357.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_357.bin
new file mode 100644
index 000000000..809904491
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_357.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_358.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_358.bin
new file mode 100644
index 000000000..7c4c3fc4d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_358.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_359.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_359.bin
new file mode 100644
index 000000000..495408dea
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_359.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_360.bin
new file mode 100644
index 000000000..db9270378
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_360.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_361.bin
new file mode 100644
index 000000000..c75bd383f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_361.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_362.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_362.bin
new file mode 100644
index 000000000..27a7d1f78
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_362.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_363.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_363.bin
new file mode 100644
index 000000000..3115f812d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_363.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_364.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_364.bin
new file mode 100644
index 000000000..e55d4ca15
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_364.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_366.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_366.bin
new file mode 100644
index 000000000..225f7cc12
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_366.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_367.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_367.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_367.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_368.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_368.bin
new file mode 100644
index 000000000..aca29e123
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_368.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_369.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_369.bin
new file mode 100644
index 000000000..b57c261f9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_369.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_370.bin
new file mode 100644
index 000000000..684a3f870
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_371.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_371.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_372.bin
new file mode 100644
index 000000000..5d2d3bdf3
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_372.bin
@@ -0,0 +1 @@
+g!//4799;==>?AAABCCCDDDDDDDEEEEEEEEEEFHHHJNPSUWWY[\\^_``cccdfffgggghhhhhhhhhhhgggggggfddddccbb```_^^^^^^^^^^_``cgjknrrstuuuvvwxxxxxyyyyyyyyyyyyyzzzz
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_373.bin
new file mode 100644
index 000000000..088fb4d40
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_373.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_374.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_375.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_376.bin
new file mode 100644
index 000000000..19ce9c172
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_377.bin
new file mode 100644
index 000000000..bc7333a4f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_915_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_378.bin
new file mode 100644
index 000000000..97d24b01e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_915_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_327.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_327.bin
new file mode 100644
index 000000000..0d0d98408
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_327.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_330.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_330.bin
new file mode 100644
index 000000000..a9809eebe
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_330.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_331.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_331.bin
new file mode 100644
index 000000000..a74e36852
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_331.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_332.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_332.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_332.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_333.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_333.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_333.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_334.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_334.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_334.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_335.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_335.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_335.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_336.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_336.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_337.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_337.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_338.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_338.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_339.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_339.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_340.bin
new file mode 100644
index 000000000..af2f09fd5
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_340.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_341.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_341.bin
new file mode 100644
index 000000000..ede3b9075
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_341.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_342.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_342.bin
new file mode 100644
index 000000000..900b906a1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_342.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_343.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_343.bin
new file mode 100644
index 000000000..f1762cc18
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_343.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_344.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_344.bin
new file mode 100644
index 000000000..740d6c179
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_344.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_345.bin
new file mode 100644
index 000000000..d856b0179
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_345.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_346.bin
new file mode 100644
index 000000000..845face09
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_346.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_347.bin
new file mode 100644
index 000000000..69e46cdb5
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_347.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_348.bin
new file mode 100644
index 000000000..3f49f6966
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_348.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_349.bin
new file mode 100644
index 000000000..14f72b158
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_349.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_350.bin
new file mode 100644
index 000000000..271e3df02
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_351.bin
new file mode 100644
index 000000000..f67c0f5af
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_351.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_352.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_352.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_352.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_353.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_353.bin
new file mode 100644
index 000000000..292a6794d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_353.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_354.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_354.bin
new file mode 100644
index 000000000..481cba845
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_354.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_355.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_355.bin
new file mode 100644
index 000000000..9f995635a
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_355.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_356.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_356.bin
new file mode 100644
index 000000000..da8f5aac1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_356.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_357.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_357.bin
new file mode 100644
index 000000000..84b0fc604
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_357.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_358.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_358.bin
new file mode 100644
index 000000000..914d4aed9
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_358.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_359.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_359.bin
new file mode 100644
index 000000000..cf288b25a
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_359.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_360.bin
new file mode 100644
index 000000000..3ea506ff2
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_360.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_361.bin
new file mode 100644
index 000000000..914d4aed9
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_361.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_362.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_362.bin
new file mode 100644
index 000000000..fc462ad6a
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_362.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_363.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_363.bin
new file mode 100644
index 000000000..9e3303881
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_363.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_364.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_364.bin
new file mode 100644
index 000000000..cfb4e787d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_364.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_366.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_366.bin
new file mode 100644
index 000000000..29ce52eeb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_366.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_367.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_367.bin
new file mode 100644
index 000000000..673426024
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_367.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_368.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_368.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_368.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_369.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_369.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_369.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_370.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_370.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_371.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_371.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_372.bin
new file mode 100644
index 000000000..0289e65ae
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_372.bin
@@ -0,0 +1 @@
+9!
#&&).1122223333555566666666667777777777777788999:<<<=>>@AAABBBDDDDDEEEEEEGGGGHIIIKLLMMOOPRRSTVVVWWWXXXZZZZZZZZ[[[[[[\\\]]]^^__aaabccefgghjmu}~~|{zzzxwwwwwwwwx
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_373.bin
new file mode 100644
index 000000000..f6a246298
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_373.bin
@@ -0,0 +1 @@
+z{{{|~~~~~~~~~~}||{{zzxxwwvttsrqqpommllkkkiiiiiiikkkkkkkklllllmmmmooppqqqrrsstvwwx{{{|~~~~~~~}}|{{ywppjiiiiiiijjjjlllllmmmmmmmmmmmmmmmmmlllllllllljjjjjjjjjjjkllllmmmnpppqqrrsttttttu/Uu.Ru,Ou,Ou+Lw(Jw(Jw(Hw&Gx%Fx%Fx%Dx%Cy#By"By! B{#A{#A|&@}'@}*@}*@,?.?2?2????????@AAABCCFGHHHJJJJJJJJHHHHGGGFFFD
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_374.bin
new file mode 100644
index 000000000..170ab7e3c
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_374.bin
@@ -0,0 +1 @@
+CCCBBBBAAA@@@@???????====<<<;;99998876665444211100..---,,,,********)))''&&%%#"!!
!""%()*,--024468;<??@AAAAAAAAA@@??==<<;
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_375.bin
new file mode 100644
index 000000000..e1046aa4c
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_375.bin
@@ -0,0 +1 @@
+;=??ACDDFGHHJJJKKKKKKKKKKKKKKKKKKKKKJJJJJJHHHGGFFFDDDCCCCCCCCCCCDDDDDDDFFFFFGGGGHHHHJJJJJJJJJJJJJJJHHHHHHGGGGGGGGGGGGGGGGGGGGGGGHHHHHJJJJKKLLLNNNNOOQQRRRSSSUVVVWWWYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\]^^^aabdddeeeefffffffffeeeeeedddcbaaa````^^^]]\\ZZZZZYY
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_376.bin
new file mode 100644
index 000000000..059f04eb9
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_376.bin
@@ -0,0 +1 @@
+XWWVVUUSRRRQONNNLLKJHHGFCCB==9,**)'''&'''''')***,..26889<=?@AABCCCDDDDDDDDDDDDDDDFFFFGGGGHHHJJJJJJJHHHHHHJJKLLLNNNNNNNNNNNNKKJGFFDCBBA@??===<<;;;;9987776554211-+*)&%%%##%%&&&'''))******,++&A
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_377.bin
new file mode 100644
index 000000000..d5611bc71
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_377.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_916_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_378.bin
new file mode 100644
index 000000000..12d1aa223
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_916_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_326.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_326.bin
new file mode 100644
index 000000000..0027164bc
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_326.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_327.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_327.bin
new file mode 100644
index 000000000..cb1b5a8ee
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_327.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_328.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_328.bin
new file mode 100644
index 000000000..06f911209
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_328.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_329.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_329.bin
new file mode 100644
index 000000000..f16cc5c9a
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_329.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_330.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_330.bin
new file mode 100644
index 000000000..f6031841c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_330.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_331.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_331.bin
new file mode 100644
index 000000000..3a8dfe03f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_331.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_332.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_332.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_332.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_333.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_333.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_333.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_334.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_334.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_334.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_335.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_335.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_335.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_336.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_336.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_337.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_337.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_338.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_338.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_339.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_339.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_340.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_340.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_341.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_341.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_341.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_342.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_342.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_342.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_343.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_343.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_343.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_344.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_344.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_344.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_345.bin
new file mode 100644
index 000000000..3576e0d06
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_345.bin
@@ -0,0 +1 @@
+
)7:>DORW[]hnqtnlkjihgfe`Y??>>>>>=========>>?@ABDDEEEEEEEDDDCCCBAA@??>>==<<;;:99988765
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_346.bin
new file mode 100644
index 000000000..339dd0af0
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_346.bin
@@ -0,0 +1,2 @@
+30-($!
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_347.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_347.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_348.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_348.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_349.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_349.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_350.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_350.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_351.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_351.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_352.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_352.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_352.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_353.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_353.bin
new file mode 100644
index 000000000..0e2b01924
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_353.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_354.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_354.bin
new file mode 100644
index 000000000..d2d8978b7
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_354.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_355.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_355.bin
new file mode 100644
index 000000000..1a839f288
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_355.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_356.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_356.bin
new file mode 100644
index 000000000..66cc517d8
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_356.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_357.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_357.bin
new file mode 100644
index 000000000..044a3a1e0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_357.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_358.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_358.bin
new file mode 100644
index 000000000..9cb22ca94
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_358.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_359.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_359.bin
new file mode 100644
index 000000000..914d4aed9
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_359.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_360.bin
new file mode 100644
index 000000000..914d4aed9
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_360.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_361.bin
new file mode 100644
index 000000000..c6568b091
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_361.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_362.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_362.bin
new file mode 100644
index 000000000..dc1f689b3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_362.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_367.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_367.bin
new file mode 100644
index 000000000..e615ed97e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_367.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_368.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_368.bin
new file mode 100644
index 000000000..6613956a3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_368.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_369.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_369.bin
new file mode 100644
index 000000000..bd464f1d1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_369.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_370.bin
new file mode 100644
index 000000000..7f0194ee6
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_370.bin
@@ -0,0 +1,2 @@
+!!!##$$&(,,7<<<<=============<<<<<;;;::99:::;<=>ABBDDEEEEEEEEEEDDDBBBBAAAAABBBDEEFHHIKLLLMMMOOPPPPPQQQQQQSSSSSSTTTVVWWXZZ[\^^_____KIIGE
+DDBAA@>
>
>
=<::9 9 9 9"9&::<<;<<;:8777643310.+&$$KN
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_371.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_371.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_372.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_372.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_373.bin
new file mode 100644
index 000000000..9838cfc83
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_373.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_374.bin
new file mode 100644
index 000000000..b086574d4
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_374.bin
@@ -0,0 +1,3 @@
+
+
###$&&&'''''''&&&&$$$#####!!!
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_375.bin
new file mode 100644
index 000000000..eff6d014d
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_375.bin
@@ -0,0 +1 @@
+U
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_376.bin
new file mode 100644
index 000000000..df4c3422f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_376.bin
@@ -0,0 +1 @@
+G
,66=DGGKPPQSVVWXZZ\^__abbbceefgijjkkllmmmnnnpppppqqqqqqqqqqmq mp mp
jq
jq
jq
jqhrdtav^xY}NN $
0
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_377.bin
new file mode 100644
index 000000000..e9512e9b7
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_377.bin
@@ -0,0 +1,4 @@
+
+
+
!!!!!!!!!!!!!!
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_378.bin
new file mode 100644
index 000000000..68fb985cf
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_917_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_379.bin
new file mode 100644
index 000000000..d1164f166
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_917_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_326.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_326.bin
new file mode 100644
index 000000000..f8db5e2ec
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_326.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_327.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_327.bin
new file mode 100644
index 000000000..30d8575b4
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_327.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_328.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_328.bin
new file mode 100644
index 000000000..9099bb03d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_328.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_329.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_329.bin
new file mode 100644
index 000000000..fcf7508a9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_329.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_330.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_330.bin
new file mode 100644
index 000000000..3bcc5cbc6
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_330.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_331.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_331.bin
new file mode 100644
index 000000000..99bf613b6
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_331.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_332.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_332.bin
new file mode 100644
index 000000000..6d379eccd
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_332.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_333.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_333.bin
new file mode 100644
index 000000000..533805afd
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_333.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_334.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_334.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_334.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_335.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_335.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_335.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_336.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_336.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_337.bin
new file mode 100644
index 000000000..70437a0a9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_337.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_338.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_338.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_339.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_339.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_340.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_340.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_341.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_341.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_341.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_342.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_342.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_342.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_343.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_343.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_343.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_344.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_344.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_344.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_345.bin
new file mode 100644
index 000000000..fba96e51c
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_345.bin
@@ -0,0 +1 @@
+!#aj$]f&X`,T]/O"Z3J&X6E)W7B-U9?/T;<2R=:4P?76OA49NB2<KD+DHF$LEC@=:62))'&$"" /
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_346.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_346.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_347.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_347.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_348.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_348.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_349.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_349.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_350.bin
new file mode 100644
index 000000000..d6d8f11b3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_351.bin
new file mode 100644
index 000000000..067697479
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_351.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_352.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_352.bin
new file mode 100644
index 000000000..e0d906907
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_352.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_353.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_353.bin
new file mode 100644
index 000000000..aa5f893d8
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_353.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_358.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_358.bin
new file mode 100644
index 000000000..a4acff275
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_358.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_359.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_359.bin
new file mode 100644
index 000000000..44abb3fc4
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_359.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_360.bin
new file mode 100644
index 000000000..5f702e9e2
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_360.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_361.bin
new file mode 100644
index 000000000..0fba752ea
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_361.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_369.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_369.bin
new file mode 100644
index 000000000..72f68fa72
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_369.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_370.bin
new file mode 100644
index 000000000..4ce72b8d9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_371.bin
new file mode 100644
index 000000000..359ef4ce4
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_371.bin
@@ -0,0 +1 @@
+;;::8876664443333333333334;;>?AAABBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCBBBBBBAAAAAAAAAABEEFGIILMNNQRSTUWWXY[[[\]]___________`````````````````````````________`````bbbbcccdddfffgggghhhhhjjjjjhhhhgfccQMLLJJJJJJJJJJJJJLLLLLLMMMMMNNNNPPPQQQRRRRSSSTTTUUUUWWWWXXXXYY
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_372.bin
new file mode 100644
index 000000000..376a3e697
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_372.bin
@@ -0,0 +1 @@
+YYYYY[[[[[[[\\\\\\]]]]]]__________`````bbbbbcccccccccccccccccccccccccccccccccccdffghjjknooqrrssssssssrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqooonnnmkkkkkkjjjjjjjjkkkmnooqr:Nr7Lr7Ls2
Js1Is1Is/Gu+Fu*Cu*Cu(Bu%!Au$$?u$$?u *=v3:w3:x;7 ! !!!"$%%&&''((()++,,,--///00011113333333444666667777777
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_373.bin
new file mode 100644
index 000000000..1a3d020e3
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_373.bin
@@ -0,0 +1 @@
+7777777777766444331/--+(''&%$""""!"""$$$%&))-0133333333333334444444444666677778888888888764431--)%
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_374.bin
new file mode 100644
index 000000000..9c23c3e37
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_374.bin
@@ -0,0 +1,8 @@
+g
_\#w[&]
+[&]
+X,W!W0S"W1R"W1R"U5N$U7K%U9H&U:G&U;E'U<C(U=B(U>@)U>@)W==+W==+W>;,W>;,W?9-W@8-W@6/WB30WB30UE11UE11TG
+3TG
+3SJ
3RL 4QO7QP7PJJG;77632220///--,,++)(('&%%$#""!!
+
+m
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_375.bin
new file mode 100644
index 000000000..f4accb49f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_375.bin
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_376.bin
new file mode 100644
index 000000000..07a6e670d
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_376.bin
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
!!! !""#""!
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_377.bin
new file mode 100644
index 000000000..eadaa89b5
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_377.bin
@@ -0,0 +1,4 @@
+[
+
+
+
"#$$%'((())++,,,,----///////0002223333444666677788:::;;;;;;==>
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_378.bin
new file mode 100644
index 000000000..59485211b
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_378.bin
@@ -0,0 +1,2 @@
+>??AABCEGIMMPRSSUUWWXXXXXXXXXXXWWWWWWWWWWWWXXXYYY[[\\]__bcffghjjkkkkmmmmnnnnnnmmmmmmmmmmmmmmmmnnnnnoooooqqrrrsssuuvwxyyz|~~|qkifddccaaa`__^]]\\\\[[[[YYYXXXXWWWWVVVUUTTTRRRQPPOMLLKKJJIGFFECCBA????>=<::87776433310//--,+))(''&%$$"!
+
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_918_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_379.bin
new file mode 100644
index 000000000..7f087e192
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_918_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_331.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_331.bin
new file mode 100644
index 000000000..62ce31a2c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_331.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_332.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_332.bin
new file mode 100644
index 000000000..bc14f4f00
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_332.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_333.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_333.bin
new file mode 100644
index 000000000..801f01152
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_333.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_334.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_334.bin
new file mode 100644
index 000000000..f4c07b6aa
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_334.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_335.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_335.bin
new file mode 100644
index 000000000..63159e897
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_335.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_336.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_336.bin
new file mode 100644
index 000000000..f463bf7d2
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_336.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_337.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_337.bin
new file mode 100644
index 000000000..468d017fd
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_337.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_338.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_338.bin
new file mode 100644
index 000000000..dd8c090f0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_338.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_339.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_339.bin
new file mode 100644
index 000000000..2450187a9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_339.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_340.bin
new file mode 100644
index 000000000..7018ba65e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_340.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_341.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_341.bin
new file mode 100644
index 000000000..76fc6f2e6
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_341.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_342.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_342.bin
new file mode 100644
index 000000000..48258421f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_342.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_343.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_343.bin
new file mode 100644
index 000000000..9abe4fe8f
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_343.bin
@@ -0,0 +1 @@
+ !&+--./ /00011223
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_344.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_344.bin
new file mode 100644
index 000000000..66e81bf0c
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_344.bin
@@ -0,0 +1,2 @@
+3
44
+569ZZZZZZZZZZZZZZ[[[[[[[[[[ZZZ[[[[\\\]^^_````````__^]\[ZYYXWWVVVVVUUUTTSRRQQQQPPPPPPPPPPPPPPQQRRSUXZcfhiklmnnoppqqrrsstttuuuvvwwxxxxxxxxxxxxxxxxwwvuttssrrqqqqqppoooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnoooooppppqqqqrsstttuuvvwwx
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_345.bin
new file mode 100644
index 000000000..ff1626c3d
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_345.bin
@@ -0,0 +1 @@
+xxyyzz{{|}}~~~~~~~}}}|||{{{{zzyyxxwvvuttssrrrqqqpppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqrrrrqqqqqpppoonnnmllkkjiihhgfeeddcbaa``_^]\\[ZZYYXWVVUUTTSRRQPONMLKKJHGFDCB@<8-*'# 8
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_346.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_346.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_347.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_347.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_348.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_348.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_349.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_349.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_350.bin
new file mode 100644
index 000000000..b55c36d82
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_360.bin
new file mode 100644
index 000000000..3f0087d04
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_360.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_361.bin
new file mode 100644
index 000000000..268770cf9
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_361.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_362.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_362.bin
new file mode 100644
index 000000000..68fb4aa3f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_362.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_363.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_363.bin
new file mode 100644
index 000000000..fa5a96880
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_363.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_364.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_364.bin
new file mode 100644
index 000000000..21a0e1353
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_364.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_370.bin
new file mode 100644
index 000000000..80ddc24fb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_371.bin
new file mode 100644
index 000000000..7834a4366
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_372.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_372.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_373.bin
new file mode 100644
index 000000000..a2f6c4176
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_373.bin
@@ -0,0 +1 @@
+X(#((0::<<<<<<<<=========================<<<<::99877765553211//..--+++**((((((((((*+++-./1233356667889999::::<<::::998865532221/...,+++***((('''&&&&&$$$$$$$$$$$$
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_374.bin
new file mode 100644
index 000000000..7612b681a
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_374.bin
@@ -0,0 +1,2 @@
+&&$#""
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_375.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_376.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_376.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_377.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_377.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_378.bin
new file mode 100644
index 000000000..1689b0090
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_379.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_379.bin
new file mode 100644
index 000000000..54232423c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_379.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_919_380.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_380.bin
new file mode 100644
index 000000000..23d8d18e7
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_919_380.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_340.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_340.bin
new file mode 100644
index 000000000..3831d7a22
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_340.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_341.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_341.bin
new file mode 100644
index 000000000..90951a011
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_341.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_342.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_342.bin
new file mode 100644
index 000000000..37a66892a
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_342.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_343.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_343.bin
new file mode 100644
index 000000000..b7ae1fe40
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_343.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_344.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_344.bin
new file mode 100644
index 000000000..43e9623d8
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_344.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_345.bin
new file mode 100644
index 000000000..72ec16460
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_345.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_346.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_346.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_347.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_347.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_348.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_348.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_349.bin
new file mode 100644
index 000000000..cea845a35
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_349.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_350.bin
new file mode 100644
index 000000000..49527750c
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_360.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_360.bin
new file mode 100644
index 000000000..b2e6d55aa
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_360.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_361.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_361.bin
new file mode 100644
index 000000000..8b52ae14d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_361.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_362.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_362.bin
new file mode 100644
index 000000000..0251fe59d
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_362.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_363.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_363.bin
new file mode 100644
index 000000000..897430ea1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_363.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_364.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_364.bin
new file mode 100644
index 000000000..99c3c9a43
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_364.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_371.bin
new file mode 100644
index 000000000..44c5969ca
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_372.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_372.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_373.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_373.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_374.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_375.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_376.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_376.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_377.bin
new file mode 100644
index 000000000..b853316a1
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_920_378.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_378.bin
new file mode 100644
index 000000000..81cb21f18
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_920_378.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_345.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_345.bin
new file mode 100644
index 000000000..7f63fcd68
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_345.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_346.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_346.bin
new file mode 100644
index 000000000..669a2e822
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_346.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_347.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_347.bin
new file mode 100644
index 000000000..0a7b8286e
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_347.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_348.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_348.bin
new file mode 100644
index 000000000..d8dec8c03
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_348.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_349.bin
new file mode 100644
index 000000000..3d8143a63
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_349.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_350.bin
new file mode 100644
index 000000000..32f915dff
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_371.bin
new file mode 100644
index 000000000..a85a7613b
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_372.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_372.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_373.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_373.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_374.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_375.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_376.bin
new file mode 100644
index 000000000..b4773412b
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_921_377.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_377.bin
new file mode 100644
index 000000000..010a876cb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_921_377.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_349.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_349.bin
new file mode 100644
index 000000000..a4c32cd98
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_349.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_350.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_350.bin
new file mode 100644
index 000000000..b96fbffbf
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_350.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_351.bin
new file mode 100644
index 000000000..a80bca079
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_351.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_371.bin
new file mode 100644
index 000000000..01b114722
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_372.bin
new file mode 100644
index 000000000..25a055da0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_372.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_373.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_373.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_374.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_375.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_922_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_376.bin
new file mode 100644
index 000000000..3b2dae78f
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_922_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_351.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_351.bin
new file mode 100644
index 000000000..5c1fbb8bb
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_351.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_352.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_352.bin
new file mode 100644
index 000000000..fe182c619
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_352.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_353.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_353.bin
new file mode 100644
index 000000000..d2a57ddda
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_353.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_372.bin
new file mode 100644
index 000000000..e9c58df73
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_372.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_373.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_373.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_374.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_375.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_375.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_923_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_376.bin
new file mode 100644
index 000000000..9260c7210
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_923_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_371.bin
new file mode 100644
index 000000000..3cad16932
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_372.bin
new file mode 100644
index 000000000..8756ad9d5
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_372.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_373.bin
new file mode 100644
index 000000000..248cb1682
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_373.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_374.bin
new file mode 100644
index 000000000..0cf264e31
--- /dev/null
+++ b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_374.bin
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_375.bin
new file mode 100644
index 000000000..a13b211d0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_924_376.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_376.bin
new file mode 100644
index 000000000..1000a0a13
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_924_376.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_370.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_370.bin
new file mode 100644
index 000000000..94e462e2b
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_370.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_371.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_371.bin
new file mode 100644
index 000000000..b1c7e64f7
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_371.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_372.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_372.bin
new file mode 100644
index 000000000..2924a6aea
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_372.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_373.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_373.bin
new file mode 100644
index 000000000..caa5d33be
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_373.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_374.bin
new file mode 100644
index 000000000..834d087c0
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_374.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_925_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_375.bin
new file mode 100644
index 000000000..1aea1c966
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_925_375.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_926_374.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_926_374.bin
new file mode 100644
index 000000000..5a988d9d3
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_926_374.bin differ
diff --git a/Data/XYZTiles/AynuMosir20250822/zxy_10_926_375.bin b/Data/XYZTiles/AynuMosir20250822/zxy_10_926_375.bin
new file mode 100644
index 000000000..c66357931
Binary files /dev/null and b/Data/XYZTiles/AynuMosir20250822/zxy_10_926_375.bin differ
diff --git a/Images/Logo/LogoRed.ico b/Images/Logo/LogoRed.ico
new file mode 100644
index 000000000..d079c72bc
Binary files /dev/null and b/Images/Logo/LogoRed.ico differ
diff --git a/Images/Logo/LogoRed.png b/Images/Logo/LogoRed.png
new file mode 100644
index 000000000..e311881d2
Binary files /dev/null and b/Images/Logo/LogoRed.png differ
diff --git a/Images/Logo/LogoRed.svg b/Images/Logo/LogoRed.svg
new file mode 100644
index 000000000..d8b79a637
--- /dev/null
+++ b/Images/Logo/LogoRed.svg
@@ -0,0 +1,56 @@
+
+
\ No newline at end of file
diff --git a/Library/PAX_GRAPHICA/3DModel.hpp b/Library/PAX_GRAPHICA/3DModel.hpp
new file mode 100644
index 000000000..5d613de6a
--- /dev/null
+++ b/Library/PAX_GRAPHICA/3DModel.hpp
@@ -0,0 +1,218 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_MAHOROBA_3D_MODEL_HPP
+#define PAX_MAHOROBA_3D_MODEL_HPP
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#elif defined(PAXS_USING_DXLIB)
+#include
+#elif defined(PAXS_USING_SFML)
+#include
+#endif
+
+#include
+
+namespace paxg {
+
+ /// @brief 3D モデル描画の設定
+ struct Graphics3DModelConfig {
+ /// @brief カメラ設定
+ struct Camera {
+ /// @brief 垂直視野角(度)
+ double verticalFOV = 40.0;
+ double posX = 0.0;
+ double posY = 3.0;
+ double posZ = -16.0;
+ } camera;
+
+ /// @brief 背景色設定
+ struct Background {
+ float r = 1.0f; // 赤成分
+ float g = 1.0f; // 緑成分
+ float b = 1.0f; // 青成分
+ float a = 0.0f; // 透明度
+ } background;
+
+ /// @brief ファイルパス設定
+ struct FilePaths {
+ std::string modelPath = "Data/3DModels/KofunOBJ/Model/Sekishitsu/KamoKitaKofun/KamoKitaKofun.obj";
+ } paths;
+
+ /// @brief モデルの回転速度(度/フレーム)
+ double rotationSpeed = 1.0;
+ };
+
+ /// @brief 3D モデル描画クラス
+ class Graphics3DModel {
+ private:
+ Graphics3DModelConfig config_;
+
+#ifdef PAXS_USING_SIV3D
+ // 回転角度
+ int rotation_ = 0;
+
+ s3d::ColorF backgroundColor_;
+
+ // 3D モデルデータ
+ s3d::Model model_;
+
+ // 描画するテクスチャの設定
+ mutable s3d::MSRenderTexture renderTexture_;
+
+ // カメラ
+ mutable s3d::DebugCamera3D camera_;
+#endif
+
+ public:
+ /// @brief デフォルト設定でコンストラクタ
+ Graphics3DModel() : Graphics3DModel(Graphics3DModelConfig{}) {}
+
+ /// @brief カスタム設定でコンストラクタ
+ explicit Graphics3DModel(const Graphics3DModelConfig& cfg) : config_(cfg) {
+#ifdef PAXS_USING_SIV3D
+ // カメラ設定
+ camera_ = s3d::DebugCamera3D{
+ s3d::Graphics3D::GetRenderTargetSize(),
+ config_.camera.verticalFOV / 180.0 * s3d::Math::Pi,
+ s3d::Vec3{ config_.camera.posX, config_.camera.posY, config_.camera.posZ }
+ };
+
+ renderTexture_ = s3d::MSRenderTexture{
+ s3d::Size{s3d::Scene::Width(), s3d::Scene::Height()},
+ s3d::TextureFormat::R8G8B8A8_Unorm_SRGB,
+ s3d::HasDepth::Yes
+ };
+
+ // 背景色を設定
+ backgroundColor_ = s3d::ColorF{
+ config_.background.r,
+ config_.background.g,
+ config_.background.b,
+ config_.background.a
+ }.removeSRGBCurve();
+
+ // 3D モデルデータをロード
+ const auto rootPath = s3d::Unicode::FromUTF8(paxs::AppConfig::getInstance()->getRootPath());
+ model_ = s3d::Model{ rootPath + s3d::Unicode::FromUTF8(config_.paths.modelPath) };
+
+ // モデルに付随するテクスチャをアセット管理に登録
+ s3d::Model::RegisterDiffuseTextures(model_, s3d::TextureDesc::MippedSRGB);
+#endif
+ }
+
+ /// @brief 回転角度を更新
+ /// @brief Update rotation angle
+ void updateRotation() {
+#ifdef PAXS_USING_SIV3D
+ // モデルの回転更新
+ ++rotation_;
+ if (rotation_ >= 360) rotation_ = 0;
+#endif
+ }
+
+ /// @brief 3Dモデルを描画
+ /// @brief Render 3D model
+ void render() const {
+#ifdef PAXS_USING_SIV3D
+ s3d::Graphics3D::SetCameraTransform(camera_); // カメラ情報を設定
+
+ // 3D シーンの描画
+ const s3d::ScopedRenderTarget3D target{ renderTexture_.clear(backgroundColor_) };
+
+ // 3Dモデルの描画
+ const s3d::ScopedRenderStates3D renderStates{
+ s3d::BlendState::OpaqueAlphaToCoverage,
+ s3d::RasterizerState::SolidCullNone
+ };
+ model_.draw(
+ s3d::Vec3{ 0, 0, 0 },
+ s3d::Quaternion::RotateY(rotation_ / 180.0 * s3d::Math::Pi)
+ );
+
+ // RenderTexture を 2D シーンに描画
+ s3d::Graphics3D::Flush(); // 現在までの 3D 描画を実行
+
+ // 画面サイズが変更されたら幅を変える
+ // 毎フレームチェックすると重いため、3フレームに1回チェック
+ static int resize_check_count = 0;
+ if (resize_check_count >= 3) {
+ resize_check_count = 0;
+ if (renderTexture_.width() != s3d::Scene::Width()
+ || renderTexture_.height() != s3d::Scene::Height()) {
+ renderTexture_ = s3d::MSRenderTexture{
+ s3d::Size{s3d::Scene::Width(), s3d::Scene::Height()},
+ s3d::TextureFormat::R8G8B8A8_Unorm_SRGB,
+ s3d::HasDepth::Yes
+ };
+ }
+ }
+ ++resize_check_count;
+
+ renderTexture_.resolve(); // テクスチャを描画可能にする
+ renderTexture_.draw(0, 0); // 指定した大きさで描画
+#endif
+ }
+
+ /// @brief 設定を取得
+ const Graphics3DModelConfig& getConfig() const { return config_; }
+
+ /// @brief 設定を更新
+ void setConfig(const Graphics3DModelConfig& cfg) { config_ = cfg; }
+
+ /// @brief カメラ設定を更新
+ void setCameraConfig(const Graphics3DModelConfig::Camera& cam) {
+ config_.camera = cam;
+#ifdef PAXS_USING_SIV3D
+ camera_ = s3d::DebugCamera3D{
+ s3d::Graphics3D::GetRenderTargetSize(),
+ config_.camera.verticalFOV / 180.0 * s3d::Math::Pi,
+ s3d::Vec3{ config_.camera.posX, config_.camera.posY, config_.camera.posZ }
+ };
+#endif
+ }
+
+ /// @brief 背景色設定を更新
+ void setBackgroundConfig(const Graphics3DModelConfig::Background& bg) {
+ config_.background = bg;
+#ifdef PAXS_USING_SIV3D
+ backgroundColor_ = s3d::ColorF{
+ config_.background.r,
+ config_.background.g,
+ config_.background.b,
+ config_.background.a
+ }.removeSRGBCurve();
+#endif
+ }
+
+ /// @brief 現在の回転角度を取得(度)
+ int getRotation() const {
+#ifdef PAXS_USING_SIV3D
+ return rotation_;
+#else
+ return 0;
+#endif
+ }
+
+ /// @brief 回転角度を設定(度)
+ void setRotation(int angle) {
+#ifdef PAXS_USING_SIV3D
+ rotation_ = angle % 360;
+#else
+ (void)angle;
+#endif
+ }
+ };
+
+}
+
+#endif // !PAX_MAHOROBA_3D_MODEL_HPP
diff --git a/Library/PAX_GRAPHICA/Circle.hpp b/Library/PAX_GRAPHICA/Circle.hpp
index 55785746d..6b924d984 100644
--- a/Library/PAX_GRAPHICA/Circle.hpp
+++ b/Library/PAX_GRAPHICA/Circle.hpp
@@ -12,10 +12,6 @@
#ifndef PAX_GRAPHICA_CIRCLE_HPP
#define PAX_GRAPHICA_CIRCLE_HPP
-/*##########################################################################################
-
-##########################################################################################*/
-
#if defined(PAXS_USING_SIV3D)
#include
#elif defined(PAXS_USING_DXLIB)
@@ -25,13 +21,12 @@
#include
#endif
-#include
#include
#include
namespace paxg {
- struct Circle : public IDrawable
+ struct Circle
{
#if defined(PAXS_USING_SIV3D)
s3d::Circle circle;
@@ -43,14 +38,14 @@ namespace paxg {
constexpr Circle(const float x, const float y, const float r) : x(x), y(y), r(r) {}
constexpr Circle(const paxg::Vec2i& pos, const float r) : x(static_cast(pos.x())), y(static_cast(pos.y())), r(r) {}
#endif
- void draw() const override {
+ void draw() const {
#if defined(PAXS_USING_SIV3D)
circle.draw();
#elif defined(PAXS_USING_SFML)
SFML_Circle::getInstance()->circle.setRadius(r);
SFML_Circle::getInstance()->circle.setPosition({ x, y });
- Window::window.draw(SFML_Circle::getInstance()->circle);
+ paxg::Window::window().draw(SFML_Circle::getInstance()->circle);
#endif
}
@@ -70,14 +65,11 @@ namespace paxg {
SFML_Circle::getInstance()->circle.setPosition({ x, y });
SFML_Circle::getInstance()->circle.setFillColor(c_.color);
- Window::window.draw(SFML_Circle::getInstance()->circle);
+ paxg::Window::window().draw(SFML_Circle::getInstance()->circle);
}
#else
void draw(const paxg::Color&) const {}
#endif
-
- void drawAt(const Vec2f&) const override {}
- void drawAt(const Vec2i&) const override {}
};
}
diff --git a/Library/PAX_GRAPHICA/Color.hpp b/Library/PAX_GRAPHICA/Color.hpp
index c705e60d5..fe58bbb98 100644
--- a/Library/PAX_GRAPHICA/Color.hpp
+++ b/Library/PAX_GRAPHICA/Color.hpp
@@ -12,9 +12,7 @@
#ifndef PAX_GRAPHICA_COLOR_HPP
#define PAX_GRAPHICA_COLOR_HPP
-/*##########################################################################################
-
-##########################################################################################*/
+#include
#if defined(PAXS_USING_SIV3D)
#include
@@ -24,8 +22,6 @@
#include
#endif
-#include
-
namespace paxg {
// R 赤
@@ -44,7 +40,7 @@ namespace paxg {
#elif defined(PAXS_USING_SFML)
sf::Color color;
- Color(const int r, const int g, const int b, const int a = 255) : color(
+ constexpr Color(const int r, const int g, const int b, const int a = 255) : color(
static_cast(r),
static_cast(g),
static_cast(b),
diff --git a/Library/PAX_GRAPHICA/ColorF.hpp b/Library/PAX_GRAPHICA/ColorF.hpp
new file mode 100644
index 000000000..977f1c41d
--- /dev/null
+++ b/Library/PAX_GRAPHICA/ColorF.hpp
@@ -0,0 +1,50 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_COLOR_F_HPP
+#define PAX_GRAPHICA_COLOR_F_HPP
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#endif
+
+namespace paxg {
+
+ /// @brief Floating-point color class (0.0-1.0 range)
+ /// @brief 浮動小数点カラークラス(0.0-1.0の範囲)
+ struct ColorF {
+ double r, g, b, a;
+
+ /// @brief Constructor with RGB and alpha
+ /// @param r_ Red component (0.0-1.0)
+ /// @param g_ Green component (0.0-1.0)
+ /// @param b_ Blue component (0.0-1.0)
+ /// @param a_ Alpha component (0.0-1.0)
+ constexpr ColorF(double r_, double g_, double b_, double a_ = 1.0)
+ : r(r_), g(g_), b(b_), a(a_) {}
+
+ /// @brief Constructor with grayscale and alpha
+ /// @param rgb Grayscale value (0.0-1.0)
+ /// @param a_ Alpha component (0.0-1.0)
+ constexpr ColorF(double rgb, double a_)
+ : r(rgb), g(rgb), b(rgb), a(a_) {}
+
+#if defined(PAXS_USING_SIV3D)
+ /// @brief Convert to Siv3D ColorF
+ operator s3d::ColorF() const {
+ return s3d::ColorF(r, g, b, a);
+ }
+#endif
+ };
+
+} // namespace paxg
+
+#endif // !PAX_GRAPHICA_COLOR_F_HPP
diff --git a/Library/PAX_GRAPHICA/Font.hpp b/Library/PAX_GRAPHICA/Font.hpp
new file mode 100644
index 000000000..00648187c
--- /dev/null
+++ b/Library/PAX_GRAPHICA/Font.hpp
@@ -0,0 +1,423 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_FONT_HPP
+#define PAX_GRAPHICA_FONT_HPP
+
+#include
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#elif defined(PAXS_USING_DXLIB)
+#include
+#elif defined(PAXS_USING_SFML)
+#include
+#include
+#endif
+
+#include
+#include
+#include
+
+#include
+#include
+
+namespace paxg{
+ struct Font {
+ constexpr Font() = default;
+#if defined(PAXS_USING_SIV3D)
+ s3d::Font font{};
+ Font(const int size_, const std::string& path, const int buffer_thickness) {
+ font = (path.size() == 0) ?
+ s3d::Font(s3d::FontMethod::SDF, size_) :
+ s3d::Font(s3d::FontMethod::SDF, size_, s3d::Unicode::FromUTF8(paxs::AppConfig::getInstance()->getRootPath() + path));
+ font.setBufferThickness(buffer_thickness);
+ }
+ bool is_outline = false;
+ s3d::TextStyle outline{};
+ void setOutline(const double inner, const double outer, const paxg::Color& color) {
+ is_outline = true;
+ outline = s3d::TextStyle::Outline(inner, outer, color.color);
+ }
+
+ void drawBottomLeft(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ outline,
+ s3d::Arg::bottomLeft = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ s3d::Arg::bottomLeft = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+ void drawTopRight(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ outline,
+ s3d::Arg::topRight = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ s3d::Arg::topRight = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+ void draw(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ outline,
+ s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+ void drawBottomCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ outline,
+ s3d::Arg::bottomCenter = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ s3d::Arg::bottomCenter = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+ void drawTopCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ outline,
+ s3d::Arg::topCenter = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).draw(
+ s3d::Arg::topCenter = s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+ void drawAt(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (is_outline) {
+ font(s3d::Unicode::FromUTF8(str)).drawAt(
+ outline,
+ s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ else {
+ font(s3d::Unicode::FromUTF8(str)).drawAt(
+ s3d::Vec2(pos.x(), pos.y()),
+ color.color);
+ }
+ }
+
+ int height() const {
+ return font.height();
+ }
+ int width(const std::string& str_) {
+ return static_cast(font(s3d::Unicode::FromUTF8(str_)).region().w);
+ }
+
+#elif defined(PAXS_USING_DXLIB)
+ int font{ -1 }; int h{ 0 };
+ Font(const int size_, const std::string& path, const int buffer_thickness) {
+ // 文字コードをUTF-8に統一
+ DxLib::SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8);
+
+ if (path.size() == 0) {
+ // デフォルトフォントを使用
+ font = DxLib::CreateFontToHandle(NULL, size_, -1,
+ (buffer_thickness <= 0) ? DX_FONTTYPE_NORMAL :
+#ifdef __ANDROID__
+ DX_FONTTYPE_EDGE
+#else
+ DX_FONTTYPE_ANTIALIASING_8X8
+#endif
+ );
+ } else {
+ // 外部フォントファイルを使用
+ const std::string full_path = paxs::AppConfig::getInstance()->getRootPath() + path;
+ int font_data_handle = DxLib::LoadFontDataToHandle(full_path.c_str(), buffer_thickness);
+
+ if (font_data_handle == -1) {
+ PAXS_WARNING("Failed to load font data: " + full_path);
+ // フォールバック: デフォルトフォント
+ font = DxLib::CreateFontToHandle(NULL, size_, -1,
+ (buffer_thickness <= 0) ? DX_FONTTYPE_NORMAL : DX_FONTTYPE_ANTIALIASING_8X8);
+ } else {
+ font = DxLib::CreateFontToHandle(NULL, size_, -1,
+ (buffer_thickness <= 0) ? DX_FONTTYPE_NORMAL : DX_FONTTYPE_ANTIALIASING_8X8,
+ -1, -1, FALSE, font_data_handle);
+ }
+ }
+
+ // フォント間隔を0に明示(他のライブラリと同じ挙動にする)
+ if (font != -1) {
+ DxLib::SetFontSpaceToHandle(font, 0);
+ }
+
+ h = size_;
+ }
+ void setOutline(const double inner, const double outer, const paxg::Color& color) const {
+
+ }
+
+ void drawAlign(int align, paxg::Vec2i pos, std::string str_, const paxg::Color& color_, unsigned int edge_color = 0) const {
+ // std::size_t string_length;
+ // align が 0左寄り 1中央寄り 2右寄り
+ if (align < 0) align = 0;
+ if (align > 2) align = 2;
+ std::size_t str_len = str_.size(); // 全体の文字数を得る
+ int sizex; int sizey; int line_count; // 描画した時のサイズと行数を調べる
+ DxLib::GetDrawStringSizeToHandle(&sizex, &sizey, &line_count, str_.c_str(), static_cast(str_len), font, FALSE);
+ const char* last = &(str_[0]) + str_len; // 終端を得る
+ const char* next; // 次の改行ポイント
+ int line_space = DxLib::GetFontLineSpaceToHandle(font); // 一行の縦幅を得る
+ int str_width; // 一行の横幅
+ std::size_t char_count = 0; // 描画した文字数をカウント
+ for (int i = 0; i < line_count; i++) { // 行数分、繰り返す
+ next = DxLib::strstrDx(str_.c_str(), "\n"); // 次の改行ポイントを探す
+ if (next == NULL) next = last; // 改行が見つからない場合は最終行ということなので終端を代入
+ str_len = next - &(str_[0]); // この行の文字数を得る
+ str_width = DxLib::GetDrawNStringWidthToHandle(str_.c_str(), str_len, font, FALSE); // この行の横幅を得る
+ // if (char_count < string_length) { // 描画した文字数がまだ指定範囲を超えていない場合
+ char_count += str_len; // この行の文字数を足す
+ // if (char_count > string_length) { // この行の中に指定した終端がある場合
+ // str_len -= (char_count - string_length); // 差分を引いて文字数を調整
+ // }
+ // x座標を調整して一行分描画する
+ DxLib::DrawNStringToHandle(pos.x() + ((align * (sizex - str_width)) / 2), pos.y(),
+ str_.c_str(), str_len, DxLib::GetColor(color_.r, color_.g, color_.b), font, edge_color, FALSE);
+ // }
+ char_count += 1; // 改行文字の分
+ str_ = std::string(next + 1); // 次の行の先頭にする(+1は改行文字の分)
+ pos.setY(pos.y() + line_space); // y座標をずらす
+ }
+ }
+
+ void drawBottomLeft(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else DxLib::DrawStringToHandle(pos.x(), pos.y() - 10, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ void drawTopRight(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else {
+ int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
+ DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), static_cast(str.size()), font, FALSE);
+ DxLib::DrawStringToHandle(pos.x() - size_x, pos.y() + size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ }
+ void draw(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ void drawBottomCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else {
+ int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
+ DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), static_cast(str.size()), font, FALSE);
+ DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y() - size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ }
+ void drawTopCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else {
+ int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
+ DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), static_cast(str.size()), font, FALSE);
+ DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y() + size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ }
+ void drawAt(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
+ else {
+ int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
+ DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), static_cast(str.size()), font, FALSE);
+ DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font, 0xffffffff);
+ }
+ }
+
+ int height() const {
+ if (font == -1) return h;
+ // DxLibで実際の行高さを取得(他のライブラリと同じ挙動にする)
+ return DxLib::GetFontLineSpaceToHandle(font);
+ }
+ int width(const std::string& str_) {
+ if (font == -1) return static_cast(static_cast(str_.size()) * h * 0.5);
+ // DxLibで実際の文字列幅を取得(フォントハンドルを使用)
+ int w = 0, h_temp = 0;
+ DxLib::GetDrawStringSizeToHandle(&w, &h_temp, NULL, str_.c_str(), static_cast(str_.size()), font, FALSE);
+ return w;
+ }
+
+#elif defined(PAXS_USING_SFML)
+ sf::Font font{};
+ int size = 0;
+ Font(const int size_, const std::string& path, const int /*buffer_thickness*/) {
+ size = size_;
+ if (path.size() == 0) return;
+ if (!font.openFromFile(paxs::AppConfig::getInstance()->getRootPath() + path)) {
+ PAXS_WARNING(path + " is missing.");
+ }
+ }
+
+ void setOutline(const double /*inner*/, const double /*outer*/, const paxg::Color& /*color*/) {
+
+ }
+
+ void drawBottomLeft(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x()), static_cast(pos.y() - size / 2) });
+ paxg::Window::window().draw(text);
+ }
+
+ void drawTopRight(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x() - text.getGlobalBounds().size.x), static_cast(pos.y() + size / 2) });
+ paxg::Window::window().draw(text);
+ }
+
+ void draw(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x()), static_cast(pos.y()) });
+ paxg::Window::window().draw(text);
+ }
+
+ void drawBottomCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x() - text.getGlobalBounds().size.x / 2), static_cast(pos.y() - size / 2) });
+ paxg::Window::window().draw(text);
+ }
+
+ void drawTopCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x() - text.getGlobalBounds().size.x / 2), static_cast(pos.y() + size / 2) });
+ paxg::Window::window().draw(text);
+ }
+
+ void drawAt(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str.begin(), str.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+ text.setFillColor(color.color);
+ text.setOutlineColor(sf::Color::White);
+ text.setOutlineThickness(2.0f);
+ text.setPosition({ static_cast(pos.x() - text.getGlobalBounds().size.x / 2), static_cast(pos.y()) });
+ paxg::Window::window().draw(text);
+ }
+
+ int height() const {
+ return size;
+ }
+
+ int width(const std::string& str_) {
+ sf::Text text(font);
+ std::wstring wstr;
+ sf::Utf<8>::toWide(str_.begin(), str_.end(), std::back_inserter(wstr));
+ text.setString(wstr);
+ text.setCharacterSize(size);
+
+ return static_cast(text.getGlobalBounds().size.x);
+ // return str_.size() * size * 0.5;
+ }
+
+#else
+ Font([[maybe_unused]] const int size_, [[maybe_unused]] const std::string& path, [[maybe_unused]] const int buffer_thickness) {
+ }
+ void setOutline([[maybe_unused]] const double inner, [[maybe_unused]] const double outer, [[maybe_unused]] const paxg::Color& color) {
+ }
+
+ void drawBottomLeft([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+ void drawTopRight([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+ void draw([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+ void drawBottomCenter([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+ void drawTopCenter([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+ void drawAt([[maybe_unused]] const std::string& str, [[maybe_unused]] const paxg::Vec2i& pos, [[maybe_unused]] const paxg::Color& color) const {
+ }
+
+ int height() const {
+ return 0;
+ }
+ int width([[maybe_unused]] const std::string& str_) {
+ return 0;
+ }
+#endif
+ };
+
+ /// @brief フォント設定の定数
+ /// @brief Font configuration constants
+ struct FontConfig {
+ // プルダウンメニューのフォント設定
+ static constexpr int PULLDOWN_FONT_SIZE =
+#if defined(PAXS_USING_DXLIB) && defined(__ANDROID__)
+ 40;
+#else
+ 24;
+#endif
+ static constexpr int PULLDOWN_FONT_BUFFER_THICKNESS = 3;
+
+ // 暦表示のフォント設定
+ static constexpr int KOYOMI_FONT_SIZE = 22;
+ static constexpr int KOYOMI_FONT_BUFFER_THICKNESS = 3;
+ };
+
+}
+
+#endif // !PAX_GRAPHICA_FONT_HPP
diff --git a/Library/PAX_GRAPHICA/Graphics.hpp b/Library/PAX_GRAPHICA/Graphics.hpp
deleted file mode 100644
index 3693f2dd8..000000000
--- a/Library/PAX_GRAPHICA/Graphics.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*##########################################################################################
-
- PAX SAPIENTICA Library 💀🌿🌏
-
- [Planning] 2023-2024 As Project
- [Production] 2023-2024 As Project
- [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
- [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
-
-##########################################################################################*/
-
-#ifndef PAX_GRAPHICA_GRAPHICS_HPP
-#define PAX_GRAPHICA_GRAPHICS_HPP
-
-/*##########################################################################################
-
-##########################################################################################*/
-
-#include
-#include
-#include
-#include
-
-#endif // !PAX_GRAPHICA_GRAPHICS_HPP
diff --git a/Library/PAX_GRAPHICA/IDrawable.hpp b/Library/PAX_GRAPHICA/IDrawable.hpp
deleted file mode 100644
index c84cf41e5..000000000
--- a/Library/PAX_GRAPHICA/IDrawable.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*##########################################################################################
-
- PAX SAPIENTICA Library 💀🌿🌏
-
- [Planning] 2023-2024 As Project
- [Production] 2023-2024 As Project
- [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
- [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
-
-##########################################################################################*/
-
-#ifndef PAX_GRAPHICA_IDRAWABLE_HPP
-#define PAX_GRAPHICA_IDRAWABLE_HPP
-
-/*##########################################################################################
-
-##########################################################################################*/
-
-#include
-
-namespace paxg {
-
- struct IDrawable {
-
- virtual ~IDrawable() {}
-
- virtual void draw() const = 0;
-
- virtual void drawAt(const Vec2f& pos) const = 0;
- virtual void drawAt(const Vec2i& pos) const = 0;
- };
-
-}
-
-#endif // !PAX_GRAPHICA_IDRAWABLE_HPP
diff --git a/Library/PAX_GRAPHICA/Image.hpp b/Library/PAX_GRAPHICA/Image.hpp
index 84c43b8a5..778bfa55e 100644
--- a/Library/PAX_GRAPHICA/Image.hpp
+++ b/Library/PAX_GRAPHICA/Image.hpp
@@ -12,9 +12,8 @@
#ifndef PAX_GRAPHICA_IMAGE_HPP
#define PAX_GRAPHICA_IMAGE_HPP
-/*##########################################################################################
-
-##########################################################################################*/
+#include
+#include
#if defined(PAXS_USING_SIV3D)
#include
@@ -25,6 +24,7 @@
#endif
#include
+
#include
namespace paxg {
@@ -36,6 +36,8 @@ namespace paxg {
Image(const paxg::String& path) : image(path.string) {}
constexpr operator s3d::Image() const { return image; }
+ bool isValid() const { return !!image; }
+
#elif defined(PAXS_USING_SFML)
sf::Image image;
Image(const paxg::String& path) {
@@ -44,9 +46,26 @@ namespace paxg {
}
}
operator sf::Image() const { return image; }
+
+ bool isValid() const { return image.getSize().x > 0 && image.getSize().y > 0; }
+
+ // SFML 3.0.0: saveToMemory returns std::optional
+ std::optional> saveToMemory(const std::string& format = "png") const {
+ return image.saveToMemory(format);
+ }
+
+ // Save to file with error checking
+ bool saveToFile(const std::string& filename) const {
+ return image.saveToFile(filename);
+ }
+
#else
constexpr Image([[maybe_unused]] const paxg::String& path) {}
+ constexpr bool isValid() const { return false; }
#endif
+
+ // Common interface
+ explicit operator bool() const { return isValid(); }
};
}
diff --git a/Library/PAX_GRAPHICA/InputFileKeyMatrix.hpp b/Library/PAX_GRAPHICA/InputFileKeyMatrix.hpp
deleted file mode 100644
index 61390d08b..000000000
--- a/Library/PAX_GRAPHICA/InputFileKeyMatrix.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*##########################################################################################
-
- PAX SAPIENTICA Library 💀🌿🌏
-
- [Planning] 2023-2024 As Project
- [Production] 2023-2024 As Project
- [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
- [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
-
-##########################################################################################*/
-
-#ifndef PAX_GRAPHICA_INPUT_FILE_KEY_MATRIX_HPP
-#define PAX_GRAPHICA_INPUT_FILE_KEY_MATRIX_HPP
-
-/*##########################################################################################
-
-##########################################################################################*/
-
-#include
-#include
-#include
-#include
-
-#include
-
-namespace paxg {
-
- // 入力ファイルの Key による行列を扱う
- // 例)
- // key a b c
- // x 1 2 3
- // y 4 5 6
- // z 7 8 9
- // のようなデータの
- struct InputFileKeyMatrix {
- // 1 行目 (上記の例だと key,a,b,c が入る)
- std::unordered_map first_line;
- // 2 行目以降
- std::unordered_map line;
-
- };
-
-}
-
-#endif // !PAX_GRAPHICA_INPUT_FILE_KEY_MATRIX_HPP
diff --git a/Library/PAX_GRAPHICA/Key.hpp b/Library/PAX_GRAPHICA/Key.hpp
index 04a39858b..543be6698 100644
--- a/Library/PAX_GRAPHICA/Key.hpp
+++ b/Library/PAX_GRAPHICA/Key.hpp
@@ -9,12 +9,8 @@
##########################################################################################*/
-#ifndef PAX_SAPIENTICA_SIV3D_KEY_HPP
-#define PAX_SAPIENTICA_SIV3D_KEY_HPP
-
-/*##########################################################################################
-
-##########################################################################################*/
+#ifndef PAX_GRAPHICA_KEY_HPP
+#define PAX_GRAPHICA_KEY_HPP
#include
#include
@@ -23,228 +19,158 @@
#include
#include
-#include
-#include // 地図投影法
+#if defined(PAXS_USING_SIV3D)
+#include
+#elif defined(PAXS_USING_DXLIB)
+#include
+#elif defined(PAXS_USING_SFML)
+#include
+#endif
#include
#include
+#include
+#include
+
namespace paxs {
+ // Coordinate constants
+ namespace CoordinateConstants {
+ // Longitude bounds
+ static constexpr double longitude_min = -180.0;
+ static constexpr double longitude_max = 180.0;
+ static constexpr double longitude_range = 360.0;
+ }
+
struct InputStruct {
InputStruct() = default;
-#if defined(PAXS_USING_SIV3D)
- s3d::Input input{};
- InputStruct(s3d::Input& key) :input(key) {}
-#elif defined(PAXS_USING_DXLIB)
- int input{ -1 };
- InputStruct(int key) :input(key) {}
-
-#elif defined(PAXS_USING_SFML)
- sf::Keyboard::Key input{ -1 };
- InputStruct(sf::Keyboard::Key key) :input(key) {}
+#if defined(PAXS_USING_SIV3D)
+ using InputType = s3d::Input;
+ InputType input{};
+ InputStruct(const InputType& key) : input(key) {}
-#endif
bool pressed() const {
-#if defined(PAXS_USING_SIV3D)
- return input.pressed();
+ return paxg::Window::hasFocus() && input.pressed();
+ }
#elif defined(PAXS_USING_DXLIB)
- return DxLib::CheckHitKey(input) == 1;
+ using InputType = int;
+ InputType input{ -1 };
+ InputStruct(InputType key) : input(key) {}
-#elif defined(PAXS_USING_SFML)
- return sf::Keyboard::isKeyPressed((sf::Keyboard::Key)input);
+ bool pressed() const {
+ return paxg::Window::hasFocus() && DxLib::CheckHitKey(input) == 1;
+ }
-#else
- return false;
-#endif
+#elif defined(PAXS_USING_SFML)
+ using InputType = sf::Keyboard::Key;
+ InputType input{ static_cast(-1) };
+ InputStruct(InputType key) : input(key) {}
+ bool pressed() const {
+ return paxg::Window::hasFocus() && sf::Keyboard::isKeyPressed(input);
}
+#else
+ using InputType = int;
+ InputType input{ -1 };
+ bool pressed() const {
+ return false;
+ }
+#endif
};
- // inline static InputStruct KeyE{};
+#define PAXG_KEY_LIST(X) \
+ X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) \
+ X(A) X(B) X(C) X(D) X(E) X(F) X(G) X(H) X(I) X(J) \
+ X(K) X(L) X(M) X(N) X(O) X(P) X(Q) X(R) X(S) X(T) \
+ X(U) X(V) X(W) X(X) X(Y) X(Z) \
+ X(LEFT) X(RIGHT) X(DOWN) X(UP)
#if defined(PAXS_USING_SIV3D)
using InputKey = s3d::Input;
-#define SIV3D_KEY_0 s3d::Key0
-#define SIV3D_KEY_1 s3d::Key1
-#define SIV3D_KEY_2 s3d::Key2
-#define SIV3D_KEY_3 s3d::Key3
-#define SIV3D_KEY_4 s3d::Key4
-#define SIV3D_KEY_5 s3d::Key5
-#define SIV3D_KEY_6 s3d::Key6
-#define SIV3D_KEY_7 s3d::Key7
-#define SIV3D_KEY_8 s3d::Key8
-#define SIV3D_KEY_9 s3d::Key9
-#define SIV3D_KEY_A s3d::KeyA
-#define SIV3D_KEY_B s3d::KeyB
-#define SIV3D_KEY_C s3d::KeyC
-#define SIV3D_KEY_D s3d::KeyD
-#define SIV3D_KEY_E s3d::KeyE
-#define SIV3D_KEY_F s3d::KeyF
-#define SIV3D_KEY_G s3d::KeyG
-#define SIV3D_KEY_H s3d::KeyH
-#define SIV3D_KEY_I s3d::KeyI
-#define SIV3D_KEY_J s3d::KeyJ
-#define SIV3D_KEY_K s3d::KeyK
-#define SIV3D_KEY_L s3d::KeyL
-#define SIV3D_KEY_M s3d::KeyM
-#define SIV3D_KEY_N s3d::KeyN
-#define SIV3D_KEY_O s3d::KeyO
-#define SIV3D_KEY_P s3d::KeyP
-#define SIV3D_KEY_Q s3d::KeyQ
-#define SIV3D_KEY_R s3d::KeyR
-#define SIV3D_KEY_S s3d::KeyS
-#define SIV3D_KEY_T s3d::KeyT
-#define SIV3D_KEY_U s3d::KeyU
-#define SIV3D_KEY_V s3d::KeyV
-#define SIV3D_KEY_W s3d::KeyW
-#define SIV3D_KEY_X s3d::KeyX
-#define SIV3D_KEY_Y s3d::KeyY
-#define SIV3D_KEY_Z s3d::KeyZ
-#define SIV3D_KEY_LEFT s3d::KeyLeft
-#define SIV3D_KEY_RIGHT s3d::KeyRight
-#define SIV3D_KEY_DOWN s3d::KeyDown
-#define SIV3D_KEY_UP s3d::KeyUp
+#define PAXG_DEFINE_KEY_COMMON(name) inline constexpr InputKey PAXG_KEY_##name = s3d::Key##name;
+ PAXG_DEFINE_KEY_COMMON(0) PAXG_DEFINE_KEY_COMMON(1) PAXG_DEFINE_KEY_COMMON(2) PAXG_DEFINE_KEY_COMMON(3)
+ PAXG_DEFINE_KEY_COMMON(4) PAXG_DEFINE_KEY_COMMON(5) PAXG_DEFINE_KEY_COMMON(6) PAXG_DEFINE_KEY_COMMON(7)
+ PAXG_DEFINE_KEY_COMMON(8) PAXG_DEFINE_KEY_COMMON(9)
+ PAXG_DEFINE_KEY_COMMON(A) PAXG_DEFINE_KEY_COMMON(B) PAXG_DEFINE_KEY_COMMON(C) PAXG_DEFINE_KEY_COMMON(D)
+ PAXG_DEFINE_KEY_COMMON(E) PAXG_DEFINE_KEY_COMMON(F) PAXG_DEFINE_KEY_COMMON(G) PAXG_DEFINE_KEY_COMMON(H)
+ PAXG_DEFINE_KEY_COMMON(I) PAXG_DEFINE_KEY_COMMON(J) PAXG_DEFINE_KEY_COMMON(K) PAXG_DEFINE_KEY_COMMON(L)
+ PAXG_DEFINE_KEY_COMMON(M) PAXG_DEFINE_KEY_COMMON(N) PAXG_DEFINE_KEY_COMMON(O) PAXG_DEFINE_KEY_COMMON(P)
+ PAXG_DEFINE_KEY_COMMON(Q) PAXG_DEFINE_KEY_COMMON(R) PAXG_DEFINE_KEY_COMMON(S) PAXG_DEFINE_KEY_COMMON(T)
+ PAXG_DEFINE_KEY_COMMON(U) PAXG_DEFINE_KEY_COMMON(V) PAXG_DEFINE_KEY_COMMON(W) PAXG_DEFINE_KEY_COMMON(X)
+ PAXG_DEFINE_KEY_COMMON(Y) PAXG_DEFINE_KEY_COMMON(Z)
+ constexpr InputKey PAXG_KEY_LEFT = s3d::KeyLeft;
+ constexpr InputKey PAXG_KEY_RIGHT = s3d::KeyRight;
+ constexpr InputKey PAXG_KEY_DOWN = s3d::KeyDown;
+ constexpr InputKey PAXG_KEY_UP = s3d::KeyUp;
+#undef PAXG_DEFINE_KEY_COMMON
#elif defined(PAXS_USING_DXLIB)
using InputKey = InputStruct;
-#define SIV3D_KEY_0 InputKey{KEY_INPUT_0}
-#define SIV3D_KEY_1 InputKey{KEY_INPUT_1}
-#define SIV3D_KEY_2 InputKey{KEY_INPUT_2}
-#define SIV3D_KEY_3 InputKey{KEY_INPUT_3}
-#define SIV3D_KEY_4 InputKey{KEY_INPUT_4}
-#define SIV3D_KEY_5 InputKey{KEY_INPUT_5}
-#define SIV3D_KEY_6 InputKey{KEY_INPUT_6}
-#define SIV3D_KEY_7 InputKey{KEY_INPUT_7}
-#define SIV3D_KEY_8 InputKey{KEY_INPUT_8}
-#define SIV3D_KEY_9 InputKey{KEY_INPUT_9}
-#define SIV3D_KEY_A InputKey{KEY_INPUT_A}
-#define SIV3D_KEY_B InputKey{KEY_INPUT_B}
-#define SIV3D_KEY_C InputKey{KEY_INPUT_C}
-#define SIV3D_KEY_D InputKey{KEY_INPUT_D}
-#define SIV3D_KEY_E InputKey{KEY_INPUT_E}
-#define SIV3D_KEY_F InputKey{KEY_INPUT_F}
-#define SIV3D_KEY_G InputKey{KEY_INPUT_G}
-#define SIV3D_KEY_H InputKey{KEY_INPUT_H}
-#define SIV3D_KEY_I InputKey{KEY_INPUT_I}
-#define SIV3D_KEY_J InputKey{KEY_INPUT_J}
-#define SIV3D_KEY_K InputKey{KEY_INPUT_K}
-#define SIV3D_KEY_L InputKey{KEY_INPUT_L}
-#define SIV3D_KEY_M InputKey{KEY_INPUT_M}
-#define SIV3D_KEY_N InputKey{KEY_INPUT_N}
-#define SIV3D_KEY_O InputKey{KEY_INPUT_O}
-#define SIV3D_KEY_P InputKey{KEY_INPUT_P}
-#define SIV3D_KEY_Q InputKey{KEY_INPUT_Q}
-#define SIV3D_KEY_R InputKey{KEY_INPUT_R}
-#define SIV3D_KEY_S InputKey{KEY_INPUT_S}
-#define SIV3D_KEY_T InputKey{KEY_INPUT_T}
-#define SIV3D_KEY_U InputKey{KEY_INPUT_U}
-#define SIV3D_KEY_V InputKey{KEY_INPUT_V}
-#define SIV3D_KEY_W InputKey{KEY_INPUT_W}
-#define SIV3D_KEY_X InputKey{KEY_INPUT_X}
-#define SIV3D_KEY_Y InputKey{KEY_INPUT_Y}
-#define SIV3D_KEY_Z InputKey{KEY_INPUT_Z}
-#define SIV3D_KEY_LEFT InputKey{KEY_INPUT_LEFT}
-#define SIV3D_KEY_RIGHT InputKey{KEY_INPUT_RIGHT}
-#define SIV3D_KEY_DOWN InputKey{KEY_INPUT_DOWN}
-#define SIV3D_KEY_UP InputKey{KEY_INPUT_UP}
+#define PAXG_DXLIB_KEY(name) \
+ inline const InputKey PAXG_KEY_##name = InputKey{ KEY_INPUT_##name };
+
+ PAXG_DXLIB_KEY(0) PAXG_DXLIB_KEY(1) PAXG_DXLIB_KEY(2) PAXG_DXLIB_KEY(3)
+ PAXG_DXLIB_KEY(4) PAXG_DXLIB_KEY(5) PAXG_DXLIB_KEY(6) PAXG_DXLIB_KEY(7)
+ PAXG_DXLIB_KEY(8) PAXG_DXLIB_KEY(9)
+ PAXG_DXLIB_KEY(A) PAXG_DXLIB_KEY(B) PAXG_DXLIB_KEY(C) PAXG_DXLIB_KEY(D)
+ PAXG_DXLIB_KEY(E) PAXG_DXLIB_KEY(F) PAXG_DXLIB_KEY(G) PAXG_DXLIB_KEY(H)
+ PAXG_DXLIB_KEY(I) PAXG_DXLIB_KEY(J) PAXG_DXLIB_KEY(K) PAXG_DXLIB_KEY(L)
+ PAXG_DXLIB_KEY(M) PAXG_DXLIB_KEY(N) PAXG_DXLIB_KEY(O) PAXG_DXLIB_KEY(P)
+ PAXG_DXLIB_KEY(Q) PAXG_DXLIB_KEY(R) PAXG_DXLIB_KEY(S) PAXG_DXLIB_KEY(T)
+ PAXG_DXLIB_KEY(U) PAXG_DXLIB_KEY(V) PAXG_DXLIB_KEY(W) PAXG_DXLIB_KEY(X)
+ PAXG_DXLIB_KEY(Y) PAXG_DXLIB_KEY(Z)
+ PAXG_DXLIB_KEY(LEFT)
+ PAXG_DXLIB_KEY(RIGHT)
+ PAXG_DXLIB_KEY(DOWN)
+ PAXG_DXLIB_KEY(UP)
+#undef PAXG_DXLIB_KEY
#elif defined(PAXS_USING_SFML)
using InputKey = InputStruct;
-#define SIV3D_KEY_0 InputKey{sf::Keyboard::Key::Num0}
-#define SIV3D_KEY_1 InputKey{sf::Keyboard::Key::Num1}
-#define SIV3D_KEY_2 InputKey{sf::Keyboard::Key::Num2}
-#define SIV3D_KEY_3 InputKey{sf::Keyboard::Key::Num3}
-#define SIV3D_KEY_4 InputKey{sf::Keyboard::Key::Num4}
-#define SIV3D_KEY_5 InputKey{sf::Keyboard::Key::Num5}
-#define SIV3D_KEY_6 InputKey{sf::Keyboard::Key::Num6}
-#define SIV3D_KEY_7 InputKey{sf::Keyboard::Key::Num7}
-#define SIV3D_KEY_8 InputKey{sf::Keyboard::Key::Num8}
-#define SIV3D_KEY_9 InputKey{sf::Keyboard::Key::Num9}
-#define SIV3D_KEY_A InputKey{sf::Keyboard::Key::A}
-#define SIV3D_KEY_B InputKey{sf::Keyboard::Key::B}
-#define SIV3D_KEY_C InputKey{sf::Keyboard::Key::C}
-#define SIV3D_KEY_D InputKey{sf::Keyboard::Key::D}
-#define SIV3D_KEY_E InputKey{sf::Keyboard::Key::E}
-#define SIV3D_KEY_F InputKey{sf::Keyboard::Key::F}
-#define SIV3D_KEY_G InputKey{sf::Keyboard::Key::G}
-#define SIV3D_KEY_H InputKey{sf::Keyboard::Key::H}
-#define SIV3D_KEY_I InputKey{sf::Keyboard::Key::I}
-#define SIV3D_KEY_J InputKey{sf::Keyboard::Key::J}
-#define SIV3D_KEY_K InputKey{sf::Keyboard::Key::K}
-#define SIV3D_KEY_L InputKey{sf::Keyboard::Key::L}
-#define SIV3D_KEY_M InputKey{sf::Keyboard::Key::M}
-#define SIV3D_KEY_N InputKey{sf::Keyboard::Key::N}
-#define SIV3D_KEY_O InputKey{sf::Keyboard::Key::O}
-#define SIV3D_KEY_P InputKey{sf::Keyboard::Key::P}
-#define SIV3D_KEY_Q InputKey{sf::Keyboard::Key::Q}
-#define SIV3D_KEY_R InputKey{sf::Keyboard::Key::R}
-#define SIV3D_KEY_S InputKey{sf::Keyboard::Key::S}
-#define SIV3D_KEY_T InputKey{sf::Keyboard::Key::T}
-#define SIV3D_KEY_U InputKey{sf::Keyboard::Key::U}
-#define SIV3D_KEY_V InputKey{sf::Keyboard::Key::V}
-#define SIV3D_KEY_W InputKey{sf::Keyboard::Key::W}
-#define SIV3D_KEY_X InputKey{sf::Keyboard::Key::X}
-#define SIV3D_KEY_Y InputKey{sf::Keyboard::Key::Y}
-#define SIV3D_KEY_Z InputKey{sf::Keyboard::Key::Z}
-#define SIV3D_KEY_LEFT InputKey{sf::Keyboard::Key::Left}
-#define SIV3D_KEY_RIGHT InputKey{sf::Keyboard::Key::Right}
-#define SIV3D_KEY_DOWN InputKey{sf::Keyboard::Key::Down}
-#define SIV3D_KEY_UP InputKey{sf::Keyboard::Key::Up}
+ inline const InputKey PAXG_KEY_0 = InputKey{sf::Keyboard::Key::Num0};
+ inline const InputKey PAXG_KEY_1 = InputKey{sf::Keyboard::Key::Num1};
+ inline const InputKey PAXG_KEY_2 = InputKey{sf::Keyboard::Key::Num2};
+ inline const InputKey PAXG_KEY_3 = InputKey{sf::Keyboard::Key::Num3};
+ inline const InputKey PAXG_KEY_4 = InputKey{sf::Keyboard::Key::Num4};
+ inline const InputKey PAXG_KEY_5 = InputKey{sf::Keyboard::Key::Num5};
+ inline const InputKey PAXG_KEY_6 = InputKey{sf::Keyboard::Key::Num6};
+ inline const InputKey PAXG_KEY_7 = InputKey{sf::Keyboard::Key::Num7};
+ inline const InputKey PAXG_KEY_8 = InputKey{sf::Keyboard::Key::Num8};
+ inline const InputKey PAXG_KEY_9 = InputKey{sf::Keyboard::Key::Num9};
+#define PAXG_SFML_ALPHA(name) inline const InputKey PAXG_KEY_##name = InputKey{ sf::Keyboard::Key::name };
+ PAXG_SFML_ALPHA(A) PAXG_SFML_ALPHA(B) PAXG_SFML_ALPHA(C) PAXG_SFML_ALPHA(D)
+ PAXG_SFML_ALPHA(E) PAXG_SFML_ALPHA(F) PAXG_SFML_ALPHA(G) PAXG_SFML_ALPHA(H)
+ PAXG_SFML_ALPHA(I) PAXG_SFML_ALPHA(J) PAXG_SFML_ALPHA(K) PAXG_SFML_ALPHA(L)
+ PAXG_SFML_ALPHA(M) PAXG_SFML_ALPHA(N) PAXG_SFML_ALPHA(O) PAXG_SFML_ALPHA(P)
+ PAXG_SFML_ALPHA(Q) PAXG_SFML_ALPHA(R) PAXG_SFML_ALPHA(S) PAXG_SFML_ALPHA(T)
+ PAXG_SFML_ALPHA(U) PAXG_SFML_ALPHA(V) PAXG_SFML_ALPHA(W) PAXG_SFML_ALPHA(X)
+ PAXG_SFML_ALPHA(Y) PAXG_SFML_ALPHA(Z)
+#undef PAXG_SFML_ALPHA
+ inline const InputKey PAXG_KEY_LEFT = InputKey{sf::Keyboard::Key::Left};
+ inline const InputKey PAXG_KEY_RIGHT = InputKey{sf::Keyboard::Key::Right};
+ inline const InputKey PAXG_KEY_DOWN = InputKey{sf::Keyboard::Key::Down};
+ inline const InputKey PAXG_KEY_UP = InputKey{sf::Keyboard::Key::Up};
#else
using InputKey = InputStruct;
-#define SIV3D_KEY_0 InputStruct{}
-#define SIV3D_KEY_1 InputStruct{}
-#define SIV3D_KEY_2 InputStruct{}
-#define SIV3D_KEY_3 InputStruct{}
-#define SIV3D_KEY_4 InputStruct{}
-#define SIV3D_KEY_5 InputStruct{}
-#define SIV3D_KEY_6 InputStruct{}
-#define SIV3D_KEY_7 InputStruct{}
-#define SIV3D_KEY_8 InputStruct{}
-#define SIV3D_KEY_9 InputStruct{}
-#define SIV3D_KEY_A InputStruct{}
-#define SIV3D_KEY_B InputStruct{}
-#define SIV3D_KEY_C InputStruct{}
-#define SIV3D_KEY_D InputStruct{}
-#define SIV3D_KEY_E InputStruct{}
-#define SIV3D_KEY_F InputStruct{}
-#define SIV3D_KEY_G InputStruct{}
-#define SIV3D_KEY_H InputStruct{}
-#define SIV3D_KEY_I InputStruct{}
-#define SIV3D_KEY_J InputStruct{}
-#define SIV3D_KEY_K InputStruct{}
-#define SIV3D_KEY_L InputStruct{}
-#define SIV3D_KEY_M InputStruct{}
-#define SIV3D_KEY_N InputStruct{}
-#define SIV3D_KEY_O InputStruct{}
-#define SIV3D_KEY_P InputStruct{}
-#define SIV3D_KEY_Q InputStruct{}
-#define SIV3D_KEY_R InputStruct{}
-#define SIV3D_KEY_S InputStruct{}
-#define SIV3D_KEY_T InputStruct{}
-#define SIV3D_KEY_U InputStruct{}
-#define SIV3D_KEY_V InputStruct{}
-#define SIV3D_KEY_W InputStruct{}
-#define SIV3D_KEY_X InputStruct{}
-#define SIV3D_KEY_Y InputStruct{}
-#define SIV3D_KEY_Z InputStruct{}
-#define SIV3D_KEY_LEFT InputStruct{}
-#define SIV3D_KEY_RIGHT InputStruct{}
-#define SIV3D_KEY_DOWN InputStruct{}
-#define SIV3D_KEY_UP InputStruct{}
+ // Null implementation
+ #define PAXG_DEFINE_KEY(name) inline const InputKey PAXG_KEY_##name = InputStruct{};
+ PAXG_KEY_LIST(PAXG_DEFINE_KEY)
+ #undef PAXG_DEFINE_KEY
#endif
+#undef PAXG_KEY_LIST
+
class Key {
public:
Key() = default;
@@ -252,25 +178,71 @@ namespace paxs {
bool isPressed() const {
return key.pressed();
}
+
+ /// @brief 修飾キー(Shift)が押されているかチェック
+ /// @brief Check if Shift modifier key is pressed
+ static bool isShiftPressed() {
+#if defined(PAXS_USING_SIV3D)
+ return s3d::KeyShift.pressed();
+#elif defined(PAXS_USING_DXLIB)
+ return (DxLib::CheckHitKey(KEY_INPUT_LSHIFT) == 1 || DxLib::CheckHitKey(KEY_INPUT_RSHIFT) == 1);
+#elif defined(PAXS_USING_SFML)
+ return (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LShift) || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::RShift));
+#else
+ return false;
+#endif
+ }
+
+ /// @brief 修飾キー(Ctrl)が押されているかチェック
+ /// @brief Check if Ctrl modifier key is pressed
+ static bool isCtrlPressed() {
+#if defined(PAXS_USING_SIV3D)
+ return s3d::KeyControl.pressed();
+#elif defined(PAXS_USING_DXLIB)
+ return (DxLib::CheckHitKey(KEY_INPUT_LCONTROL) == 1 || DxLib::CheckHitKey(KEY_INPUT_RCONTROL) == 1);
+#elif defined(PAXS_USING_SFML)
+ return (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LControl) || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::RControl));
+#else
+ return false;
+#endif
+ }
+
+ /// @brief 修飾キー(Alt)が押されているかチェック
+ /// @brief Check if Alt modifier key is pressed
+ static bool isAltPressed() {
+#if defined(PAXS_USING_SIV3D)
+ return s3d::KeyAlt.pressed();
+#elif defined(PAXS_USING_DXLIB)
+ return (DxLib::CheckHitKey(KEY_INPUT_LALT) == 1 || DxLib::CheckHitKey(KEY_INPUT_RALT) == 1);
+#elif defined(PAXS_USING_SFML)
+ return (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LAlt) || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::RAlt));
+#else
+ return false;
+#endif
+ }
+
+ /// @brief 修飾キー(Command/Super、macOS用)が押されているかチェック
+ /// @brief Check if Command/Super modifier key is pressed (for macOS)
+ static bool isCommandPressed() {
+#if defined(PAXS_USING_SIV3D)
+ return s3d::KeyCommand.pressed();
+#elif defined(PAXS_USING_DXLIB)
+ // DxLib does not support Command key
+ return false;
+#elif defined(PAXS_USING_SFML)
+ return (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LSystem) || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::RSystem));
+#else
+ return false;
+#endif
+ }
+
private:
InputKey key{};
};
- //enum class KeyCode {
- // A,
- // Left,
- // D,
- // Right,
- // S,
- // Down,
- // W,
- // Up,
- // Q,
- // E
- //};
-
- bool pressed(const std::vector& keys) {
- for (auto& key : keys) {
+ template
+ bool pressed(const std::array& keys) {
+ for (const auto& key : keys) {
if (key.isPressed()) return true;
}
return false;
@@ -278,31 +250,9 @@ namespace paxs {
class Coordinate {
public:
- double movement_size; // マップの移動量
-
- Coordinate(double movement_size, const paxs::MercatorDeg& coordinate_) : movement_size(movement_size), coordinate(coordinate_) {
- increase_x_keys.resize(2);
- increase_x_keys[0] = (Key(SIV3D_KEY_A));
- increase_x_keys[1] = (Key(SIV3D_KEY_LEFT));
-
- decrease_x_keys.resize(2);
- decrease_x_keys[0] = (Key(SIV3D_KEY_D));
- decrease_x_keys[1] = (Key(SIV3D_KEY_RIGHT));
-
- increase_y_keys.resize(2);
- increase_y_keys[0] = (Key(SIV3D_KEY_S));
- increase_y_keys[1] = (Key(SIV3D_KEY_DOWN));
+ Coordinate(const paxs::MercatorDeg& coordinate_)
+ : coordinate(coordinate_){}
- decrease_y_keys.resize(2);
- decrease_y_keys[0] = (Key(SIV3D_KEY_W));
- decrease_y_keys[1] = (Key(SIV3D_KEY_UP));
- }
- void update(const double width) {
- if (pressed(increase_x_keys)) increase_coordinate(coordinate.x, width);
- if (pressed(decrease_x_keys)) decrease_coordinate(coordinate.x, width);
- if (pressed(increase_y_keys)) increase_coordinate(coordinate.y, width);
- if (pressed(decrease_y_keys)) decrease_coordinate(coordinate.y, width);
- }
double getX() const {
return coordinate.x;
}
@@ -325,268 +275,8 @@ namespace paxs {
private:
paxs::MercatorDeg coordinate; // マップ座標の中央
- std::vector increase_x_keys;
- std::vector decrease_x_keys;
- std::vector increase_y_keys;
- std::vector decrease_y_keys;
-
- void increase_coordinate(double& value, const double width) {
- value -= (width / movement_size);
- if (value < -180.0) {
- value += 360.0;
- }
- }
- void decrease_coordinate(double& value, const double width) {
- value += (width / movement_size);
- if (value >= 180.0) {
- value -= 360.0;
- }
- }
- };
- // GUI で表示する地図の範囲を管理するクラス
- class MapView {
- private:
- // 中央の座標を指定
- Coordinate center = Coordinate(
- 200.0,
- paxs::EquirectangularDeg(paxs::Vector2(/*全世界*/ 100, 0)) // 韓国 128, 37 // 日本 135, 35 // 北海道 // 東アジア 127, 31, 75.0
- //paxs::Vector2(135.0, getLatitudeToMercatorY(35.0))
- ); // マップ座標の中央
- double height = 240.0; // 各国 16.0; // マップの高さ
-
- // 平城京
- //Coordinate center = Coordinate(135.807, 37.009/*getLatitudeToMercatorY(35)*/, 200.0); // マップ座標の中央
- //double width = 0.1; // マップの幅
-
- // マップの最大高さ
- double max_height =
-#ifdef PAXS_MAHOROBA
- 30.0;
-#else
- 240.0;
-#endif
- double min_height = 0.005; // マップの最小高さ
- double width = (height) / double(paxg::Window::height()) * double(paxg::Window::width()); // マップの高さ
- double expansion_size = 50.0; // マップの拡大量
- std::vector enl_keys; // 拡大キー
- std::vector esc_keys; // 縮小キー
-
-#ifdef __ANDROID__
- int touch_num = 0;
- int old_touch_num = 0;
- std::array, 3> pos;
- std::array, 3> old_pos;
-#endif
-
-
- public:
- MapView() {
- enl_keys.resize(1);
- enl_keys[0] = (Key(SIV3D_KEY_Q));
-
- esc_keys.resize(1);
- esc_keys[0] = (Key(SIV3D_KEY_E));
- }
- void update() {
- // マウスホイールで地図の拡大・縮小
- {
- height *= (1.0 + (paxg::Mouse::getInstance()->getWheelRotVol() / 10.0));
- height = (std::clamp)(height, min_height, max_height);
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
-#ifdef __ANDROID__
- static int old_touch_num = 0;
- static int touch_num = 0;
- static std::array, 3> pos = { paxs::Vector2{0,0},paxs::Vector2{0,0},paxs::Vector2{0,0} };
- static std::array, 3> old_pos = { paxs::Vector2{0,0},paxs::Vector2{0,0},paxs::Vector2{0,0} };
-#else
- if (paxg::Mouse::getInstance()->pressedLeft2()) {
- center.setX(
- center.getX() +
- height / static_cast(paxg::Window::height()) *
- static_cast(paxg::Mouse::getInstance()->getPosXBefore1Frame() - paxg::Mouse::getInstance()->getPosX()));
- center.setY(
- center.getY() +
- height / static_cast(paxg::Window::height()) *
- static_cast(paxg::Mouse::getInstance()->getPosY() - paxg::Mouse::getInstance()->getPosYBefore1Frame()));
-
- if (center.getX() < -180.0) {
- center.setX(center.getX() + 360.0);
- }
- if (center.getX() >= 180.0) {
- center.setX(center.getX() - 360.0);
- }
- if (center.getY() < -180.0) {
- center.setY(center.getY() - 180.0);
- }
- if (center.getY() > 180.0) {
- center.setY(center.getY() + 180.0);
- }
-
- }
-#endif
-
-#ifdef __ANDROID__
- old_touch_num = touch_num;
- old_pos = pos;
-
- touch_num = DxLib::GetTouchInputNum();
-
-
- for (int i = 0; i < touch_num; i++) {
- if (i >= 3) break;
- int pos_x = 0, pos_y = 0;
-
- DxLib::GetTouchInput(i, &pos_x, &pos_y, NULL, NULL);
- pos[i] = Vector2(pos_x, pos_y);
-
- DxLib::DrawCircle(pos_x, pos_y, 40, GetColor(230, 230, 240), TRUE);
- }
-
- if (old_touch_num == 1 && touch_num == 1) {
- center.setX(center.getX() +
- height / static_cast(paxg::Window::height()) *
- static_cast(old_pos[0].x - pos[0].x));
- center.setY(center.getY() +
- height / static_cast(paxg::Window::height()) *
- static_cast(pos[0].y - old_pos[0].y));
-
- if (center.getX() < -180.0) {
- center.setX(center.getX() + 360.0);
- }
- if (center.getX() >= 180.0) {
- center.setX(center.getX() - 360.0);
- }
- if (center.getY() < -180.0) {
- center.setY(center.getY() - 180.0);
- }
- if (center.getY() > 180.0) {
- center.setY(center.getY() + 180.0);
- }
-
- }
- else if (old_touch_num == 2 && touch_num == 2) {
-
- const int len = (pos[0].x - pos[1].x) * (pos[0].x - pos[1].x) + (pos[0].y - pos[1].y) * (pos[0].y - pos[1].y);
- const int old_len = (old_pos[0].x - old_pos[1].x) * (old_pos[0].x - old_pos[1].x) + (old_pos[0].y - old_pos[1].y) * (old_pos[0].y - old_pos[1].y);
- const int sub = std::abs(len - old_len);
-
- if (len > old_len) {
- if (height > min_height) {
- height -= ((height * (1.0 + (sub / 6000.0))) / expansion_size);
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- if (height < min_height) {
- height = min_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- }
- else if (len < old_len) {
- // 画面広く
- if (height < max_height) {
- height += ((height * (1.0 + (sub / 6000.0))) / expansion_size);
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- if (height > max_height) {
- height = max_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- }
-
- }
-#endif
-
- center.update(height);
- if (pressed(enl_keys)) {
- if (height > min_height) {
- height -= (height / expansion_size);
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- if (height < min_height) {
- height = min_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- }
- if (pressed(esc_keys)) {
- if (height < max_height) {
- height += (height / expansion_size);
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- if (height > max_height) {
- height = max_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- }
-
- // 位置調整
- if (height < min_height) {
- height = min_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
- if (height > max_height) {
- height = max_height;
- width = (height) / double(paxg::Window::height()) * double(paxg::Window::width());
- }
-
-#ifdef PAXS_MAHOROBA
- constexpr double west_max = (208.0 / 256.0) * 360.0 - 180.0;
- constexpr double east_max = (256.0 / 256.0) * 360.0 - 180.0;
- // 位置調整
- if (center.getX() - width / 2 < west_max) {
- center.setX(west_max + width / 2);
- }
- if (center.getX() + width / 2 > east_max) {
- center.setX(east_max - width / 2);
- }
-
- constexpr double north_max = (1.0 - (80.0 / 256.0)) * 360.0 - 180.0;
- constexpr double south_max = (1.0 - (128.0 / 256.0)) * 360.0 - 180.0;
-#else
- constexpr double north_max = (1.0 - (0.0 / 256.0)) * 360.0 - 180.0;
- constexpr double south_max = (1.0 - (256.0 / 256.0)) * 360.0 - 180.0;
-#endif
- // 位置調整
- if (center.getY() + height / 2 > north_max) {
- center.setY(north_max - height / 2);
- }
- if (center.getY() - height / 2 < south_max) {
- center.setY(south_max + height / 2);
- }
-
-
-
- } // Update
-
- void setWidth(const double width_) {
- width = width_;
- }
- void setHeight(const double height_) {
- height = height_;
- }
- void setCenterX(const double x_) {
- center.setX(x_);
- }
- void setCenterY(const double y_) {
- center.setY(y_);
- }
-
- Coordinate& getCoordinate() {
- return center;
- }
- double getCenterX() const {
- return center.getX();
- }
- double getCenterY() const {
- return center.getY();
- }
- double getWidth() const {
- return width;
- }
- double getHeight() const {
- return height;
- }
};
}
-#endif // !PAX_SAPIENTICA_SIV3D_KEY_HPP
+#endif // !PAX_GRAPHICA_KEY_HPP
diff --git a/Library/PAX_GRAPHICA/Line.hpp b/Library/PAX_GRAPHICA/Line.hpp
index 57488a402..b412ac7fa 100644
--- a/Library/PAX_GRAPHICA/Line.hpp
+++ b/Library/PAX_GRAPHICA/Line.hpp
@@ -12,9 +12,7 @@
#ifndef PAX_GRAPHICA_LINE_HPP
#define PAX_GRAPHICA_LINE_HPP
-/*##########################################################################################
-
-##########################################################################################*/
+#include
#if defined(PAXS_USING_SIV3D)
#include
@@ -25,7 +23,6 @@
#endif
#include
-#include
#include
#include
@@ -37,25 +34,29 @@ namespace paxg {
s3d::Line line{};
constexpr Line(const float sx, const float sy, const float ex, const float ey)
: line(sx, sy, ex, ey) {}
- constexpr Line(const float sx, const float sy, const Vec2i& e)
+ constexpr Line(const float sx, const float sy, const paxg::Vec2i& e)
: line(sx, sy, e.x(), e.y()) {}
- constexpr Line(const Vec2i& s, const Vec2i& e)
+ constexpr Line(const paxg::Vec2i& s, const paxg::Vec2i& e)
: line(s.x(), s.y(), e.x(), e.y()) {}
void draw(const double thickness, const paxg::Color& color) const {
line.draw(thickness, color.color);
}
+ void drawArrow(const double thickness, const paxg::Vec2f& arrowSize, const paxg::Color& color) const {
+ line.drawArrow(thickness, s3d::Vec2(arrowSize.x(), arrowSize.y()), color.color);
+ }
+
#elif defined(PAXS_USING_DXLIB)
float x0{}, y0{}, w0{}, h0{};
constexpr Line(const float x, const float y, const float w, const float h) :
x0(x), y0(y), w0(w), h0(h) {}
- constexpr Line(const Vec2i& pos, const Vec2i& size)
+ constexpr Line(const paxg::Vec2i& pos, const paxg::Vec2i& size)
: x0(static_cast(pos.x())), y0(static_cast(pos.y())),
w0(static_cast(size.x())), h0(static_cast(size.y())) {}
- constexpr Line(const Vec2i& pos, const float w, const float h) :
+ constexpr Line(const paxg::Vec2i& pos, const float w, const float h) :
x0(static_cast(pos.x())), y0(static_cast(pos.y())), w0(w), h0(h) {}
- constexpr Line(const float x, const float y, const Vec2i& size)
+ constexpr Line(const float x, const float y, const paxg::Vec2i& size)
: x0(x), y0(y), w0(static_cast(size.x())), h0(static_cast(size.y())) {}
void draw(const double thickness, const paxg::Color& color) const {
@@ -75,17 +76,53 @@ namespace paxg {
}
}
+ void drawArrow(const double thickness, const paxg::Vec2f& arrowSize, const paxg::Color& color) const {
+ // Draw the main line
+ draw(thickness, color);
+
+ // Calculate direction vector
+ const float dx = w0 - x0;
+ const float dy = h0 - y0;
+ const float length = std::sqrt(dx * dx + dy * dy);
+ if (length < 0.001f) return; // Too short to draw arrow
+
+ // Normalize direction
+ const float ndx = dx / length;
+ const float ndy = dy / length;
+
+ // Perpendicular vector
+ const float pdx = -ndy;
+ const float pdy = ndx;
+
+ // Arrow head vertices
+ const float tipX = w0;
+ const float tipY = h0;
+ const float baseX = w0 - ndx * arrowSize.y();
+ const float baseY = h0 - ndy * arrowSize.y();
+ const float leftX = baseX + pdx * arrowSize.x() / 2;
+ const float leftY = baseY + pdy * arrowSize.x() / 2;
+ const float rightX = baseX - pdx * arrowSize.x() / 2;
+ const float rightY = baseY - pdy * arrowSize.x() / 2;
+
+ // Draw arrow head lines
+ const unsigned int dxColor = DxLib::GetColor(color.r, color.g, color.b);
+ DxLib::DrawLine(static_cast(tipX), static_cast(tipY),
+ static_cast(leftX), static_cast(leftY), dxColor);
+ DxLib::DrawLine(static_cast(tipX), static_cast(tipY),
+ static_cast(rightX), static_cast(rightY), dxColor);
+ }
+
#elif defined(PAXS_USING_SFML)
sf::Vertex line[2]{};
Line(const float sx, const float sy, const float ex, const float ey) {
line[0].position = sf::Vector2f(sx, sy);
line[1].position = sf::Vector2f(ex, ey);
}
- Line(const float sx, const float sy, const Vec2i& e) {
+ Line(const float sx, const float sy, const paxg::Vec2i& e) {
line[0].position = sf::Vector2f(sx, sy);
line[1].position = sf::Vector2f(static_cast(e.x()), static_cast(e.y()));
}
- Line(const Vec2i& s, const Vec2i& e) {
+ Line(const paxg::Vec2i& s, const paxg::Vec2i& e) {
line[0].position = sf::Vector2f(static_cast(s.x()), static_cast(s.y()));
line[1].position = sf::Vector2f(static_cast(e.x()), static_cast(e.y()));
}
@@ -93,21 +130,69 @@ namespace paxg {
void draw(const double /*thickness*/, const paxg::Color& color) {
line[0].color = color;
line[1].color = color;
- Window::window.draw(line, 2, sf::PrimitiveType::Lines);
+ paxg::Window::window().draw(line, 2, sf::PrimitiveType::Lines);
+ }
+
+ void drawArrow(const double thickness, const paxg::Vec2f& arrowSize, const paxg::Color& color) {
+ // Draw the main line
+ draw(thickness, color);
+
+ // Calculate direction vector
+ const float dx = line[1].position.x - line[0].position.x;
+ const float dy = line[1].position.y - line[0].position.y;
+ const float length = std::sqrt(dx * dx + dy * dy);
+ if (length < 0.001f) return; // Too short to draw arrow
+
+ // Normalize direction
+ const float ndx = dx / length;
+ const float ndy = dy / length;
+
+ // Perpendicular vector
+ const float pdx = -ndy;
+ const float pdy = ndx;
+
+ // Arrow head vertices
+ const float tipX = line[1].position.x;
+ const float tipY = line[1].position.y;
+ const float baseX = tipX - ndx * arrowSize.y();
+ const float baseY = tipY - ndy * arrowSize.y();
+ const float leftX = baseX + pdx * arrowSize.x() / 2;
+ const float leftY = baseY + pdy * arrowSize.x() / 2;
+ const float rightX = baseX - pdx * arrowSize.x() / 2;
+ const float rightY = baseY - pdy * arrowSize.x() / 2;
+
+ // Draw arrow head lines
+ sf::Vertex arrowLeft[2];
+ arrowLeft[0].position = sf::Vector2f(tipX, tipY);
+ arrowLeft[0].color = color;
+ arrowLeft[1].position = sf::Vector2f(leftX, leftY);
+ arrowLeft[1].color = color;
+
+ sf::Vertex arrowRight[2];
+ arrowRight[0].position = sf::Vector2f(tipX, tipY);
+ arrowRight[0].color = color;
+ arrowRight[1].position = sf::Vector2f(rightX, rightY);
+ arrowRight[1].color = color;
+
+ paxg::Window::window().draw(arrowLeft, 2, sf::PrimitiveType::Lines);
+ paxg::Window::window().draw(arrowRight, 2, sf::PrimitiveType::Lines);
}
#else
float sx0{}, sy0{}, ex0{}, ey0{};
constexpr Line(const float sx, const float sy, const float ex, const float ey)
: sx0(sx), sy0(sy), ex0(ex), ey0(ey) {}
- constexpr Line(const float sx, const float sy, const Vec2i& e)
+ constexpr Line(const float sx, const float sy, const paxg::Vec2i& e)
: sx0(sx), sy0(sy), ex0(static_cast(e.x())), ey0(static_cast(e.y())) {}
- constexpr Line(const Vec2i& s, const Vec2i& e)
+ constexpr Line(const paxg::Vec2i& s, const paxg::Vec2i& e)
: sx0(static_cast(s.x())), sy0(static_cast(s.y())),
ex0(static_cast(e.x())), ey0(static_cast(e.y())) {}
void draw([[maybe_unused]] const double thickness, [[maybe_unused]] const paxg::Color& color) const {
}
+
+ void drawArrow([[maybe_unused]] const double thickness, [[maybe_unused]] const paxg::Vec2f& arrowSize, [[maybe_unused]] const paxg::Color& color) const {
+ }
#endif
};
}
diff --git a/Library/PAX_MAHOROBA/Mock.hpp b/Library/PAX_GRAPHICA/Mock.hpp
similarity index 97%
rename from Library/PAX_MAHOROBA/Mock.hpp
rename to Library/PAX_GRAPHICA/Mock.hpp
index a40f8c089..246d71a19 100644
--- a/Library/PAX_MAHOROBA/Mock.hpp
+++ b/Library/PAX_GRAPHICA/Mock.hpp
@@ -9,16 +9,11 @@
##########################################################################################*/
-#ifndef PAX_MAHOROBA_MOCK_HPP
-#define PAX_MAHOROBA_MOCK_HPP
-
-/*##########################################################################################
-
-##########################################################################################*/
+#ifndef PAX_GRAPHICA_MOCK_HPP
+#define PAX_GRAPHICA_MOCK_HPP
#include
#include
-#include
namespace s3d
{
@@ -513,4 +508,4 @@ namespace s3d
};
}
-#endif // !PAX_MAHOROBA_MOCK_HPP
+#endif // !PAX_GRAPHICA_MOCK_HPP
diff --git a/Library/PAX_GRAPHICA/Mouse.hpp b/Library/PAX_GRAPHICA/Mouse.hpp
index ba7014149..645d95fea 100644
--- a/Library/PAX_GRAPHICA/Mouse.hpp
+++ b/Library/PAX_GRAPHICA/Mouse.hpp
@@ -12,9 +12,7 @@
#ifndef PAX_GRAPHICA_MOUSE_HPP
#define PAX_GRAPHICA_MOUSE_HPP
-/*##########################################################################################
-
-##########################################################################################*/
+#include
#if defined(PAXS_USING_SIV3D)
#include
@@ -22,14 +20,9 @@
#include
#elif defined(PAXS_USING_SFML)
#include
-#endif
-
-#if defined(PAXS_USING_SFML)
#include
#endif
-#include
-#include
#include
#include
@@ -69,6 +62,13 @@ namespace paxg {
bool getLeft() const {
return left;
}
+ bool getRight() const {
+ return right;
+ }
+ bool getMiddle() const {
+ return middle;
+ }
+
// 離した瞬間
bool upLeft() const {
return (left_before_1frame && !left);
@@ -92,19 +92,45 @@ namespace paxg {
#if defined(PAXS_USING_SIV3D)
wheel_rot_vol = static_cast(s3d::Mouse::Wheel());
left = s3d::MouseL.pressed();
+ right = s3d::MouseR.pressed();
+ middle = s3d::MouseM.pressed();
pos_x = s3d::Cursor::Pos().x;
pos_y = s3d::Cursor::Pos().y;
#elif defined(PAXS_USING_DXLIB)
wheel_rot_vol = DxLib::GetMouseWheelRotVol();
- left = ((DxLib::GetMouseInput() & MOUSE_INPUT_LEFT) != 0);
+ int mouse_input = DxLib::GetMouseInput();
+ left = ((mouse_input & MOUSE_INPUT_LEFT) != 0);
+ right = ((mouse_input & MOUSE_INPUT_RIGHT) != 0);
+ middle = ((mouse_input & MOUSE_INPUT_MIDDLE) != 0);
if (DxLib::GetMousePoint(&pos_x, &pos_y) == -1) {
pos_x = pos_y = 0;
}
#elif defined(PAXS_USING_SFML)
wheel_rot_vol = static_cast(paxg::SFML_Event::getInstance()->wheel_delta);
left = sf::Mouse::isButtonPressed(sf::Mouse::Button::Left);
- pos_x = sf::Mouse::getPosition(Window::window).x;
- pos_y = sf::Mouse::getPosition(Window::window).y;
+ right = sf::Mouse::isButtonPressed(sf::Mouse::Button::Right);
+ middle = sf::Mouse::isButtonPressed(sf::Mouse::Button::Middle);
+ auto mouse_pos = sf::Mouse::getPosition(Window::window());
+ pos_x = mouse_pos.x;
+ pos_y = mouse_pos.y;
+#endif
+ }
+
+ // SFML 3.0.0: より安全なマウス位置取得(std::optional)
+ std::optional tryGetPosition() const {
+#if defined(PAXS_USING_SIV3D)
+ return Vec2i(s3d::Cursor::Pos().x, s3d::Cursor::Pos().y);
+#elif defined(PAXS_USING_DXLIB)
+ int x = 0, y = 0;
+ if (DxLib::GetMousePoint(&x, &y) == -1) {
+ return std::nullopt;
+ }
+ return Vec2i(x, y);
+#elif defined(PAXS_USING_SFML)
+ // SFML 3.0 では常に成功するが、一貫性のためoptionalを返す
+ return Vec2i(pos_x, pos_y);
+#else
+ return std::nullopt;
#endif
}
@@ -119,8 +145,8 @@ namespace paxg {
bool left_before_1frame = false; // 1 フレーム前の左クリック判定
bool left = false;
- //bool right = false; // 未使用
- //bool middle = false; // 未使用
+ bool right = false;
+ bool middle = false;
int wheel_rot_vol = 0;
diff --git a/Library/PAX_GRAPHICA/Network.hpp b/Library/PAX_GRAPHICA/Network.hpp
new file mode 100644
index 000000000..0b94e137a
--- /dev/null
+++ b/Library/PAX_GRAPHICA/Network.hpp
@@ -0,0 +1,176 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_NETWORK_HPP
+#define PAX_GRAPHICA_NETWORK_HPP
+
+#include
+
+#include
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#elif defined(PAXS_USING_SFML)
+#include
+#include
+#ifdef __APPLE__
+#include
+#elif defined(_WIN32)
+#include
+#include
+#pragma comment(lib, "wininet.lib")
+#elif defined(__linux__)
+#include
+#endif
+#endif
+
+namespace paxg {
+
+ /// @brief ネットワーク関連の機能を提供するクラス
+ class Network {
+ public:
+ /// @brief URLからファイルをダウンロードして保存する
+ /// @param url ダウンロード元のURL
+ /// @param save_path 保存先のファイルパス
+ /// @return 成功した場合true
+ static bool downloadFile(const std::string& url, const std::string& save_path) {
+#if defined(PAXS_USING_SIV3D)
+ const s3d::URL siv_url = s3d::Unicode::FromUTF8(url);
+ return s3d::SimpleHTTP::Save(siv_url, s3d::Unicode::FromUTF8(save_path)).isOK();
+#elif defined(PAXS_USING_SFML)
+#ifdef __APPLE__
+ // macOS: libcurl を使用
+ return downloadWithCurl(url, save_path);
+#elif defined(_WIN32)
+ // Windows: WinINet を使用
+ return downloadWithWinINet(url, save_path);
+#elif defined(__linux__)
+ // Linux: libcurl を使用
+ return downloadWithCurl(url, save_path);
+#else
+ (void)url;
+ (void)save_path;
+ return false;
+#endif
+#else
+ (void)url;
+ (void)save_path;
+ return false;
+#endif
+ }
+
+ private:
+#if defined(PAXS_USING_SFML)
+#if defined(__APPLE__) || defined(__linux__)
+ // libcurl を使用したダウンロード
+ static size_t writeCallback(void* contents, size_t size, size_t nmemb, void* userp) {
+ std::ofstream* out = static_cast(userp);
+ size_t total_size = size * nmemb;
+ out->write(static_cast(contents), total_size);
+ return total_size;
+ }
+
+ static bool downloadWithCurl(const std::string& url, const std::string& save_path) {
+ CURL* curl = curl_easy_init();
+ if (!curl) return false;
+
+ // 保存先のディレクトリを作成
+ std::filesystem::path path(save_path);
+ if (path.has_parent_path()) {
+ if (!paxs::File::createDirectories(path.parent_path().string())) {
+ curl_easy_cleanup(curl);
+ return false;
+ }
+ }
+
+ std::ofstream out_file(save_path, std::ios::binary);
+ if (!out_file.is_open()) {
+ curl_easy_cleanup(curl);
+ return false;
+ }
+
+ curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out_file);
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // SSL証明書の検証をスキップ(開発用)
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ CURLcode res = curl_easy_perform(curl);
+
+ out_file.close();
+ curl_easy_cleanup(curl);
+
+ if (res != CURLE_OK) {
+ std::filesystem::remove(save_path); // 失敗時はファイルを削除
+ return false;
+ }
+
+ return true;
+ }
+#endif
+
+#ifdef _WIN32
+ // WinINet を使用したダウンロード(Windows)
+ static bool downloadWithWinINet(const std::string& url, const std::string& save_path) {
+ // 保存先のディレクトリを作成
+ std::filesystem::path path(save_path);
+ if (path.has_parent_path()) {
+ if (!paxs::File::createDirectories(path.parent_path().string())) {
+ return false;
+ }
+ }
+
+ HINTERNET hInternet = InternetOpenA("PAX_SAPIENTICA", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ if (!hInternet) return false;
+
+ HINTERNET hUrl = InternetOpenUrlA(hInternet, url.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0);
+ if (!hUrl) {
+ InternetCloseHandle(hInternet);
+ return false;
+ }
+
+ std::ofstream out_file(save_path, std::ios::binary);
+ if (!out_file.is_open()) {
+ InternetCloseHandle(hUrl);
+ InternetCloseHandle(hInternet);
+ return false;
+ }
+
+ char buffer[4096];
+ DWORD bytes_read;
+ bool success = true;
+
+ while (InternetReadFile(hUrl, buffer, sizeof(buffer), &bytes_read) && bytes_read > 0) {
+ out_file.write(buffer, bytes_read);
+ if (out_file.fail()) {
+ success = false;
+ break;
+ }
+ }
+
+ out_file.close();
+ InternetCloseHandle(hUrl);
+ InternetCloseHandle(hInternet);
+
+ if (!success) {
+ std::filesystem::remove(save_path); // 失敗時はファイルを削除
+ }
+
+ return success;
+ }
+#endif
+#endif // PAXS_USING_SFML
+ };
+
+} // namespace paxg
+
+#endif // !PAX_GRAPHICA_NETWORK_HPP
diff --git a/Library/PAX_GRAPHICA/Photo360.hpp b/Library/PAX_GRAPHICA/Photo360.hpp
new file mode 100644
index 000000000..138c3da9c
--- /dev/null
+++ b/Library/PAX_GRAPHICA/Photo360.hpp
@@ -0,0 +1,260 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_PHOTO_360_HPP
+#define PAX_GRAPHICA_PHOTO_360_HPP
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#elif defined(PAXS_USING_DXLIB)
+#include
+#elif defined(PAXS_USING_SFML)
+#include
+#endif
+
+#include
+
+namespace paxg {
+
+ /// @brief 360度写真描画の設定
+ struct Photo360Config {
+ /// @brief カメラ設定
+ struct Camera {
+ double verticalFOV = 40.0; // 垂直視野角(度)
+ double posX = 0.0;
+ double posY = 3.0;
+ double posZ = -16.0;
+ } camera;
+
+ /// @brief 背景色設定
+ struct Background {
+ float r = 1.0f; // 赤成分
+ float g = 1.0f; // 緑成分
+ float b = 1.0f; // 青成分
+ float a = 0.0f; // 透明度
+ } background;
+
+ /// @brief 球体設定
+ struct Sphere {
+ double centerX = 0.0; // 球体中心X座標
+ double centerY = 2.0; // 球体中心Y座標
+ double initialZ = -15.5; // 初期Z座標
+ double radius = 2.0; // 球体半径
+ double moveSpeed = 1.2; // 移動速度(度/フレーム)
+ double zoomSpeed = 0.015; // ズーム速度
+ double zoomMin = -17.0; // ズーム最小値
+ double zoomMax = -14.2; // ズーム最大値
+ } sphere;
+
+ /// @brief ファイルパス設定
+ struct FilePaths {
+ std::string photoPath = "Data/360DegreePhotos/sky.jpg";
+ } paths;
+ };
+
+ /// @brief 360度写真描画クラス
+ class Photo360 {
+ private:
+ Photo360Config config_;
+
+#ifdef PAXS_USING_SIV3D
+ s3d::ColorF backgroundColor_;
+ s3d::Texture photo_texture_;
+ s3d::MSRenderTexture renderTexture_;
+ s3d::DebugCamera3D camera_;
+
+ // 360度写真の表示状態
+ double viewRotationX_ = 0.0;
+ double viewRotationY_ = 0.0;
+ double viewPositionZ_;
+#endif
+
+ public:
+ /// @brief デフォルト設定でコンストラクタ
+ Photo360() : Photo360(Photo360Config{}) {}
+
+ /// @brief カスタム設定でコンストラクタ
+ explicit Photo360(const Photo360Config& cfg) : config_(cfg) {
+#ifdef PAXS_USING_SIV3D
+ // 初期化
+ viewPositionZ_ = config_.sphere.initialZ;
+
+ // カメラ設定
+ camera_ = s3d::DebugCamera3D{
+ s3d::Graphics3D::GetRenderTargetSize(),
+ config_.camera.verticalFOV / 180.0 * s3d::Math::Pi,
+ s3d::Vec3{ config_.camera.posX, config_.camera.posY, config_.camera.posZ }
+ };
+
+ renderTexture_ = s3d::MSRenderTexture{
+ s3d::Size{s3d::Scene::Width(), s3d::Scene::Height()},
+ s3d::TextureFormat::R8G8B8A8_Unorm_SRGB,
+ s3d::HasDepth::Yes
+ };
+
+ // 背景色を設定
+ backgroundColor_ = s3d::ColorF{
+ config_.background.r,
+ config_.background.g,
+ config_.background.b,
+ config_.background.a
+ }.removeSRGBCurve();
+
+ // 360度写真をロード
+ const auto rootPath = s3d::Unicode::FromUTF8(paxs::AppConfig::getInstance()->getRootPath());
+ photo_texture_ = s3d::Texture(s3d::Image{ rootPath + s3d::Unicode::FromUTF8(config_.paths.photoPath) }.mirror());
+#endif
+ }
+
+ /// @brief 360度写真を更新・描画
+ void updateAndRender() {
+#ifdef PAXS_USING_SIV3D
+ s3d::Graphics3D::SetCameraTransform(camera_); // カメラ情報を設定
+
+ // 3D シーンの描画
+ const s3d::ScopedRenderTarget3D target{ renderTexture_.clear(backgroundColor_) };
+
+ {
+ // 太陽光の影響を与えないようにする
+ s3d::Graphics3D::SetGlobalAmbientColor(s3d::ColorF{ 1.0 });
+ s3d::Graphics3D::SetSunColor(s3d::ColorF{ 0.0 });
+
+ // カリングを無効にする
+ const s3d::ScopedRenderStates3D rs{ s3d::RasterizerState::SolidCullNone };
+
+ // キー入力による視点操作
+ if (s3d::KeyLeft.pressed() || s3d::KeyA.pressed())
+ viewRotationX_ += config_.sphere.moveSpeed;
+ if (s3d::KeyRight.pressed() || s3d::KeyD.pressed())
+ viewRotationX_ -= config_.sphere.moveSpeed;
+ if (s3d::KeyDown.pressed() || s3d::KeyS.pressed())
+ viewRotationY_ -= config_.sphere.moveSpeed;
+ if (s3d::KeyUp.pressed() || s3d::KeyW.pressed())
+ viewRotationY_ += config_.sphere.moveSpeed;
+
+ // ズーム操作
+ if (s3d::KeyQ.pressed()) {
+ viewPositionZ_ -= config_.sphere.zoomSpeed;
+ if (viewPositionZ_ < config_.sphere.zoomMin)
+ viewPositionZ_ = config_.sphere.zoomMin;
+ }
+ if (s3d::KeyE.pressed()) {
+ viewPositionZ_ += config_.sphere.zoomSpeed;
+ if (viewPositionZ_ > config_.sphere.zoomMax)
+ viewPositionZ_ = config_.sphere.zoomMax;
+ }
+
+ // 回転角度を 0-360 度の範囲に正規化
+ if (viewRotationX_ < 0.0) viewRotationX_ += 360.0;
+ if (viewRotationY_ < 0.0) viewRotationY_ += 360.0;
+ if (viewRotationX_ >= 360.0) viewRotationX_ -= 360.0;
+ if (viewRotationY_ >= 360.0) viewRotationY_ -= 360.0;
+
+ // 球体に 360 度写真を貼り付ける
+ s3d::Sphere{
+ config_.sphere.centerX,
+ config_.sphere.centerY,
+ viewPositionZ_,
+ config_.sphere.radius
+ }.draw(
+ s3d::Quaternion::RotateY(viewRotationX_ / 180.0 * s3d::Math::Pi) *
+ s3d::Quaternion::RotateX(viewRotationY_ / 180.0 * s3d::Math::Pi),
+ photo_texture_
+ );
+ }
+
+ // RenderTexture を 2D シーンに描画
+ s3d::Graphics3D::Flush(); // 現在までの 3D 描画を実行
+
+ static int count = 0;
+ // 画面サイズが変更されたら幅を変える
+ if (count >= 3) {
+ count = 0;
+ if (renderTexture_.width() != s3d::Scene::Width()
+ || renderTexture_.height() != s3d::Scene::Height()) {
+ renderTexture_ = s3d::MSRenderTexture{
+ s3d::Size{s3d::Scene::Width(), s3d::Scene::Height()},
+ s3d::TextureFormat::R8G8B8A8_Unorm_SRGB,
+ s3d::HasDepth::Yes
+ };
+ }
+ }
+ ++count;
+
+ renderTexture_.resolve(); // テクスチャを描画可能にする
+ renderTexture_.draw(0, 0); // 指定した大きさで描画
+#endif
+ }
+
+ /// @brief 設定を取得
+ const Photo360Config& getConfig() const { return config_; }
+
+ /// @brief 設定を更新
+ void setConfig(const Photo360Config& cfg) { config_ = cfg; }
+
+ /// @brief カメラ設定を更新
+ void setCameraConfig(const Photo360Config::Camera& cam) {
+ config_.camera = cam;
+#ifdef PAXS_USING_SIV3D
+ camera_ = s3d::DebugCamera3D{
+ s3d::Graphics3D::GetRenderTargetSize(),
+ config_.camera.verticalFOV / 180.0 * s3d::Math::Pi,
+ s3d::Vec3{ config_.camera.posX, config_.camera.posY, config_.camera.posZ }
+ };
+#endif
+ }
+
+ /// @brief 球体設定を更新
+ void setSphereConfig(const Photo360Config::Sphere& sph) {
+ config_.sphere = sph;
+ }
+
+ /// @brief 背景色設定を更新
+ void setBackgroundConfig(const Photo360Config::Background& bg) {
+ config_.background = bg;
+#ifdef PAXS_USING_SIV3D
+ backgroundColor_ = s3d::ColorF{
+ config_.background.r,
+ config_.background.g,
+ config_.background.b,
+ config_.background.a
+ }.removeSRGBCurve();
+#endif
+ }
+
+ /// @brief 現在の視点回転角度を取得(度)
+ void getViewRotation(double& x, double& y, double& z) const {
+#ifdef PAXS_USING_SIV3D
+ x = viewRotationX_;
+ y = viewRotationY_;
+ z = viewPositionZ_;
+#else
+ x = y = z = 0.0;
+#endif
+ }
+
+ /// @brief 視点回転角度を設定(度)
+ void setViewRotation(double x, double y, double z) {
+#ifdef PAXS_USING_SIV3D
+ viewRotationX_ = x;
+ viewRotationY_ = y;
+ viewPositionZ_ = z;
+#else
+ (void)x;
+ (void)y;
+ (void)z;
+#endif
+ }
+ };
+
+}
+
+#endif // !PAX_GRAPHICA_PHOTO_360_HPP
diff --git a/Library/PAX_GRAPHICA/Rect.hpp b/Library/PAX_GRAPHICA/Rect.hpp
index 2fff5187e..282a28bc7 100644
--- a/Library/PAX_GRAPHICA/Rect.hpp
+++ b/Library/PAX_GRAPHICA/Rect.hpp
@@ -12,10 +12,6 @@
#ifndef PAX_GRAPHICA_RECT_HPP
#define PAX_GRAPHICA_RECT_HPP
-/*##########################################################################################
-
-##########################################################################################*/
-
#if defined(PAXS_USING_SIV3D)
#include
#elif defined(PAXS_USING_DXLIB)
@@ -25,14 +21,14 @@
#endif
#include
-#include
#include
+#include
#include
#include
namespace paxg {
- struct Rect : public paxg::IDrawable {
+ struct Rect {
#if defined(PAXS_USING_SIV3D)
s3d::RectF rect{};
constexpr Rect() = default;
@@ -67,6 +63,10 @@ namespace paxg {
rect.w = size_.x();
rect.h = size_.y();
}
+ bool contains(const float x_, const float y_) const {
+ return (rect.x <= x_) && (x_ <= (rect.x + rect.w)) &&
+ (rect.y <= y_) && (y_ <= (rect.y + rect.h));
+ }
#elif defined(PAXS_USING_SFML)
sf::RectangleShape rect{};
@@ -90,6 +90,10 @@ namespace paxg {
void setSize(const float w_, const float h_) { rect.setSize(sf::Vector2f(w_, h_)); }
void setPos(const Vec2i& pos_) { rect.setPosition({ static_cast(pos_.x()), static_cast(pos_.y()) }); }
void setSize(const Vec2i& size_) { rect.setSize(sf::Vector2f(static_cast(size_.x()), static_cast(size_.y()))); }
+ bool contains(const float x_, const float y_) const {
+ return x_ >= rect.getPosition().x && x_ <= (rect.getPosition().x + rect.getSize().x) &&
+ y_ >= rect.getPosition().y && y_ <= (rect.getPosition().y + rect.getSize().y);
+ }
#else
float x0{}, y0{}, w0{}, h0{};
constexpr Rect() = default;
@@ -128,9 +132,13 @@ namespace paxg {
w0 = static_cast(size_.x());
h0 = static_cast(size_.y());
}
+ bool contains(const float x_, const float y_) const {
+ return x0 <= x_ && x_ <= x0 + w0 &&
+ y0 <= y_ && y_ <= y0 + h0;
+ }
#endif
- void draw() const override {
+ void draw() const {
#if defined(PAXS_USING_SIV3D)
rect.draw();
@@ -140,7 +148,7 @@ namespace paxg {
DxLib::GetColor(255, 255, 255), TRUE);
#elif defined(PAXS_USING_SFML)
- Window::window.draw(rect);
+ Window::window().draw(rect);
#endif
}
@@ -159,12 +167,75 @@ namespace paxg {
void draw(const paxg::Color& c_) const {
sf::RectangleShape rect2 = rect;
rect2.setFillColor(c_.color);
- Window::window.draw(rect2);
+ Window::window().draw(rect2);
}
#else
void draw(const paxg::Color&) const {}
#endif
+ /// @brief Draw shadow with blur effect
+ /// @brief ぼかし効果付きの影を描画
+ /// @param offset Shadow offset (影のオフセット)
+ /// @param blur_size Blur size (ぼかしサイズ)
+ /// @param spread Spread size (広がりサイズ)
+ /// @return Reference to this for method chaining (メソッドチェーン用の自身への参照)
+#if defined(PAXS_USING_SIV3D)
+ const Rect& drawShadow(const Vec2i& offset, int blur_size, int spread) const {
+ rect.drawShadow({offset.x(), offset.y()}, blur_size, spread);
+ return *this;
+ }
+#elif defined(PAXS_USING_SFML)
+ const Rect& drawShadow(const Vec2i& offset, int blur_size, int spread) const {
+ // SFML: Simple shadow using semi-transparent rectangles
+ // 複数の半透明矩形を重ねて簡易的な影を表現
+ sf::RectangleShape shadow = rect;
+ const int shadow_alpha = 40; // Base opacity
+
+ for (int i = spread + blur_size; i >= 0; --i) {
+ shadow.setPosition(sf::Vector2f(
+ rect.getPosition().x + offset.x() + i,
+ rect.getPosition().y + offset.y() + i
+ ));
+ shadow.setSize(sf::Vector2f(
+ rect.getSize().x + i * 2,
+ rect.getSize().y + i * 2
+ ));
+
+ int alpha = shadow_alpha * (spread + blur_size - i + 1) / (spread + blur_size + 1);
+ shadow.setFillColor(sf::Color(0, 0, 0, static_cast(alpha)));
+ Window::window().draw(shadow);
+ }
+ return *this;
+ }
+#elif defined(PAXS_USING_DXLIB)
+ const Rect& drawShadow(const Vec2i& offset, int blur_size, int spread) const {
+ // DxLib: Simple shadow using semi-transparent rectangles
+ // 複数の半透明矩形を重ねて簡易的な影を表現
+ DxLib::SetDrawBlendMode(DX_BLENDMODE_ALPHA, 40);
+
+ for (int i = spread + blur_size; i >= 0; --i) {
+ int alpha = 40 * (spread + blur_size - i + 1) / (spread + blur_size + 1);
+ DxLib::SetDrawBlendMode(DX_BLENDMODE_ALPHA, alpha);
+
+ DxLib::DrawBox(
+ static_cast(x0 + offset.x() + i),
+ static_cast(y0 + offset.y() + i),
+ static_cast(x0 + w0 + i),
+ static_cast(y0 + h0 + i),
+ DxLib::GetColor(0, 0, 0),
+ TRUE
+ );
+ }
+
+ DxLib::SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
+ return *this;
+ }
+#else
+ const Rect& drawShadow(const Vec2i&, int, int) const {
+ return *this;
+ }
+#endif
+
void drawAt() const {
#if defined(PAXS_USING_SIV3D)
// rect.draw();
@@ -175,7 +246,7 @@ namespace paxg {
DxLib::GetColor(255, 255, 255), TRUE);
#elif defined(PAXS_USING_SFML)
- Window::window.draw(rect);
+ Window::window().draw(rect);
#endif
}
@@ -194,7 +265,7 @@ namespace paxg {
void drawAt(const paxg::Color& c_) const {
sf::RectangleShape rect2 = rect;
rect2.setFillColor(c_.color);
- Window::window.draw(rect2);
+ Window::window().draw(rect2);
}
#else
void drawAt(const paxg::Color&) const {}
@@ -232,25 +303,25 @@ namespace paxg {
rect.getSize().x + static_cast(outer_thickness * 2), static_cast(outer_thickness + inner_thickness)));
rect1.setPosition({ rect.getPosition().x - static_cast(outer_thickness), rect.getPosition().y - static_cast(outer_thickness) });
rect1.setFillColor(c_.color);
- Window::window.draw(rect1);
+ Window::window().draw(rect1);
sf::RectangleShape rect2(sf::Vector2f(
rect.getSize().x + static_cast(outer_thickness * 2), static_cast(outer_thickness + inner_thickness)));
rect2.setPosition({ rect.getPosition().x - static_cast(outer_thickness), rect.getPosition().y + rect.getSize().y - static_cast(inner_thickness) });
rect2.setFillColor(c_.color);
- Window::window.draw(rect2);
+ Window::window().draw(rect2);
sf::RectangleShape rect3(sf::Vector2f(
static_cast(outer_thickness + inner_thickness), static_cast(rect.getSize().y + outer_thickness * 2)));
rect3.setPosition({ static_cast(rect.getPosition().x - outer_thickness), static_cast(rect.getPosition().y - outer_thickness) });
rect3.setFillColor(c_.color);
- Window::window.draw(rect3);
+ Window::window().draw(rect3);
sf::RectangleShape rect4(sf::Vector2f(
static_cast(outer_thickness + inner_thickness), static_cast(rect.getSize().y + outer_thickness * 2)));
rect4.setPosition({ static_cast(rect.getPosition().x + rect.getSize().x - inner_thickness), static_cast(rect.getPosition().y - outer_thickness) });
rect4.setFillColor(c_.color);
- Window::window.draw(rect4);
+ Window::window().draw(rect4);
}
#else
@@ -261,12 +332,13 @@ namespace paxg {
#if defined(PAXS_USING_SIV3D)
return rect.leftClicked();
#elif defined(PAXS_USING_DXLIB)
- if (old_left_touch == 1) {
- const int touch_num = DxLib::GetTouchInputNum();
+ if (paxg::TouchInput::getPreviousTouchCount() == 1) {
+ const int touch_num = paxg::TouchInput::getTouchCount();
// 1 フレーム前にタッチされている
if (touch_num == 0) {
- const auto& mx = old_left_touch_pos.x();
- const auto& my = old_left_touch_pos.y();
+ const auto& prev_pos = paxg::TouchInput::getPreviousTouchPosition();
+ const auto& mx = prev_pos.x;
+ const auto& my = prev_pos.y;
return (mx >= x0 && my >= y0 && mx < x0 + w0 && my < y0 + h0);
}
}
@@ -280,7 +352,7 @@ namespace paxg {
#elif defined(PAXS_USING_SFML)
// 1 フレーム前にタッチされている
if (paxg::Mouse::getInstance()->upLeft()) {
- int mx = sf::Mouse::getPosition(Window::window).x, my = sf::Mouse::getPosition(Window::window).y;
+ int mx = sf::Mouse::getPosition(Window::window()).x, my = sf::Mouse::getPosition(Window::window()).y;
return (mx >= rect.getPosition().x &&
my >= rect.getPosition().y &&
mx < rect.getPosition().x + rect.getSize().x &&
@@ -303,16 +375,13 @@ namespace paxg {
#elif defined(PAXS_USING_SFML)
return rect.getGlobalBounds().contains(
- { static_cast(sf::Mouse::getPosition(Window::window).x),
- static_cast(sf::Mouse::getPosition(Window::window).y) });
+ { static_cast(sf::Mouse::getPosition(Window::window()).x),
+ static_cast(sf::Mouse::getPosition(Window::window()).y) });
#else
return false;
#endif
}
-
- void drawAt(const Vec2f&) const override {}
- void drawAt(const Vec2i&) const override {}
};
}
diff --git a/Library/PAX_GRAPHICA/RenderTexture.hpp b/Library/PAX_GRAPHICA/RenderTexture.hpp
new file mode 100644
index 000000000..44573892d
--- /dev/null
+++ b/Library/PAX_GRAPHICA/RenderTexture.hpp
@@ -0,0 +1,134 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_RENDER_TEXTURE_HPP
+#define PAX_GRAPHICA_RENDER_TEXTURE_HPP
+
+#include
+
+#include
+#include
+#include
+
+#if defined(PAXS_USING_SIV3D)
+#include
+#endif
+
+namespace paxg {
+
+ /// @brief Cross-platform render texture wrapper for offscreen rendering
+ /// @brief オフスクリーンレンダリング用のクロスプラットフォームレンダーテクスチャラッパー
+ /// @details Uses Pimpl idiom to hide platform-specific implementations
+ class RenderTexture {
+ private:
+ std::shared_ptr impl;
+
+ public:
+ /// @brief Default constructor (creates empty render texture without implementation)
+ /// @brief デフォルトコンストラクタ(実装を持たない空の状態で初期化、遅延初期化用)
+ RenderTexture() : impl(nullptr) {
+ // implを持たない状態で初期化
+ // 後でサイズ付きコンストラクタで代入することを想定
+ }
+
+ /// @brief Constructor with size and color
+ /// @param size Size as Vector2
+ /// @param color Color as ColorF
+ RenderTexture(const paxs::Vector2& size, const ColorF& color) {
+#if defined(PAXS_USING_SIV3D)
+ impl = std::make_shared(size.x, size.y, color.r, color.g, color.b, color.a);
+#else
+ impl = std::make_shared(size.x, size.y, color.r, color.g, color.b, color.a);
+#endif
+ }
+
+ /// @brief Constructor with size only
+ /// @param size Size as Vector2
+ explicit RenderTexture(const paxs::Vector2& size) {
+#if defined(PAXS_USING_SIV3D)
+ impl = std::make_shared(size.x, size.y);
+#else
+ impl = std::make_shared(size.x, size.y);
+#endif
+ }
+
+ /// @brief Get the size of the render texture
+ /// @return The size as a 2D vector (returns {0, 0} if not initialized)
+ paxs::Vector2 size() const {
+ if (!impl) return paxs::Vector2{0, 0};
+ return impl->getSize();
+ }
+
+ /// @brief Clear the render texture with a color
+ /// @param r Red component (0.0-1.0)
+ /// @param g Green component (0.0-1.0)
+ /// @param b Blue component (0.0-1.0)
+ /// @param a Alpha component (0.0-1.0)
+ void clear(double r, double g, double b, double a) {
+ impl->clear(r, g, b, a);
+ }
+
+ /// @brief Begin rendering to this texture
+ void beginRender() {
+ impl->beginRender();
+ }
+
+ /// @brief End rendering to this texture
+ void endRender() {
+ impl->endRender();
+ }
+
+ /// @brief Draw this render texture to the screen
+ /// @param x X position
+ /// @param y Y position
+ void draw(int x = 0, int y = 0) const {
+ impl->draw(x, y);
+ }
+
+ /// @brief Draw this render texture with color modulation
+ /// @param color Color multiplier
+ void draw(const ColorF& color) const {
+ impl->draw(0, 0, color.r, color.g, color.b, color.a);
+ }
+
+ /// @brief Draw this render texture at position with color modulation
+ /// @param x X position
+ /// @param y Y position
+ /// @param color Color multiplier
+ void draw(int x, int y, const ColorF& color) const {
+ impl->draw(x, y, color.r, color.g, color.b, color.a);
+ }
+
+ /// @brief Get native handle for platform-specific operations
+ /// @return Pointer to platform-specific render texture
+ void* getNativeHandle() {
+ return impl->getNativeHandle();
+ }
+
+#if defined(PAXS_USING_SIV3D)
+ /// @brief Get the internal Siv3D render texture (Siv3D only)
+ /// @return Reference to the internal s3d::RenderTexture
+ s3d::RenderTexture& getInternalSiv3D() {
+ auto siv3d_impl = std::dynamic_pointer_cast(impl);
+ return siv3d_impl->getInternal();
+ }
+
+ const s3d::RenderTexture& getInternalSiv3D() const {
+ auto siv3d_impl = std::dynamic_pointer_cast(
+ std::const_pointer_cast(impl));
+ return siv3d_impl->getInternal();
+ }
+#endif
+ };
+
+} // namespace paxg
+
+#endif // !PAX_GRAPHICA_RENDER_TEXTURE_HPP
diff --git a/Library/PAX_GRAPHICA/RenderTextureImpl.hpp b/Library/PAX_GRAPHICA/RenderTextureImpl.hpp
new file mode 100644
index 000000000..6e18651a1
--- /dev/null
+++ b/Library/PAX_GRAPHICA/RenderTextureImpl.hpp
@@ -0,0 +1,63 @@
+/*##########################################################################################
+
+ PAX SAPIENTICA Library 💀🌿🌏
+
+ [Planning] 2023-2024 As Project
+ [Production] 2023-2024 As Project
+ [Contact Us] wanotaitei@gmail.com https://github.com/AsPJT/PAX_SAPIENTICA
+ [License] Distributed under the CC0 1.0. https://creativecommons.org/publicdomain/zero/1.0/
+
+##########################################################################################*/
+
+#ifndef PAX_GRAPHICA_RENDER_TEXTURE_IMPL_HPP
+#define PAX_GRAPHICA_RENDER_TEXTURE_IMPL_HPP
+
+#include
+
+namespace paxg {
+
+ /// @brief Abstract base class for render texture implementations
+ /// @brief レンダーテクスチャ実装の抽象基底クラス
+ class RenderTextureImpl {
+ public:
+ virtual ~RenderTextureImpl() = default;
+
+ /// @brief Get the size of the render texture
+ /// @return The size as a 2D vector
+ virtual paxs::Vector2 getSize() const = 0;
+
+ /// @brief Clear the render texture with a color
+ /// @param r Red component (0.0-1.0)
+ /// @param g Green component (0.0-1.0)
+ /// @param b Blue component (0.0-1.0)
+ /// @param a Alpha component (0.0-1.0)
+ virtual void clear(double r, double g, double b, double a) = 0;
+
+ /// @brief Begin rendering to this texture
+ virtual void beginRender() = 0;
+
+ /// @brief End rendering to this texture
+ virtual void endRender() = 0;
+
+ /// @brief Draw this render texture to the screen
+ /// @param x X position
+ /// @param y Y position
+ virtual void draw(int x, int y) const = 0;
+
+ /// @brief Draw this render texture with color modulation
+ /// @param x X position
+ /// @param y Y position
+ /// @param r Red multiplier (0.0-1.0)
+ /// @param g Green multiplier (0.0-1.0)
+ /// @param b Blue multiplier (0.0-1.0)
+ /// @param a Alpha multiplier (0.0-1.0)
+ virtual void draw(int x, int y, double r, double g, double b, double a) const = 0;
+
+ /// @brief Get native handle for render target operations (platform-specific)
+ /// @return Pointer to platform-specific data
+ virtual void* getNativeHandle() = 0;
+ };
+
+} // namespace paxg
+
+#endif // !PAX_GRAPHICA_RENDER_TEXTURE_IMPL_HPP
diff --git a/Library/PAX_GRAPHICA/RoundRect.hpp b/Library/PAX_GRAPHICA/RoundRect.hpp
index 167a56784..443ad6497 100644
--- a/Library/PAX_GRAPHICA/RoundRect.hpp
+++ b/Library/PAX_GRAPHICA/RoundRect.hpp
@@ -12,31 +12,25 @@
#ifndef PAX_GRAPHICA_ROUND_RECT_HPP
#define PAX_GRAPHICA_ROUND_RECT_HPP
-/*##########################################################################################
-
-##########################################################################################*/
-
#if defined(PAXS_USING_SIV3D)
#include
#elif defined(PAXS_USING_DXLIB)
#include
#elif defined(PAXS_USING_SFML)
-#ifndef OLD_LEFT_MOUSE
-#define OLD_LEFT_MOUSE
-static bool old_left_mouse = false;
-#endif // !OLD_LEFT_MOUSE
#include
#endif
#include
-#include
#include
+#include
#include
#include
+#include // std::min, std::max (SFMLで使用)
+
namespace paxg {
- struct RoundRect : public paxg::IDrawable {
+ struct RoundRect {
#if defined(PAXS_USING_SIV3D)
s3d::RoundRect rect{};
constexpr RoundRect() = default;
@@ -79,33 +73,57 @@ namespace paxg {
}
#elif defined(PAXS_USING_SFML)
- sf::RectangleShape rect{};
+ int x0{}, y0{}, w0{}, h0{}, r0{};
constexpr RoundRect() = default;
- RoundRect(const int x, const int y, const int w, const int h) : rect(sf::Vector2f(static_cast(w), static_cast(h))) { rect.setPosition({ static_cast(x), static_cast(y) }); }
- RoundRect(const int x, const int y, const int w, const int h, const int) : rect(sf::Vector2f(static_cast(w), static_cast(h))) { rect.setPosition({ static_cast(x), static_cast(y) }); }
- RoundRect(const sf::Vector2i& pos, const sf::Vector2i& size) : rect(sf::Vector2f(static_cast(size.x), static_cast