├── html
├── assets
│ ├── img
│ │ ├── favicon.png
│ │ ├── hideout.png
│ │ ├── marker.png
│ │ ├── buildarea.jpg
│ │ ├── camp_large.jpg
│ │ ├── labyrinth.jpg
│ │ ├── poi_road.png
│ │ ├── scrapcity.jpg
│ │ ├── warehouse2.jpg
│ │ ├── warehouse4.pdn
│ │ ├── warehouse4.png
│ │ ├── crashed_ship.jpg
│ │ ├── lake_generic.jpg
│ │ ├── packing_veg.jpg
│ │ ├── silodistrict.jpg
│ │ ├── tiles
│ │ │ ├── 10105.jpg
│ │ │ ├── 10106.jpg
│ │ │ ├── 10107.jpg
│ │ │ ├── 10108.jpg
│ │ │ ├── 111502.jpg
│ │ │ ├── 11501.jpg
│ │ │ ├── 11502.jpg
│ │ │ ├── 11503.jpg
│ │ │ ├── 11504.jpg
│ │ │ ├── 11505.jpg
│ │ │ ├── 11506.jpg
│ │ │ ├── 11507.jpg
│ │ │ ├── 11601.jpg
│ │ │ ├── 11701.jpg
│ │ │ ├── 11702.jpg
│ │ │ ├── 11703.jpg
│ │ │ ├── 11704.jpg
│ │ │ ├── 11801.jpg
│ │ │ ├── 11802.jpg
│ │ │ ├── 11803.jpg
│ │ │ ├── 11804.jpg
│ │ │ ├── 11805.jpg
│ │ │ ├── 11806.jpg
│ │ │ ├── 11807.jpg
│ │ │ ├── 11808.jpg
│ │ │ ├── 11809.jpg
│ │ │ ├── 11901.jpg
│ │ │ ├── 11902.jpg
│ │ │ ├── 11903.jpg
│ │ │ ├── 20101.jpg
│ │ │ ├── 20102.jpg
│ │ │ ├── 20103.jpg
│ │ │ ├── 20104.jpg
│ │ │ ├── 20105.jpg
│ │ │ ├── 20106.jpg
│ │ │ ├── 20107.jpg
│ │ │ ├── 20301.jpg
│ │ │ ├── 20302.jpg
│ │ │ ├── 20303.jpg
│ │ │ ├── 20304.jpg
│ │ │ ├── 20305.jpg
│ │ │ ├── 20306.jpg
│ │ │ ├── 20307.jpg
│ │ │ ├── 30101.jpg
│ │ │ ├── 30102.jpg
│ │ │ ├── 40101.jpg
│ │ │ ├── 40201.jpg
│ │ │ ├── 40202.jpg
│ │ │ ├── 40203.jpg
│ │ │ ├── 50201.jpg
│ │ │ ├── 50301.jpg
│ │ │ ├── 50402.jpg
│ │ │ ├── 60101.jpg
│ │ │ ├── 60102.jpg
│ │ │ ├── 60103.jpg
│ │ │ ├── 60201.jpg
│ │ │ ├── 60301.jpg
│ │ │ ├── 60302.jpg
│ │ │ ├── 60303.jpg
│ │ │ ├── 60304.jpg
│ │ │ ├── 80103.jpg
│ │ │ ├── 1000001.jpg
│ │ │ ├── 1000002.jpg
│ │ │ ├── 1000003.jpg
│ │ │ ├── 1000004.jpg
│ │ │ ├── 1000005.jpg
│ │ │ ├── 1000006.jpg
│ │ │ ├── 1000007.jpg
│ │ │ ├── 1000008.jpg
│ │ │ ├── 1000009.jpg
│ │ │ ├── 1000010.jpg
│ │ │ ├── 1000011.jpg
│ │ │ ├── 1000012.jpg
│ │ │ ├── 1000013.jpg
│ │ │ ├── 1000014.jpg
│ │ │ ├── 1000015.jpg
│ │ │ ├── 1000016.jpg
│ │ │ ├── 1000017.jpg
│ │ │ ├── 1000018.jpg
│ │ │ ├── 1000019.jpg
│ │ │ ├── 1000020.jpg
│ │ │ ├── 1000021.jpg
│ │ │ ├── 1000022.jpg
│ │ │ ├── 1000023.jpg
│ │ │ ├── 1000024.jpg
│ │ │ ├── 1000025.jpg
│ │ │ ├── 1000026.jpg
│ │ │ ├── 1000027.jpg
│ │ │ ├── 1000028.jpg
│ │ │ ├── 1000029.jpg
│ │ │ ├── 1000101.jpg
│ │ │ ├── 1000102.jpg
│ │ │ ├── 1000103.jpg
│ │ │ ├── 1000104.jpg
│ │ │ ├── 1000105.jpg
│ │ │ ├── 1000106.jpg
│ │ │ ├── 1000107.jpg
│ │ │ ├── 1000201.jpg
│ │ │ ├── 1000202.jpg
│ │ │ ├── 1000301.jpg
│ │ │ ├── 1000501.jpg
│ │ │ ├── 1000502.jpg
│ │ │ ├── 1000503.jpg
│ │ │ ├── 1000504.jpg
│ │ │ ├── 1000505.jpg
│ │ │ ├── 1000506.jpg
│ │ │ ├── 1000507.jpg
│ │ │ ├── 1000508.jpg
│ │ │ ├── 1000509.jpg
│ │ │ ├── 1000601.jpg
│ │ │ ├── 1000602.jpg
│ │ │ ├── 1000701.jpg
│ │ │ ├── 1000901.jpg
│ │ │ ├── 1000902.jpg
│ │ │ ├── 1001001.jpg
│ │ │ ├── 1001002.jpg
│ │ │ ├── 1001101.jpg
│ │ │ ├── 1001301.jpg
│ │ │ ├── 1001401.jpg
│ │ │ ├── 1001501.jpg
│ │ │ ├── 1001701.jpg
│ │ │ ├── 1001702.jpg
│ │ │ ├── 1002101.jpg
│ │ │ ├── 1002102.jpg
│ │ │ ├── 1002103.jpg
│ │ │ ├── 1002201.jpg
│ │ │ ├── 1002301.jpg
│ │ │ ├── 1002501.jpg
│ │ │ ├── 1002502.jpg
│ │ │ ├── 1002503.jpg
│ │ │ ├── 1002601.jpg
│ │ │ ├── 1002602.jpg
│ │ │ ├── 1002701.jpg
│ │ │ ├── 1002901.jpg
│ │ │ ├── 1003001.jpg
│ │ │ ├── 1003101.jpg
│ │ │ ├── 1003501.jpg
│ │ │ ├── 1003701.jpg
│ │ │ ├── 1004101.jpg
│ │ │ ├── 1004102.jpg
│ │ │ ├── 1004201.jpg
│ │ │ ├── 1004301.jpg
│ │ │ ├── 1004701.jpg
│ │ │ ├── 1005301.jpg
│ │ │ ├── 1005501.jpg
│ │ │ ├── 1005701.jpg
│ │ │ ├── 1005801.jpg
│ │ │ ├── 1005901.jpg
│ │ │ ├── 1006101.jpg
│ │ │ ├── 1006201.jpg
│ │ │ ├── 1006301.jpg
│ │ │ ├── 1025601.jpg
│ │ │ ├── 1076801.jpg
│ │ │ ├── 1076802.jpg
│ │ │ ├── 1076803.jpg
│ │ │ ├── 1076804.jpg
│ │ │ ├── 1076805.jpg
│ │ │ ├── 1076806.jpg
│ │ │ ├── 1076807.jpg
│ │ │ ├── 1076808.jpg
│ │ │ ├── 1076809.jpg
│ │ │ ├── 1076810.jpg
│ │ │ ├── 1076811.jpg
│ │ │ ├── 1076812.jpg
│ │ │ ├── 1076813.jpg
│ │ │ ├── 1076814.jpg
│ │ │ ├── 1076814.pdn
│ │ │ ├── 1076901.jpg
│ │ │ ├── 1077201.jpg
│ │ │ ├── 1077301.jpg
│ │ │ ├── 1078401.jpg
│ │ │ ├── 1078801.jpg
│ │ │ ├── 1078901.jpg
│ │ │ ├── 1083201.jpg
│ │ │ ├── 1083301.jpg
│ │ │ ├── 1083701.jpg
│ │ │ ├── 1084801.jpg
│ │ │ ├── 1084901.jpg
│ │ │ ├── 1128001.jpg
│ │ │ ├── 1128002.jpg
│ │ │ ├── 1128003.jpg
│ │ │ ├── 1128004.jpg
│ │ │ ├── 1128005.jpg
│ │ │ ├── 1128006.jpg
│ │ │ ├── 1128007.jpg
│ │ │ ├── 1128008.jpg
│ │ │ ├── 1128009.jpg
│ │ │ ├── 1128010.jpg
│ │ │ ├── 1128011.jpg
│ │ │ ├── 1128012.jpg
│ │ │ ├── 1128013.jpg
│ │ │ ├── 1128014.jpg
│ │ │ ├── 1128015.jpg
│ │ │ ├── 1128016.jpg
│ │ │ ├── 1128101.jpg
│ │ │ ├── 1128401.jpg
│ │ │ ├── 1128402.jpg
│ │ │ ├── 1128501.jpg
│ │ │ ├── 1130001.jpg
│ │ │ ├── 1130101.jpg
│ │ │ ├── 1134901.jpg
│ │ │ ├── 1179201.jpg
│ │ │ ├── 1384001.jpg
│ │ │ ├── 1384002.jpg
│ │ │ ├── 2000101.jpg
│ │ │ ├── 2000102.jpg
│ │ │ ├── 2000103.jpg
│ │ │ ├── 2000104.jpg
│ │ │ ├── 2000105.jpg
│ │ │ ├── 2000301.jpg
│ │ │ ├── 2000302.jpg
│ │ │ ├── 2000303.jpg
│ │ │ ├── 2000304.jpg
│ │ │ ├── 2000305.jpg
│ │ │ ├── 2000501.jpg
│ │ │ ├── 2000701.jpg
│ │ │ ├── 2001501.jpg
│ │ │ ├── 2001502.jpg
│ │ │ ├── 2001503.jpg
│ │ │ ├── 3000101.jpg
│ │ │ ├── 3000301.jpg
│ │ │ ├── 3000302.jpg
│ │ │ ├── 3000501.jpg
│ │ │ ├── 3000701.jpg
│ │ │ ├── 3001501.jpg
│ │ │ ├── 3001502.jpg
│ │ │ ├── 3001503.jpg
│ │ │ ├── 3001504.jpg
│ │ │ ├── 3001505.jpg
│ │ │ ├── 3001506.jpg
│ │ │ ├── 4000101.jpg
│ │ │ ├── 4000301.jpg
│ │ │ ├── 4000501.jpg
│ │ │ ├── 4000701.jpg
│ │ │ ├── 4001501.jpg
│ │ │ ├── 4001502.jpg
│ │ │ ├── 4001503.jpg
│ │ │ ├── 4001504.jpg
│ │ │ ├── 4001505.jpg
│ │ │ ├── 4001506.jpg
│ │ │ ├── 4001507.jpg
│ │ │ ├── 5000101.jpg
│ │ │ ├── 5000102.jpg
│ │ │ ├── 5000103.jpg
│ │ │ ├── 5000301.jpg
│ │ │ ├── 5000302.jpg
│ │ │ ├── 5000303.jpg
│ │ │ ├── 5000501.jpg
│ │ │ ├── 5000701.jpg
│ │ │ ├── 5000702.jpg
│ │ │ ├── 5000703.jpg
│ │ │ ├── 5001501.jpg
│ │ │ ├── 5001502.jpg
│ │ │ ├── 6000101.jpg
│ │ │ ├── 6000102.jpg
│ │ │ ├── 6000103.jpg
│ │ │ ├── 6000104.jpg
│ │ │ ├── 6000105.jpg
│ │ │ ├── 6000301.jpg
│ │ │ ├── 6000302.jpg
│ │ │ ├── 6000303.jpg
│ │ │ ├── 6000304.jpg
│ │ │ ├── 6000305.jpg
│ │ │ ├── 6000501.jpg
│ │ │ ├── 6000701.jpg
│ │ │ ├── 6001501.jpg
│ │ │ ├── 6001502.jpg
│ │ │ ├── 8000101.jpg
│ │ │ ├── 8000102.jpg
│ │ │ ├── 8000103.jpg
│ │ │ ├── 8000104.jpg
│ │ │ ├── 8000105.jpg
│ │ │ ├── 8000106.jpg
│ │ │ ├── 8000107.jpg
│ │ │ ├── 8000108.jpg
│ │ │ ├── 8000109.jpg
│ │ │ ├── 8000110.jpg
│ │ │ ├── 8000111.jpg
│ │ │ ├── 8000301.jpg
│ │ │ ├── 8000302.jpg
│ │ │ ├── 8000303.jpg
│ │ │ ├── 8000304.jpg
│ │ │ ├── 8000305.jpg
│ │ │ ├── 8000306.jpg
│ │ │ ├── 8000307.jpg
│ │ │ ├── 8000308.jpg
│ │ │ ├── 8000309.jpg
│ │ │ ├── 8000310.jpg
│ │ │ ├── 8000311.jpg
│ │ │ ├── 8000312.jpg
│ │ │ ├── 8000313.jpg
│ │ │ ├── 8000314.jpg
│ │ │ ├── 8000501.jpg
│ │ │ ├── 8000701.jpg
│ │ │ ├── 8000702.jpg
│ │ │ ├── 8000703.jpg
│ │ │ ├── 8000704.jpg
│ │ │ ├── 8000705.jpg
│ │ │ ├── 8000706.jpg
│ │ │ └── 11504 - Copy.jpg
│ │ ├── meadow_generic.jpg
│ │ ├── packing_fruit.jpg
│ │ ├── ruin_medium_3.jpg
│ │ ├── ruin_medium_4.jpg
│ │ ├── capsule_scrapyard.jpg
│ │ ├── chemlake_medium_1.jpg
│ │ ├── chemlake_medium_2.jpg
│ │ ├── chemlake_medium_3.jpg
│ │ ├── mechanic_station.png
│ │ ├── start_crashsite1.jpg
│ │ ├── start_crashsite2.jpg
│ │ ├── start_crashsite3.jpg
│ │ ├── underwater_med_3.jpg
│ │ ├── underwater_med_4.jpg
│ │ ├── warehouse3_large.pdn
│ │ ├── warehouse3_large.png
│ │ ├── warehouse_2_large.PNG
│ │ ├── forest_ruin_medium_1.jpg
│ │ ├── forest_ruin_medium_2.jpg
│ │ ├── start_crashsite_-36_-40.jpg
│ │ ├── start_crashsite_-36_-41.jpg
│ │ ├── start_crashsite_-37_-39.jpg
│ │ ├── start_crashsite_-37_-40.jpg
│ │ └── burntforest_farmbot_scrapyard.jpg
│ ├── json
│ │ └── cells.json
│ ├── style.css
│ └── js
│ │ ├── cellparser.js
│ │ └── sm_overview_map.js
├── package.json
├── index.js
├── index.html
├── libs
│ └── leaflet-hash.js
└── package-lock.json
├── .gitignore
├── tile_database.lua
├── Readme.md
├── missingimages.js
└── SurvivalGame.lua
/html/assets/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/favicon.png
--------------------------------------------------------------------------------
/html/assets/img/hideout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/hideout.png
--------------------------------------------------------------------------------
/html/assets/img/marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/marker.png
--------------------------------------------------------------------------------
/html/assets/img/buildarea.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/buildarea.jpg
--------------------------------------------------------------------------------
/html/assets/img/camp_large.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/camp_large.jpg
--------------------------------------------------------------------------------
/html/assets/img/labyrinth.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/labyrinth.jpg
--------------------------------------------------------------------------------
/html/assets/img/poi_road.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/poi_road.png
--------------------------------------------------------------------------------
/html/assets/img/scrapcity.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/scrapcity.jpg
--------------------------------------------------------------------------------
/html/assets/img/warehouse2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse2.jpg
--------------------------------------------------------------------------------
/html/assets/img/warehouse4.pdn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse4.pdn
--------------------------------------------------------------------------------
/html/assets/img/warehouse4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse4.png
--------------------------------------------------------------------------------
/html/assets/img/crashed_ship.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/crashed_ship.jpg
--------------------------------------------------------------------------------
/html/assets/img/lake_generic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/lake_generic.jpg
--------------------------------------------------------------------------------
/html/assets/img/packing_veg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/packing_veg.jpg
--------------------------------------------------------------------------------
/html/assets/img/silodistrict.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/silodistrict.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/10105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/10105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/10106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/10106.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/10107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/10107.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/10108.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/10108.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/111502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/111502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11504.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11505.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11506.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11506.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11507.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11601.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11601.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11702.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11702.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11703.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11703.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11704.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11704.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11801.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11801.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11802.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11802.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11803.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11803.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11804.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11804.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11805.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11805.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11806.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11806.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11807.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11807.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11808.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11808.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11809.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11809.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11902.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11902.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11903.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11903.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20104.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20106.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20107.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20304.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20304.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20305.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20306.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20306.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/20307.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/20307.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/30101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/30101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/30102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/30102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/40101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/40101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/40201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/40201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/40202.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/40202.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/40203.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/40203.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/50201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/50201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/50301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/50301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/50402.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/50402.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/60304.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/60304.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/80103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/80103.jpg
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | html/node_modules
2 | html/img/*
3 | scale.txt
4 | testmakemap.ahk
5 | g_celldata.json
6 | g_celldata0.json
7 |
--------------------------------------------------------------------------------
/html/assets/img/meadow_generic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/meadow_generic.jpg
--------------------------------------------------------------------------------
/html/assets/img/packing_fruit.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/packing_fruit.jpg
--------------------------------------------------------------------------------
/html/assets/img/ruin_medium_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/ruin_medium_3.jpg
--------------------------------------------------------------------------------
/html/assets/img/ruin_medium_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/ruin_medium_4.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000002.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000003.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000004.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000005.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000006.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000007.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000008.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000009.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000010.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000011.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000012.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000013.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000013.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000014.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000015.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000015.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000016.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000017.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000017.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000018.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000019.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000019.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000020.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000021.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000021.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000022.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000022.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000023.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000023.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000024.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000024.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000025.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000025.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000026.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000026.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000027.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000027.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000028.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000028.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000029.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000029.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000104.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000106.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000107.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000202.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000202.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000504.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000505.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000506.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000506.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000507.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000508.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000508.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000509.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000509.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000601.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000601.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000602.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000602.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1000902.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1000902.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001002.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001401.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001401.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1001702.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1001702.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002601.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002601.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002602.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002602.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1002901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1002901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1003001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1003001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1003101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1003101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1003501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1003501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1003701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1003701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1004101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1004101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1004102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1004102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1004201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1004201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1004301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1004301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1004701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1004701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1005301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1005301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1005501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1005501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1005701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1005701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1005801.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1005801.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1005901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1005901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1006101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1006101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1006201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1006201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1006301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1006301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1025601.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1025601.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076801.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076801.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076802.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076802.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076803.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076803.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076804.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076804.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076805.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076805.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076806.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076806.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076807.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076807.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076808.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076808.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076809.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076809.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076810.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076810.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076811.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076811.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076812.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076812.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076813.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076813.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076814.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076814.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076814.pdn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076814.pdn
--------------------------------------------------------------------------------
/html/assets/img/tiles/1076901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1076901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1077201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1077201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1077301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1077301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1078401.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1078401.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1078801.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1078801.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1078901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1078901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1083201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1083201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1083301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1083301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1083701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1083701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1084801.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1084801.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1084901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1084901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128002.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128003.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128004.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128005.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128006.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128007.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128008.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128009.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128010.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128011.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128012.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128013.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128013.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128014.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128015.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128015.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128016.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128401.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128401.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128402.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128402.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1128501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1128501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1130001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1130001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1130101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1130101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1134901.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1134901.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1179201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1179201.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1384001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1384001.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/1384002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/1384002.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000104.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000304.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000304.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000305.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2001502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2001502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/2001503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/2001503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3000302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3000302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001504.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001505.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/3001506.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/3001506.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001503.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001504.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001505.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001506.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001506.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/4001507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/4001507.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000702.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000702.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5000703.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5000703.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/5001502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/5001502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000104.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000304.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000304.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000305.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6001501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6001501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/6001502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/6001502.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000101.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000102.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000103.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000104.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000105.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000106.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000107.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000108.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000108.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000109.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000109.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000110.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000110.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000111.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000111.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000301.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000301.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000302.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000302.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000303.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000303.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000304.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000304.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000305.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000305.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000306.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000306.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000307.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000307.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000308.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000308.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000309.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000309.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000310.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000310.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000311.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000311.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000312.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000312.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000313.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000313.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000314.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000501.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000701.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000701.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000702.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000702.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000703.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000703.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000704.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000704.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000705.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000705.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/8000706.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/8000706.jpg
--------------------------------------------------------------------------------
/html/assets/img/capsule_scrapyard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/capsule_scrapyard.jpg
--------------------------------------------------------------------------------
/html/assets/img/chemlake_medium_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/chemlake_medium_1.jpg
--------------------------------------------------------------------------------
/html/assets/img/chemlake_medium_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/chemlake_medium_2.jpg
--------------------------------------------------------------------------------
/html/assets/img/chemlake_medium_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/chemlake_medium_3.jpg
--------------------------------------------------------------------------------
/html/assets/img/mechanic_station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/mechanic_station.png
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite1.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite2.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite3.jpg
--------------------------------------------------------------------------------
/html/assets/img/underwater_med_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/underwater_med_3.jpg
--------------------------------------------------------------------------------
/html/assets/img/underwater_med_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/underwater_med_4.jpg
--------------------------------------------------------------------------------
/html/assets/img/warehouse3_large.pdn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse3_large.pdn
--------------------------------------------------------------------------------
/html/assets/img/warehouse3_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse3_large.png
--------------------------------------------------------------------------------
/html/assets/img/warehouse_2_large.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/warehouse_2_large.PNG
--------------------------------------------------------------------------------
/html/assets/img/forest_ruin_medium_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/forest_ruin_medium_1.jpg
--------------------------------------------------------------------------------
/html/assets/img/forest_ruin_medium_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/forest_ruin_medium_2.jpg
--------------------------------------------------------------------------------
/html/assets/img/tiles/11504 - Copy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/tiles/11504 - Copy.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite_-36_-40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite_-36_-40.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite_-36_-41.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite_-36_-41.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite_-37_-39.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite_-37_-39.jpg
--------------------------------------------------------------------------------
/html/assets/img/start_crashsite_-37_-40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/start_crashsite_-37_-40.jpg
--------------------------------------------------------------------------------
/html/assets/img/burntforest_farmbot_scrapyard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/the1killer/sm_overview/HEAD/html/assets/img/burntforest_farmbot_scrapyard.jpg
--------------------------------------------------------------------------------
/html/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "scrapmechanicmap",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.html",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "supervisor index.js"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/the1killer/scrapmechanicmap.git"
13 | },
14 | "author": "The-Killer",
15 | "license": "MIT",
16 | "bugs": {
17 | "url": "https://github.com/the1killer/scrapmechanicmap/issues"
18 | },
19 | "homepage": "https://github.com/the1killer/scrapmechanicmap#readme",
20 | "dependencies": {
21 | "leaflet-hash": "^0.2.1"
22 | },
23 | "devDependencies": {
24 | "express": "^4.17.1"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/html/assets/json/cells.json:
--------------------------------------------------------------------------------
1 |
2 | [
3 |
4 | {
5 | "bounds" :
6 | {
7 | "xMax" : 71.0,
8 | "xMin" : -72.0,
9 | "yMax" : 55.0,
10 | "yMin" : -56.0
11 | },
12 | "flags" : 32768.0,
13 | "rotation" : 3.0,
14 | "seed" : 667978921.0,
15 | "tileid" : 8001510.0,
16 | "x" : -72.0,
17 | "y" : -56.0
18 | },
19 | {
20 | "flags" : 69632.0,
21 | "rotation" : 2.0,
22 | "tileid" : 10901.0,
23 | "x" : -28.0,
24 | "y" : -27.0
25 | },
26 |
27 | {
28 | "flags" : 69632.0,
29 | "rotation" : 2.0,
30 | "tileid" : 10901.0,
31 | "x" : -27.0,
32 | "y" : -27.0
33 | },
34 | {
35 | "flags" : 70912.0,
36 | "rotation" : 2.0,
37 | "tileid" : 10901.0,
38 | "x" : -28.0,
39 | "y" : -26.0
40 | },
41 |
42 | {
43 | "flags" : 70912.0,
44 | "rotation" : 2.0,
45 | "tileid" : 10901.0,
46 | "x" : -27.0,
47 | "y" : -26.0
48 | }
49 | ]
50 |
--------------------------------------------------------------------------------
/html/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const path = require('path');
3 |
4 |
5 | const app = express();
6 | const port = 8080;
7 |
8 | app.use('/assets',express.static('assets')); //host static assets
9 | app.use('/img',express.static('img')); //host map imgs
10 | app.use('/libs',express.static('libs')); //host static assets
11 |
12 | app.get('/', (req, res) => {
13 | // res.send('Hello World!')
14 | res.sendFile(path.join(__dirname,"index.html"));
15 | });
16 |
17 | app.get('/map.html', (req, res) => {
18 | // res.send('Hello World!')
19 | res.sendFile(path.join(__dirname,"map.html"));
20 | });
21 |
22 | // app.get('/systems.json', (req, res) => {
23 | // res.sendFile(path.join(__dirname,"systems.json"));
24 | // });
25 |
26 | // app.get('/style.css', (req, res) => {
27 | // res.sendFile(path.join(__dirname,"style.css"));
28 | // });
29 |
30 | // app.get('/bodybg.png', (req, res) => {
31 | // res.sendFile(path.join(__dirname,"bodybg.png"));
32 | // });
33 |
34 | // app.get('/timers.js', (req, res) => {
35 | // res.sendFile(path.join(__dirname,"timers.js"));
36 | // });
37 |
38 | app.listen(port, () => {
39 | console.log(`Example app listening on port ${port}!`)
40 | });
--------------------------------------------------------------------------------
/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/html/assets/style.css:
--------------------------------------------------------------------------------
1 | html, body, #map {
2 | width:100%;
3 | height:100%;
4 | margin:0;
5 | padding:0;
6 | background-color: #B0B0B0;
7 | font-family: 'Roboto', sans-serif;
8 | }
9 | .cell {
10 | font-size: 0.4em;
11 | word-break: break-all;
12 | }
13 | .innercell {
14 | padding: 0.4em;
15 | }
16 | .meadow {
17 | background-color: #00E85D;
18 | }
19 | .lake {
20 | background-color: #00BAF2;
21 | }
22 | .autumnforest {
23 | background-color: #F2BB07;
24 | }
25 | .autumnforest {
26 | background-color: #F2BB07;
27 | }
28 | .forest {
29 | background-color: #00BC1B;
30 | }
31 | .burntforest {
32 | background-color: #9E8A5C;
33 | }
34 | .mountain {
35 | background-color: #8DBFAC;
36 | }
37 | .desert {
38 | background-color: #FFDE93;
39 | }
40 | .field {
41 | background-color: #A4E07E;
42 | }
43 | .gridLayer {
44 | z-index: 10 !important;
45 | }
46 | .none {
47 | background-color: #00FF8F;
48 | }
49 | .road-N {
50 | position: absolute;
51 | top: 0;
52 | left: 45%;
53 | height: 50%;
54 | width: 2em;
55 | background-color: #999;
56 | text-align: center;
57 | display: flex;
58 | align-items: center;
59 | }
60 | .road-S {
61 | position: absolute;
62 | bottom: 0;
63 | left: 45%;
64 | height: 50%;
65 | width: 2em;
66 | background-color: #999;
67 | text-align: center;
68 | display: flex;
69 | align-items: center;
70 | }
71 | .road-E {
72 | position: absolute;
73 | right: 0;
74 | bottom: 45%;
75 | width: 50%;
76 | height: 2em;
77 | background-color: #999;
78 | text-align: center;
79 | }
80 | .road-W {
81 | position: absolute;
82 | left: 0;
83 | bottom: 45%;
84 | width: 50%;
85 | height: 2em;
86 | background-color: #999;
87 | text-align: center;
88 | }
89 | .roadLine {
90 | position: absolute;
91 | }
92 | .road-W .roadLine, .road-E .roadLine {
93 | top: 49%;
94 | width: 100%;
95 | height: 1px;
96 | border-top: 0.5px dashed yellow;
97 | }
98 | .road-N .roadLine, .road-S .roadLine {
99 | left: 49%;
100 | height: 100%;
101 | width: 1px;
102 | border-left: 0.5px dashed yellow;
103 | }
104 |
105 | .rotLabel {
106 | position: absolute;
107 | bottom: 0;
108 | }
109 | .rot-1 {
110 | transform: rotate(270deg);
111 | }
112 | .rot-2 {
113 | transform: rotate(180deg);
114 | }
115 | .rot-3 {
116 | transform: rotate(90deg);
117 | }
118 |
119 | .tileid {
120 | position: absolute;
121 | bottom: 0;
122 | right: 3;
123 | }
124 | .tileimg {
125 | position: absolute;
126 | top: 0;
127 | left: 0;
128 | bottom: 0;
129 | right: 0;
130 | width: 100%;
131 | height: 100%;
132 | /* opacity: 0.85; */
133 | }
134 |
135 | #stats {
136 | position: fixed;
137 | right: 10;
138 | top: 30;
139 | z-index: 1000;
140 | background: #FCFCFC;
141 | border-radius: 5px;
142 | padding: 10px;
143 | max-height: 60%;
144 | }
145 | .scroll-y {
146 | overflow-y: scroll;
147 | }
148 | #stats-content {
149 | font-size: 0.8em;
150 | padding-top: 10px;
151 | }
152 | .collapsed {
153 | display: none;
154 | }
155 | .stat-title {
156 | padding-top: 10px;
157 | }
158 | .toggle {
159 | float: right;
160 | font-size: 0.9em;
161 | max-width: 80hw;
162 | }
163 | #stats-content td {
164 | font-size: 0.8em;
165 | font-family: 'Roboto', sans-serif;
166 | }
167 | .poilabel {
168 | font-size: 0.75em;
169 | }
--------------------------------------------------------------------------------
/tile_database.lua:
--------------------------------------------------------------------------------
1 |
2 | ----------------------------------------------------------------------------------------------------
3 | -- Tile database
4 | ----------------------------------------------------------------------------------------------------
5 |
6 | local f_idToTilePath = {}
7 | local legacyIds = {} -- Added by Arkanorian for use in 0.6.0
8 | local f_legacyIdUpgradeList = {}
9 |
10 | ----------------------------------------------------------------------------------------------------
11 |
12 | function UpgradeCellData( cellData )
13 |
14 | sm.log.info( "UpgradeCellData - version: "..tostring( cellData.version or 1 ) )
15 | local upgraded = false
16 | -- 1 to 2
17 | if ( cellData.version or 1 ) < 2 then
18 | cellData.xOffset = cellData.tileOffsetX -- rename offset x table
19 | cellData.tileOffsetX = nil
20 |
21 | cellData.yOffset = cellData.tileOffsetY -- rename offset y table
22 | cellData.tileOffsetY = nil
23 |
24 | if cellData.uid == nil then
25 | cellData.uid = {} -- add uid table
26 | end
27 |
28 | for cellY = cellData.bounds.yMin, cellData.bounds.yMax do
29 | if cellData.uid[cellY] == nil then
30 | cellData.uid[cellY] = {} -- add uid table
31 | end
32 |
33 | for cellX = cellData.bounds.xMin, cellData.bounds.xMax do
34 | if cellData.uid[cellY][cellX] == nil then
35 | cellData.uid[cellY][cellX] = {} -- add uid table
36 | end
37 | local id = cellData.tileId[cellY][cellX]
38 | local uid = GetLegacyUpgrade( id )
39 | if not sm.uuid.isNil( uid ) then
40 | cellData.uid[cellY][cellX] = uid -- (int) tileId -> (uuid) uid
41 | else
42 | cellData.uid[cellY][cellX] = sm.uuid.getNil()
43 | end
44 | end
45 | end
46 | cellData.version = 2
47 | upgraded = true
48 | end
49 | if upgraded then sm.log.info( " - Upgraded to version "..tostring( cellData.version ) ) else sm.log.info( " - No upgrade needed" ) end
50 | return upgraded
51 | end
52 |
53 | ----------------------------------------------------------------------------------------------------
54 |
55 | function GetPath( uid )
56 | if not f_idToTilePath[tostring( uid )] then
57 | return nil
58 | end
59 | return f_idToTilePath[tostring( uid )].path
60 | end
61 |
62 | function GetSize( uid )
63 | if not f_idToTilePath[tostring( uid )] then
64 | return nil
65 | end
66 | return f_idToTilePath[tostring( uid )].size
67 | end
68 |
69 | function GetTerrainType( uid )
70 | if not f_idToTilePath[tostring( uid )] then
71 | return nil
72 | end
73 | return f_idToTilePath[tostring( uid )].terrainType
74 | end
75 |
76 | function GetPoiType( uid )
77 | if not f_idToTilePath[tostring( uid )] then
78 | return nil
79 | end
80 | return f_idToTilePath[tostring( uid )].poiType
81 | end
82 |
83 | -- Added by Arkanorian for use in 0.6.0
84 | function GetLegacyID( uid )
85 | if not legacyIds[tostring( uid )] then
86 | return nil
87 | end
88 | return legacyIds[tostring( uid )]
89 | end
90 | ----------------------------------------------------------------------------------------------------
91 |
92 | function AddTile( legacyId, path, terrainType, poiType )
93 | terrainType = terrainType or 1
94 |
95 | local uid = sm.terrainTile.getTileUuid( path )
96 | local size = sm.terrainTile.getSize( path )
97 |
98 | if f_idToTilePath[tostring( uid )] == nil then
99 | f_idToTilePath[tostring( uid )] = { path = path, size = size, terrainType = terrainType, poiType = poiType }
100 | end
101 | if legacyId then
102 | AddLegacyUpgrade( legacyId, uid )
103 | legacyIds[tostring( uid )] = legacyId -- Added by Arkanorian for use in 0.6.0
104 | end
105 | return uid
106 | end
107 |
108 | ----------------------------------------------------------------------------------------------------
109 |
110 | function AddLegacyUpgrade( legacyId, uid )
111 | f_legacyIdUpgradeList[legacyId] = uid
112 | end
113 |
114 | function GetLegacyUpgrade( legacyId )
115 | return f_legacyIdUpgradeList[legacyId]
116 | end
117 |
118 | ----------------------------------------------------------------------------------------------------
119 |
--------------------------------------------------------------------------------
/html/libs/leaflet-hash.js:
--------------------------------------------------------------------------------
1 | (function(window) {
2 | var HAS_HASHCHANGE = (function() {
3 | var doc_mode = window.documentMode;
4 | return ('onhashchange' in window) &&
5 | (doc_mode === undefined || doc_mode > 7);
6 | })();
7 |
8 | L.Hash = function(map) {
9 | this.onHashChange = L.Util.bind(this.onHashChange, this);
10 |
11 | if (map) {
12 | this.init(map);
13 | }
14 | };
15 |
16 | L.Hash.parseHash = function(hash) {
17 | if(hash.indexOf('#') === 0) {
18 | hash = hash.substr(1);
19 | }
20 | var args = hash.split("/");
21 | if (args.length == 3) {
22 | var zoom = parseInt(args[0], 10),
23 | lat = parseFloat(args[1]),
24 | lon = parseFloat(args[2]);
25 | if (isNaN(zoom) || isNaN(lat) || isNaN(lon)) {
26 | return false;
27 | } else {
28 | return {
29 | center: new L.LatLng(lat, lon),
30 | zoom: zoom
31 | };
32 | }
33 | } else {
34 | return false;
35 | }
36 | };
37 |
38 | L.Hash.formatHash = function(map) {
39 | var center = map.getCenter(),
40 | zoom = map.getZoom(),
41 | precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
42 |
43 | return "#" + [zoom,
44 | center.lat.toFixed(precision),
45 | center.lng.toFixed(precision)
46 | ].join("/");
47 | },
48 |
49 | L.Hash.prototype = {
50 | map: null,
51 | lastHash: null,
52 |
53 | parseHash: L.Hash.parseHash,
54 | formatHash: L.Hash.formatHash,
55 |
56 | init: function(map) {
57 | this.map = map;
58 |
59 | // reset the hash
60 | this.lastHash = null;
61 | this.onHashChange();
62 |
63 | if (!this.isListening) {
64 | this.startListening();
65 | }
66 | },
67 |
68 | removeFrom: function(map) {
69 | if (this.changeTimeout) {
70 | clearTimeout(this.changeTimeout);
71 | }
72 |
73 | if (this.isListening) {
74 | this.stopListening();
75 | }
76 |
77 | this.map = null;
78 | },
79 |
80 | onMapMove: function() {
81 | // bail if we're moving the map (updating from a hash),
82 | // or if the map is not yet loaded
83 |
84 | if (this.movingMap || !this.map._loaded) {
85 | return false;
86 | }
87 |
88 | var hash = this.formatHash(this.map);
89 | if (this.lastHash != hash) {
90 | location.replace(hash);
91 | this.lastHash = hash;
92 | }
93 | },
94 |
95 | movingMap: false,
96 | update: function() {
97 | var hash = location.hash;
98 | if (hash === this.lastHash) {
99 | return;
100 | }
101 | var parsed = this.parseHash(hash);
102 | if (parsed) {
103 | this.movingMap = true;
104 |
105 | this.map.setView(parsed.center, parsed.zoom);
106 |
107 | this.movingMap = false;
108 | } else {
109 | this.onMapMove(this.map);
110 | }
111 | },
112 |
113 | // defer hash change updates every 100ms
114 | changeDefer: 100,
115 | changeTimeout: null,
116 | onHashChange: function() {
117 | // throttle calls to update() so that they only happen every
118 | // `changeDefer` ms
119 | if (!this.changeTimeout) {
120 | var that = this;
121 | this.changeTimeout = setTimeout(function() {
122 | that.update();
123 | that.changeTimeout = null;
124 | }, this.changeDefer);
125 | }
126 | },
127 |
128 | isListening: false,
129 | hashChangeInterval: null,
130 | startListening: function() {
131 | this.map.on("moveend", this.onMapMove, this);
132 |
133 | if (HAS_HASHCHANGE) {
134 | L.DomEvent.addListener(window, "hashchange", this.onHashChange);
135 | } else {
136 | clearInterval(this.hashChangeInterval);
137 | this.hashChangeInterval = setInterval(this.onHashChange, 50);
138 | }
139 | this.isListening = true;
140 | },
141 |
142 | stopListening: function() {
143 | this.map.off("moveend", this.onMapMove, this);
144 |
145 | if (HAS_HASHCHANGE) {
146 | L.DomEvent.removeListener(window, "hashchange", this.onHashChange);
147 | } else {
148 | clearInterval(this.hashChangeInterval);
149 | }
150 | this.isListening = false;
151 | }
152 | };
153 | L.hash = function(map) {
154 | return new L.Hash(map);
155 | };
156 | L.Map.prototype.addHash = function() {
157 | this._hash = L.hash(this);
158 | };
159 | L.Map.prototype.removeHash = function() {
160 | this._hash.removeFrom();
161 | };
162 | })(window);
163 |
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # 0.6.6 Update Broke JSON
4 | Scrap Mechanic's Nov 0.6.6 update broke the JSON export to file method, for a workaround see the github issue with [workaround]. I have emailed the developers about the issue but with the holidays will probably be a while for a response.
5 |
6 | # Introduction
7 | This quickly outputs the world data of your scrap mechanic save game to a json file for display via leafletJS from pre-screenshotted tiles. Not quite as beautiful as my [older screenshot method], but SOOOOOoooooo much quicker. This method is somewhat future proof as well. New tiles will still be displayed just blank, but updates should only require a new download of the missing tiles images.
8 |
9 | # Example
10 | https://the1killer.github.io/scrapmechanictilemap/
11 |
12 | # INSTRUCTIONS
13 |
14 | !!!! BACKUP YOUR SAVE, not responsible for any issues !!!!
15 |
16 | 1. **Really backup your save!**
17 | 1. Download this repoistory, green "Code" button on the top right, or [Download Link]
18 | 1. Open `terrain_overworld.lua` from the downloaded files.
19 | 1. Copy lines 132-157, `local cells` *...to...* `cells = nil end`
20 | 1. Open `terrain_overworld.lua` in your game files, e.x. C:\Program Files (x86)\Steam\steamapps\common\Scrap Mechanic\Survival\Scripts\terrain\terrain_overworld.lua
21 | 1. Paste the lines into the game's terrain_overworld.lua, approx **line 130**, after `CreateCellTileStorageKeys()` within the `Load()` Function.
22 | 1. Replace `tile_database.lua` in your game files with the one from the downloaded files. E.x. C:\Program Files (x86)\Steam\steamapps\common\Scrap Mechanic\Survival\Scripts\terrain\overworld\tile_database.lua
23 | 1. Load your save game.
24 | 1. Copy **cells.json** from your game files C:\Program Files (x86)\Steam\steamapps\common\Scrap Mechanic\Survival\ to the **html\assets\json directory** in the downloads.
25 | 1. **If hosting on a webserver**
26 | 1. Copy all the files under **html/** to your webserver and open index.html and good to go.
27 | 1. **If viewing locally**
28 | 1. Open **cells.json**, select all text (ctrl-a), copy all text
29 | 1. Paste text into https://codebeautify.org/jsonminifier and click "minify/compress" then copy the resulting text on the right
30 | 1. Open **html/index.html**, on line 26 `SMOverviewMap.init();` add two back ticks( ` ) inside the parentheses
31 | 1. Paste the text from Part 2 inbetween the backticks. becomes `SMOverviewMap.init(`\``[[{......`\``);`
32 | 1. Open **html/index.html** to view your map
33 | 1. If you wish, remove or comment (--) the added lines in terrain_overworld.lua to improve game loading times
34 |
35 |
36 | ## Some things to note
37 | - Terrain height not really shown.
38 | - Game updates will remove the lua changes, requiring you to re-add them
39 | - How to setup your own free [GitHub website]
40 | - I think there could be some missing road/cliff tiles as there are many possibilties on how they mesh with eachother. Create an issue with your map seed and I can try to capture them.
41 |
42 |
43 | # Changelog
44 | - v1.0.0
45 | - Initial Release
46 |
47 | # Donation
48 | If you love this project and want to see more features give the developer a cup of coffee!
49 |
50 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=7JF52HNLJNHFE&item_name=SM+Overview+Donations¤cy_code=USD)
51 |
52 |
53 | # Tutorial Video
54 | Thanks to LionHeartBlue Gaming to making a tutorial video. Most people will need **Option 2** listed above and in the video.
55 |
56 | Remember to enclose the JSON with back ticks **\`**.
57 |
58 |
59 | [)](https://www.youtube.com/watch?v=OXBzApCRwJA))
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | 
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
68 |
69 | Scrap Mechanic is property of Axolot Games AB, I have no affiliation with them.
70 |
71 | [//]: # (Links)
72 | [AutoHotKey]: https://www.autohotkey.com/
73 | [GitHub website]: https://pages.github.com/
74 | [Download Link]: https://github.com/the1killer/sm_overview/archive/main.zip
75 | [older screenshot method]: https://github.com/the1killer/sm_overview_ahk
76 | [Donate]: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=7JF52HNLJNHFE&item_name=SM+Overview+Donations¤cy_code=USD
77 | [workaround]: https://github.com/the1killer/sm_overview/issues/17#issuecomment-1849092063
78 |
--------------------------------------------------------------------------------
/html/assets/js/cellparser.js:
--------------------------------------------------------------------------------
1 | let SMCellParser;
2 | SMCellParser = (function() {
3 |
4 | const parse = function(json) {
5 | var cells = new Array();
6 | var x=0,y=0;
7 | json.forEach((cell) => {
8 | // var cellX = coord.cx,cellY = coord.cy;
9 | // var x = coord.x,y = coord.y;
10 | // var cell = {};
11 | // cell.x = cellX;
12 | // cell.y = cellY;
13 | // cell.xidx = x;
14 | // cell.yidx = y;
15 |
16 | // if(y%10 == 0) {
17 | // console.log(cellX,cellY,x,y);
18 | // }
19 |
20 | // var xLookup = cellX;
21 | // var yLookup = cellY;
22 | var xLookup = cell.x;
23 | var yLookup = cell.y;
24 | // if(xLookup < 0) {
25 | // xLookup = x;
26 | // // xLookup = spanX - xLookup;
27 | // }
28 | // if(yLookup < 0) {
29 | // yLookup = y;
30 | // // yLookup = spanY - yLookup;
31 | // }
32 |
33 | try {
34 | // cell.tileId = json.tileId[yLookup][xLookup];
35 | let pt = getPoiType(cell.tileid);
36 | if(pt) {
37 | cell.poiType = pt;
38 | }
39 | } catch (err) {
40 | console.log(err)
41 | // console.log("tileId not found for "+x+","+y);
42 | }
43 | // try {
44 | // cell.cellDebug = json.cellDebug[yLookup][xLookup];
45 | // } catch (err) {
46 | // // console.log("cellDebug not found for "+x+","+y);
47 | // }
48 | try {
49 | // cell.flags = json.flags[yLookup][xLookup];
50 | var ctype = getCellType(cell.flags)
51 | cell.type = TypeTags[ctype];
52 | // if cellX >= -46 and cellX < -46 + 20 and cellY >= -46 and cellY < -46 + 16 then
53 | // tags[#tags + 1] = "STARTAREA"
54 | // end
55 | } catch (err) {
56 | // console.log("flags not found for "+x+","+y);
57 | // console.log(err);
58 | // exit();
59 | }
60 | // try {
61 | // cell.rotation = json.rotation[yLookup][xLookup];
62 | // } catch (err) {
63 | // // console.log("rotation not found for "+x+","+y);
64 | // }
65 | // try {
66 | // cell.elevation = json.elevation[yLookup][xLookup];
67 | // } catch (err) {
68 | // // console.log("elevation not found for "+x+","+y);
69 | // }
70 | // try {
71 | // cell.cornerDebug = json.cornerDebug[yLookup][xLookup];
72 | // } catch (err) {
73 | // // console.log("cornerDebug not found for "+x+","+y);
74 | // }
75 | // try {
76 | // cell.tileOffsetX = json.tileOffsetX[yLookup][xLookup];
77 | // } catch (err) {
78 | // // console.log("tileOffsetX not found for "+x+","+y);
79 | // }
80 | // try {
81 | // cell.tileOffsetY = json.tileOffsetY[yLookup][xLookup];
82 | // } catch (err) {
83 | // // console.log("tileOffsetY not found for "+x+","+y);
84 | // }
85 | try {
86 | cell.roads = getCellRoads(cell.flags)
87 | } catch (err) {
88 | console.log(err)
89 | }
90 |
91 | // console.log("x:"+cellX+", y:"+cellY)
92 | // console.log(cell);
93 | cells.push(cell);
94 | // console.log("push");
95 | // x+=1;
96 | // break;
97 | // y+=1;
98 | // }
99 | // })
100 | // y=0
101 | // x+=1;
102 |
103 | // x=0;
104 | // y+=1;
105 | // break;
106 | // }
107 | })
108 |
109 | console.log("cell count: "+cells.length);
110 |
111 | return cells;
112 | }
113 |
114 | function getCellType( flags ) {
115 | // if insideCellBounds( cellX, cellY ) then
116 | return (flags & MASK_TERRAINTYPE) >> SHIFT_TERRAINTYPE
117 | // end
118 | // return 0
119 | }
120 |
121 | function getPoiType( id ) {
122 | var poiType = Math.floor( id / 100 )
123 | if (poiType < 10000) {
124 | return POIS[poiType]
125 | }
126 | return null
127 | }
128 |
129 | function getCellRoads(flags) {
130 | let roadflags = flags & MASK_ROADS;
131 | let roads = "";
132 | if(roadflags & FLAG_ROAD_N) {
133 | roads += "N"
134 | }
135 | if(roadflags & FLAG_ROAD_S) {
136 | roads += "S"
137 | }
138 | if(roadflags & FLAG_ROAD_E) {
139 | roads += "E"
140 | }
141 | if(roadflags & FLAG_ROAD_W) {
142 | roads += "W"
143 | }
144 | if (roads != "") {
145 | return roads;
146 | }
147 | }
148 |
149 | // ////////////////////////////////////////////////////////////////////////////////
150 | // // Cell type constants
151 | // ////////////////////////////////////////////////////////////////////////////////
152 |
153 | const TYPE_MEADOW = 1
154 | const TYPE_FOREST = 2
155 | const TYPE_DESERT = 3 //TODO: Ravine. A desert cliff type of thing.
156 | const TYPE_FIELD = 4
157 | const TYPE_BURNTFOREST = 5
158 | const TYPE_AUTUMNFOREST = 6
159 | const TYPE_MOUNTAIN = 7
160 | const TYPE_LAKE = 8
161 |
162 | const DEBUG_R = 243
163 | const DEBUG_G = 244
164 | const DEBUG_B = 245
165 | const DEBUG_C = 246
166 | const DEBUG_M = 247
167 | const DEBUG_Y = 248
168 | const DEBUG_BLACK = 249
169 | const DEBUG_ORANGE = 250
170 | const DEBUG_PINK = 251
171 | const DEBUG_LIME = 252
172 | const DEBUG_SPING = 253
173 | const DEBUG_PURPLE = 254
174 | const DEBUG_LAKE = 255
175 |
176 | var TypeTags = ["NONE", "MEADOW", "FOREST", "DESERT", "FIELD", "BURNTFOREST", "AUTUMNFOREST", "MOUNTAIN", "LAKE"]
177 |
178 | // ////////////////////////////////////////////////////////////////////////////////////////////////////
179 | // // Constants
180 | // ////////////////////////////////////////////////////////////////////////////////////////////////////
181 |
182 | const CELL_SIZE = 64
183 |
184 | const MASK_CLIFF = 0x00ff
185 | const MASK_ROADS = 0x0f00
186 | const MASK_ROADCLIFF = 0x0fff
187 | const MASK_TERRAINTYPE = 0xf000
188 | const MASK_FLAT = 0x10000
189 |
190 | const FLAG_ROAD_E = 0x0100
191 | const FLAG_ROAD_N = 0x0200
192 | const FLAG_ROAD_W = 0x0400
193 | const FLAG_ROAD_S = 0x0800
194 |
195 | const MASK_ROADS_SN = FLAG_ROAD_S|FLAG_ROAD_N
196 | const MASK_ROADS_WE = FLAG_ROAD_W|FLAG_ROAD_E
197 |
198 | const SHIFT_TERRAINTYPE = 12
199 |
200 | ////////////////////////////////////////////////////////////////////////////////
201 |
202 |
203 | ////////////////////////////////////////////////////////////////////////////////
204 |
205 | // No type = MEADOW
206 | // No size = SMALL
207 |
208 | // Unique (MEADOW)
209 | var POIS = {};
210 | POIS[101] = "POI_CRASHSITE_AREA" //predefined area
211 | POIS[102] = "POI_HIDEOUT_XL"
212 | POIS[103] = "POI_SILODISTRICT_XL"
213 | POIS[104] = "POI_RUINCITY_XL" //roads
214 | POIS[105] = "POI_CRASHEDSHIP_LARGE"
215 | POIS[106] = "POI_CAMP_LARGE"
216 | POIS[107] = "POI_CAPSULESCRAPYARD_MEDIUM"
217 | POIS[108] = "POI_LABYRINTH_MEDIUM"
218 |
219 | // Special (MEADOW)
220 | POIS[109] = "POI_MECHANICSTATION_MEDIUM" // roads
221 | POIS[110] = "POI_PACKINGSTATIONVEG_MEDIUM" // roads
222 | POIS[111] = "POI_PACKINGSTATIONFRUIT_MEDIUM" // roads
223 |
224 | // Large Random
225 | POIS[112] = "POI_WAREHOUSE2_LARGE" // 2 floors, roads
226 | POIS[113] = "POI_WAREHOUSE3_LARGE" // 3 floors, roads
227 | POIS[114] = "POI_WAREHOUSE4_LARGE" // 4 floors, roads
228 | POIS[501] = "POI_BURNTFOREST_FARMBOTSCRAPYARD_LARGE" // burnt forest center
229 |
230 |
231 | // Small Random
232 | POIS[115] = "POI_ROAD" // meadow with roads
233 |
234 | POIS[116] = "POI_CAMP"
235 | POIS[117] = "POI_RUIN"
236 | POIS[118] = "POI_RANDOM"
237 |
238 | POIS[201] = "POI_FOREST_CAMP"
239 | POIS[202] = "POI_FOREST_RUIN"
240 | POIS[203] = "POI_FOREST_RANDOM"
241 |
242 | POIS[301] = "POI_DESERT_RANDOM"
243 |
244 | POIS[119] = "POI_FARMINGPATCH" // meadow adjacent to field
245 | POIS[401] = "POI_FIELD_RUIN"
246 | POIS[402] = "POI_FIELD_RANDOM"
247 |
248 | POIS[502] = "POI_BURNTFOREST_CAMP"
249 | POIS[503] = "POI_BURNTFOREST_RUIN"
250 | POIS[504] = "POI_BURNTFOREST_RANDOM"
251 |
252 | POIS[601] = "POI_AUTUMNFOREST_CAMP"
253 | POIS[602] = "POI_AUTUMNFOREST_RUIN"
254 | POIS[603] = "POI_AUTUMNFOREST_RANDOM"
255 |
256 | POIS[801] = "POI_LAKE_RANDOM"
257 |
258 | // Medium Random
259 | POIS[120] = "POI_RUIN_MEDIUM"
260 | POIS[121] = "POI_CHEMLAKE_MEDIUM"
261 | POIS[122] = "POI_BUILDAREA_MEDIUM"
262 |
263 | POIS[204] = "POI_FOREST_RUIN_MEDIUM"
264 |
265 | POIS[802] = "POI_LAKE_UNDERWATER_MEDIUM"
266 |
267 |
268 | POIS[1] = "POI_RANDOM_PLACEHOLDER"
269 | POIS[99] = "POI_TEST"
270 |
271 |
272 |
273 | return {
274 | parse
275 | }
276 | })();
--------------------------------------------------------------------------------
/missingimages.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 |
3 | let path = './html/';
4 | let filename = path+"assets/json/cells.json";
5 |
6 | let SMCellParser;
7 | SMCellParser = (function() {
8 |
9 | const parse = function() {
10 | let filedata = fs.readFileSync(filename);
11 | let json = JSON.parse(filedata);
12 | var cells = new Array();
13 | var x=0,y=0;
14 | json.forEach((cell) => {
15 | try {
16 | let pt = getPoiType(cell.tileid);
17 | if(pt) {
18 | cell.poiType = pt;
19 | }
20 | } catch (err) {
21 | console.log(err)
22 | // console.log("tileId not found for "+x+","+y);
23 | }
24 | try {
25 | var ctype = getCellType(cell.flags)
26 | cell.type = TypeTags[ctype];
27 | } catch (err) {
28 | // console.log("flags not found for "+x+","+y);
29 | // console.log(err);
30 | // exit();
31 | }
32 | try {
33 | var roads = getCellRoads(cell.flags)
34 | if(roads != undefined) {
35 | cell.roads = roads;
36 | }
37 | } catch (err) {
38 | console.log(err)
39 | }
40 | cells.push(cell);
41 | })
42 |
43 | cells.forEach((cell)=>{
44 | var turl = getTileURL(cell.tileid,cell.x,cell.y);
45 | var purl = getPoiUrl(cell.poiType,cell.tileid,cell.x,cell.y);
46 | if(cell.type != 'LAKE' && (turl == undefined && purl == undefined) && cell.poiType != "POI_CRASHSITE_AREA") {
47 | console.warn(`Missing image at ${cell.x},${cell.y} for id ${cell.tileid} ${cell.type} ${cell.poiType || ''}`)
48 | }
49 | });
50 |
51 | console.log("cell count: "+cells.length);
52 |
53 | // return cells;
54 | }
55 |
56 | function getCellType( flags ) {
57 | // if insideCellBounds( cellX, cellY ) then
58 | return (flags & MASK_TERRAINTYPE) >> SHIFT_TERRAINTYPE
59 | // end
60 | // return 0
61 | }
62 |
63 | function getPoiType( id ) {
64 | var poiType = Math.floor( id / 100 )
65 | if (poiType < 10000) {
66 | return POIS[poiType]
67 | }
68 | return null
69 | }
70 |
71 | function getCellRoads(flags) {
72 | let roadflags = flags & MASK_ROADS;
73 | let roads = "";
74 | if(roadflags & FLAG_ROAD_N) {
75 | roads += "N"
76 | }
77 | if(roadflags & FLAG_ROAD_S) {
78 | roads += "S"
79 | }
80 | if(roadflags & FLAG_ROAD_E) {
81 | roads += "E"
82 | }
83 | if(roadflags & FLAG_ROAD_W) {
84 | roads += "W"
85 | }
86 | if (roads != "") {
87 | return roads;
88 | }
89 | }
90 |
91 | // ////////////////////////////////////////////////////////////////////////////////
92 | // // Cell type constants
93 | // ////////////////////////////////////////////////////////////////////////////////
94 |
95 | const TYPE_MEADOW = 1
96 | const TYPE_FOREST = 2
97 | const TYPE_DESERT = 3 //TODO: Ravine. A desert cliff type of thing.
98 | const TYPE_FIELD = 4
99 | const TYPE_BURNTFOREST = 5
100 | const TYPE_AUTUMNFOREST = 6
101 | const TYPE_MOUNTAIN = 7
102 | const TYPE_LAKE = 8
103 |
104 | const DEBUG_R = 243
105 | const DEBUG_G = 244
106 | const DEBUG_B = 245
107 | const DEBUG_C = 246
108 | const DEBUG_M = 247
109 | const DEBUG_Y = 248
110 | const DEBUG_BLACK = 249
111 | const DEBUG_ORANGE = 250
112 | const DEBUG_PINK = 251
113 | const DEBUG_LIME = 252
114 | const DEBUG_SPING = 253
115 | const DEBUG_PURPLE = 254
116 | const DEBUG_LAKE = 255
117 |
118 | var TypeTags = ["NONE", "MEADOW", "FOREST", "DESERT", "FIELD", "BURNTFOREST", "AUTUMNFOREST", "MOUNTAIN", "LAKE"]
119 |
120 | // ////////////////////////////////////////////////////////////////////////////////////////////////////
121 | // // Constants
122 | // ////////////////////////////////////////////////////////////////////////////////////////////////////
123 |
124 | const CELL_SIZE = 64
125 |
126 | const MASK_CLIFF = 0x00ff
127 | const MASK_ROADS = 0x0f00
128 | const MASK_ROADCLIFF = 0x0fff
129 | const MASK_TERRAINTYPE = 0xf000
130 | const MASK_FLAT = 0x10000
131 |
132 | const FLAG_ROAD_E = 0x0100
133 | const FLAG_ROAD_N = 0x0200
134 | const FLAG_ROAD_W = 0x0400
135 | const FLAG_ROAD_S = 0x0800
136 |
137 | const MASK_ROADS_SN = FLAG_ROAD_S|FLAG_ROAD_N
138 | const MASK_ROADS_WE = FLAG_ROAD_W|FLAG_ROAD_E
139 |
140 | const SHIFT_TERRAINTYPE = 12
141 |
142 | ////////////////////////////////////////////////////////////////////////////////
143 |
144 |
145 | ////////////////////////////////////////////////////////////////////////////////
146 |
147 | // No type = MEADOW
148 | // No size = SMALL
149 |
150 | // Unique (MEADOW)
151 | var POIS = {};
152 | POIS[101] = "POI_CRASHSITE_AREA" //predefined area
153 | POIS[102] = "POI_HIDEOUT_XL"
154 | POIS[103] = "POI_SILODISTRICT_XL"
155 | POIS[104] = "POI_RUINCITY_XL" //roads
156 | POIS[105] = "POI_CRASHEDSHIP_LARGE"
157 | POIS[106] = "POI_CAMP_LARGE"
158 | POIS[107] = "POI_CAPSULESCRAPYARD_MEDIUM"
159 | POIS[108] = "POI_LABYRINTH_MEDIUM"
160 |
161 | // Special (MEADOW)
162 | POIS[109] = "POI_MECHANICSTATION_MEDIUM" // roads
163 | POIS[110] = "POI_PACKINGSTATIONVEG_MEDIUM" // roads
164 | POIS[111] = "POI_PACKINGSTATIONFRUIT_MEDIUM" // roads
165 |
166 | // Large Random
167 | POIS[112] = "POI_WAREHOUSE2_LARGE" // 2 floors, roads
168 | POIS[113] = "POI_WAREHOUSE3_LARGE" // 3 floors, roads
169 | POIS[114] = "POI_WAREHOUSE4_LARGE" // 4 floors, roads
170 | POIS[501] = "POI_BURNTFOREST_FARMBOTSCRAPYARD_LARGE" // burnt forest center
171 |
172 |
173 | // Small Random
174 | POIS[115] = "POI_ROAD" // meadow with roads
175 |
176 | POIS[116] = "POI_CAMP"
177 | POIS[117] = "POI_RUIN"
178 | POIS[118] = "POI_RANDOM"
179 |
180 | POIS[201] = "POI_FOREST_CAMP"
181 | POIS[202] = "POI_FOREST_RUIN"
182 | POIS[203] = "POI_FOREST_RANDOM"
183 |
184 | POIS[301] = "POI_DESERT_RANDOM"
185 |
186 | POIS[119] = "POI_FARMINGPATCH" // meadow adjacent to field
187 | POIS[401] = "POI_FIELD_RUIN"
188 | POIS[402] = "POI_FIELD_RANDOM"
189 |
190 | POIS[502] = "POI_BURNTFOREST_CAMP"
191 | POIS[503] = "POI_BURNTFOREST_RUIN"
192 | POIS[504] = "POI_BURNTFOREST_RANDOM"
193 |
194 | POIS[601] = "POI_AUTUMNFOREST_CAMP"
195 | POIS[602] = "POI_AUTUMNFOREST_RUIN"
196 | POIS[603] = "POI_AUTUMNFOREST_RANDOM"
197 |
198 | POIS[801] = "POI_LAKE_RANDOM"
199 |
200 | // Medium Random
201 | POIS[120] = "POI_RUIN_MEDIUM"
202 | POIS[121] = "POI_CHEMLAKE_MEDIUM"
203 | POIS[122] = "POI_BUILDAREA_MEDIUM"
204 |
205 | POIS[204] = "POI_FOREST_RUIN_MEDIUM"
206 |
207 | POIS[802] = "POI_LAKE_UNDERWATER_MEDIUM"
208 |
209 |
210 | POIS[1] = "POI_RANDOM_PLACEHOLDER"
211 | POIS[99] = "POI_TEST"
212 |
213 |
214 | function getTileURL(tileid,x,y) {
215 | var tiles = [
216 | 10105,10106,10107,10108,
217 | 11501,11502,11503,11504,11505,11506,11507,
218 | 11601,
219 | 11701,11702,11703,11704,
220 | 11801,11802,11803,11804,11805,11806,11807,11808,11809,
221 | 11901,11902,11903,
222 | 20101,20102,20103,20104,20105,20106,20107,
223 | 20301,20302,20303,20304,20305,20306,20307,
224 | 30101,30102,
225 | 40101,40201,40202,40203,
226 | 50201,
227 | 50301,
228 | 50402,
229 | 60101,60102,60103,
230 | 60201,
231 | 60301,60302,60303,60304,
232 | 80103,
233 | 1000001,1000002,1000003,1000004,1000005,1000006,1000007,1000008,1000009,1000010,1000011,1000012,1000013,1000014,1000015,1000016,1000017,1000018,1000019,1000020,1000021,1000022,1000023,1000024,1000025,1000026,1000027,1000028,1000029,
234 | 1000101,1000102,1000103,1000105,1000106,1000107,1000104,1000201,1000202,1000301,
235 | 1000501,1000502,1000503,1000504,1000505,1000506,1000507,1000508,1000509,
236 | 1000601,1000602,
237 | 1000701,
238 | 1000901,1000902,
239 | 1001001,1001002,1001101,1001301,1001401,1001501,1001701,1001702,1002101,1002102,1002103,1002201,1002301,1002501,1002502,1002503,1002601,1002602,1002701,1002901,
240 | 1003001,1003101,1003501,1003701,1004701,1005301,1005501,1005701,1005801,1005901,1006101,1006201,1006301,
241 | 1004101,1004102,1004201,1004301,
242 | 1025601,1128402,
243 | 1076801,1076802,1076803,1076804,1076805,1076806,1076807,1076808,1076809,1076810,1076811,1076812,1076813,1076814,
244 | 1076901,
245 | 1077201,1077301,1078401,1078801,1078901,
246 | 1083201,1083701,1084801,1084901,
247 | 1128001,1128002,1128003,1128004,1128005,1128006,1128007,1128008,1128009,1128010,1128011,1128012,1128013,1128014,1128015,1128016,1128501,
248 | 1128101,1128401,1130001,1130101,1134901,1179201,1083301,
249 | 1384001,1384002,
250 | 2000101,2000102,2000103,2000104,2000105,2000301,2000302,2000303,2000304,2000305,2000501,2000701,2001501,2001502,2001503,
251 | 3000101,3000301,3000302,3000701,3000501,3001501,3001502,3001503,3001504,3001505,3001506,
252 | 4000101,4000301,4000501,4000701,4001501,4001502,4001503,4001504,4001505,4001506,4001507,
253 | 5000101,5000102,5000103,5000301,5000302,5000303,5000501,5000701,5000702,5000703,5001501,5001502,
254 | 6000101,6000102,6000103,6000104,6000105,
255 | 6000301,6000302,6000303,6000304,6000305,
256 | 6000501,
257 | 6000701,
258 | 6001501,6001502,
259 | 8000101,8000102,8000103,8000104,8000105,8000106,8000107,8000108,8000109,8000110,8000111,
260 | 8000301,8000302,8000303,8000304,8000305,8000306,8000307,8000308,8000309,8000310,8000311,8000312,8000313,8000314,
261 | 8000501,
262 | 8000701,8000702,8000703,8000704,8000705,8000706
263 | ];
264 | if(tiles.includes(tileid)) {
265 | return `./assets/img/tiles/${tileid}.jpg`
266 | }
267 | // if(tileid > 8000000) {
268 | // return './assets/img/lake_generic.jpg'
269 | // }
270 | if(x == -37 && y == -39) {
271 | return './assets/img/start_crashsite_-37_-39.jpg';
272 | } else if(x == -37 && y == -39) {
273 | return './assets/img/start_crashsite_-37_-39.jpg';
274 | } else if(x == -37 && y == -40) {
275 | return './assets/img/start_crashsite_-37_-40.jpg';
276 | } else if(x == -36 && y == -40) {
277 | return './assets/img/start_crashsite_-36_-40.jpg';
278 | } else if(x == -36 && y == -41) {
279 | return './assets/img/start_crashsite_-36_-41.jpg';
280 | }
281 | }
282 |
283 | var POI_SIZES = {
284 | // "POI_ROAD":1,
285 | "POI_CRASHSITE_AREA":2,
286 | "POI_MECHANICSTATION_MEDIUM":2,
287 | "POI_LABYRINTH_MEDIUM":2,
288 | "POI_CHEMLAKE_MEDIUM":2,
289 | "POI_RUIN_MEDIUM":2,
290 | "POI_FOREST_RUIN_MEDIUM":2,
291 | "POI_CAPSULESCRAPYARD_MEDIUM":2,
292 | "POI_PACKINGSTATIONVEG_MEDIUM": 2,
293 | "POI_PACKINGSTATIONFRUIT_MEDIUM": 2,
294 | "POI_LAKE_UNDERWATER_MEDIUM": 2,
295 | "POI_CAMP_LARGE":4,
296 | "POI_CRASHEDSHIP_LARGE":4,
297 | "POI_BURNTFOREST_FARMBOTSCRAPYARD_LARGE":4,
298 | "POI_WAREHOUSE2_LARGE":4,
299 | "POI_WAREHOUSE3_LARGE":4,
300 | "POI_WAREHOUSE4_LARGE":4,
301 | "POI_HIDEOUT_XL":8,
302 | "POI_RUINCITY_XL": 8,
303 | "POI_SILODISTRICT_XL": 8
304 | };
305 |
306 | function getPoiUrl(poiType,tileid,x,y) {
307 | switch(poiType) {
308 | case 'POI_MECHANICSTATION_MEDIUM':
309 | return './assets/img/mechanic_station.png'
310 | break;
311 | case 'POI_HIDEOUT_XL':
312 | return './assets/img/hideout.png'
313 | break;
314 | case 'POI_CAMP_LARGE':
315 | return './assets/img/camp_large.jpg'
316 | break;
317 | case 'POI_WAREHOUSE4_LARGE':
318 | return './assets/img/warehouse4.png'
319 | break;
320 | case 'POI_WAREHOUSE3_LARGE':
321 | return './assets/img/warehouse3_large.png'
322 | break;
323 | case 'POI_WAREHOUSE2_LARGE':
324 | return './assets/img/warehouse2.jpg'
325 | break;
326 | case 'POI_SILODISTRICT_XL':
327 | return './assets/img/silodistrict.jpg'
328 | break;
329 | case 'POI_RUINCITY_XL':
330 | return './assets/img/scrapcity.jpg'
331 | break;
332 | case 'POI_PACKINGSTATIONVEG_MEDIUM':
333 | return './assets/img/packing_veg.jpg'
334 | break;
335 | case 'POI_PACKINGSTATIONFRUIT_MEDIUM':
336 | return './assets/img/packing_fruit.jpg'
337 | break;
338 | case 'POI_CHEMLAKE_MEDIUM':
339 | if(tileid == 12103) {
340 | return './assets/img/chemlake_medium_3.jpg'
341 | } else if(tileid == 12102) {
342 | return './assets/img/chemlake_medium_2.jpg'
343 | }
344 | return './assets/img/chemlake_medium_1.jpg'
345 | break;
346 | case 'POI_RUIN_MEDIUM':
347 | if(tileid == 12003) {
348 | return './assets/img/ruin_medium_3.jpg'
349 | }
350 | return './assets/img/ruin_medium_4.jpg'
351 | break;
352 | case 'POI_FOREST_RUIN_MEDIUM':
353 | if(tileid == 20402) {
354 | return './assets/img/forest_ruin_medium_2.jpg'
355 | }
356 | return './assets/img/forest_ruin_medium_1.jpg'
357 | break;
358 | case 'POI_LAKE_UNDERWATER_MEDIUM':
359 | if(tileid == 80203) {
360 | return './assets/img/underwater_med_3.jpg'
361 | } else
362 | if(tileid == 80204 || tileid == 80202) {
363 | return './assets/img/underwater_med_4.jpg'
364 | }
365 | // return './assets/img/underwater_med_3.jpg'
366 | break;
367 | case 'POI_CRASHSITE_AREA':
368 | if(tileid == 10103) {
369 | return './assets/img/start_crashsite3.jpg'
370 | } else if(tileid == 10102) {
371 | return './assets/img/start_crashsite2.jpg'
372 | } else if (tileid == 10101 && x == -38 && y == -42) {
373 | return './assets/img/start_crashsite1.jpg'
374 | }
375 | break;
376 | case 'POI_CAPSULESCRAPYARD_MEDIUM':
377 | return './assets/img/capsule_scrapyard.jpg'
378 | break;
379 | case 'POI_BURNTFOREST_FARMBOTSCRAPYARD_LARGE':
380 | return './assets/img/burntforest_farmbot_scrapyard.jpg'
381 | break;
382 | case 'POI_CRASHEDSHIP_LARGE':
383 | return './assets/img/crashed_ship.jpg'
384 | break;
385 | case 'POI_LABYRINTH_MEDIUM':
386 | return './assets/img/labyrinth.jpg'
387 | break;
388 | case 'POI_BUILDAREA_MEDIUM':
389 | return './assets/img/buildarea.jpg'
390 | break;
391 | }
392 | }
393 |
394 |
395 | return {
396 | parse
397 | }
398 | })();
399 |
400 | SMCellParser.parse();
--------------------------------------------------------------------------------
/html/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "scrapmechanicmap",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11 | "dev": true,
12 | "requires": {
13 | "mime-types": "2.1.27",
14 | "negotiator": "0.6.2"
15 | }
16 | },
17 | "array-flatten": {
18 | "version": "1.1.1",
19 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
20 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
21 | "dev": true
22 | },
23 | "body-parser": {
24 | "version": "1.19.0",
25 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
26 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
27 | "dev": true,
28 | "requires": {
29 | "bytes": "3.1.0",
30 | "content-type": "1.0.4",
31 | "debug": "2.6.9",
32 | "depd": "1.1.2",
33 | "http-errors": "1.7.2",
34 | "iconv-lite": "0.4.24",
35 | "on-finished": "2.3.0",
36 | "qs": "6.7.0",
37 | "raw-body": "2.4.0",
38 | "type-is": "1.6.18"
39 | }
40 | },
41 | "bytes": {
42 | "version": "3.1.0",
43 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
44 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
45 | "dev": true
46 | },
47 | "content-disposition": {
48 | "version": "0.5.3",
49 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
50 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
51 | "dev": true,
52 | "requires": {
53 | "safe-buffer": "5.1.2"
54 | }
55 | },
56 | "content-type": {
57 | "version": "1.0.4",
58 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
59 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
60 | "dev": true
61 | },
62 | "cookie": {
63 | "version": "0.4.0",
64 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
65 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
66 | "dev": true
67 | },
68 | "cookie-signature": {
69 | "version": "1.0.6",
70 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
71 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
72 | "dev": true
73 | },
74 | "debug": {
75 | "version": "2.6.9",
76 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
77 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
78 | "dev": true,
79 | "requires": {
80 | "ms": "2.0.0"
81 | }
82 | },
83 | "depd": {
84 | "version": "1.1.2",
85 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
86 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
87 | "dev": true
88 | },
89 | "destroy": {
90 | "version": "1.0.4",
91 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
92 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
93 | "dev": true
94 | },
95 | "ee-first": {
96 | "version": "1.1.1",
97 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
98 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
99 | "dev": true
100 | },
101 | "encodeurl": {
102 | "version": "1.0.2",
103 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
104 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
105 | "dev": true
106 | },
107 | "escape-html": {
108 | "version": "1.0.3",
109 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
110 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
111 | "dev": true
112 | },
113 | "etag": {
114 | "version": "1.8.1",
115 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
116 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
117 | "dev": true
118 | },
119 | "express": {
120 | "version": "4.17.1",
121 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
122 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
123 | "dev": true,
124 | "requires": {
125 | "accepts": "1.3.7",
126 | "array-flatten": "1.1.1",
127 | "body-parser": "1.19.0",
128 | "content-disposition": "0.5.3",
129 | "content-type": "1.0.4",
130 | "cookie": "0.4.0",
131 | "cookie-signature": "1.0.6",
132 | "debug": "2.6.9",
133 | "depd": "1.1.2",
134 | "encodeurl": "1.0.2",
135 | "escape-html": "1.0.3",
136 | "etag": "1.8.1",
137 | "finalhandler": "1.1.2",
138 | "fresh": "0.5.2",
139 | "merge-descriptors": "1.0.1",
140 | "methods": "1.1.2",
141 | "on-finished": "2.3.0",
142 | "parseurl": "1.3.3",
143 | "path-to-regexp": "0.1.7",
144 | "proxy-addr": "2.0.6",
145 | "qs": "6.7.0",
146 | "range-parser": "1.2.1",
147 | "safe-buffer": "5.1.2",
148 | "send": "0.17.1",
149 | "serve-static": "1.14.1",
150 | "setprototypeof": "1.1.1",
151 | "statuses": "1.5.0",
152 | "type-is": "1.6.18",
153 | "utils-merge": "1.0.1",
154 | "vary": "1.1.2"
155 | }
156 | },
157 | "finalhandler": {
158 | "version": "1.1.2",
159 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
160 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
161 | "dev": true,
162 | "requires": {
163 | "debug": "2.6.9",
164 | "encodeurl": "1.0.2",
165 | "escape-html": "1.0.3",
166 | "on-finished": "2.3.0",
167 | "parseurl": "1.3.3",
168 | "statuses": "1.5.0",
169 | "unpipe": "1.0.0"
170 | }
171 | },
172 | "forwarded": {
173 | "version": "0.1.2",
174 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
175 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
176 | "dev": true
177 | },
178 | "fresh": {
179 | "version": "0.5.2",
180 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
181 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
182 | "dev": true
183 | },
184 | "http-errors": {
185 | "version": "1.7.2",
186 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
187 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
188 | "dev": true,
189 | "requires": {
190 | "depd": "1.1.2",
191 | "inherits": "2.0.3",
192 | "setprototypeof": "1.1.1",
193 | "statuses": "1.5.0",
194 | "toidentifier": "1.0.0"
195 | }
196 | },
197 | "iconv-lite": {
198 | "version": "0.4.24",
199 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
200 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
201 | "dev": true,
202 | "requires": {
203 | "safer-buffer": "2.1.2"
204 | }
205 | },
206 | "inherits": {
207 | "version": "2.0.3",
208 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
209 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
210 | "dev": true
211 | },
212 | "ipaddr.js": {
213 | "version": "1.9.1",
214 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
215 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
216 | "dev": true
217 | },
218 | "leaflet-hash": {
219 | "version": "0.2.1",
220 | "resolved": "https://registry.npmjs.org/leaflet-hash/-/leaflet-hash-0.2.1.tgz",
221 | "integrity": "sha1-w2xxg0fFJDAztXy0uuomEZ2CxwE="
222 | },
223 | "media-typer": {
224 | "version": "0.3.0",
225 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
226 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
227 | "dev": true
228 | },
229 | "merge-descriptors": {
230 | "version": "1.0.1",
231 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
232 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
233 | "dev": true
234 | },
235 | "methods": {
236 | "version": "1.1.2",
237 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
238 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
239 | "dev": true
240 | },
241 | "mime": {
242 | "version": "1.6.0",
243 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
244 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
245 | "dev": true
246 | },
247 | "mime-db": {
248 | "version": "1.44.0",
249 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
250 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
251 | "dev": true
252 | },
253 | "mime-types": {
254 | "version": "2.1.27",
255 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
256 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
257 | "dev": true,
258 | "requires": {
259 | "mime-db": "1.44.0"
260 | }
261 | },
262 | "ms": {
263 | "version": "2.0.0",
264 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
265 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
266 | "dev": true
267 | },
268 | "negotiator": {
269 | "version": "0.6.2",
270 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
271 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
272 | "dev": true
273 | },
274 | "on-finished": {
275 | "version": "2.3.0",
276 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
277 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
278 | "dev": true,
279 | "requires": {
280 | "ee-first": "1.1.1"
281 | }
282 | },
283 | "parseurl": {
284 | "version": "1.3.3",
285 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
286 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
287 | "dev": true
288 | },
289 | "path-to-regexp": {
290 | "version": "0.1.7",
291 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
292 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
293 | "dev": true
294 | },
295 | "proxy-addr": {
296 | "version": "2.0.6",
297 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
298 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
299 | "dev": true,
300 | "requires": {
301 | "forwarded": "0.1.2",
302 | "ipaddr.js": "1.9.1"
303 | }
304 | },
305 | "qs": {
306 | "version": "6.7.0",
307 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
308 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
309 | "dev": true
310 | },
311 | "range-parser": {
312 | "version": "1.2.1",
313 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
314 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
315 | "dev": true
316 | },
317 | "raw-body": {
318 | "version": "2.4.0",
319 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
320 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
321 | "dev": true,
322 | "requires": {
323 | "bytes": "3.1.0",
324 | "http-errors": "1.7.2",
325 | "iconv-lite": "0.4.24",
326 | "unpipe": "1.0.0"
327 | }
328 | },
329 | "safe-buffer": {
330 | "version": "5.1.2",
331 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
332 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
333 | "dev": true
334 | },
335 | "safer-buffer": {
336 | "version": "2.1.2",
337 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
338 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
339 | "dev": true
340 | },
341 | "send": {
342 | "version": "0.17.1",
343 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
344 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
345 | "dev": true,
346 | "requires": {
347 | "debug": "2.6.9",
348 | "depd": "1.1.2",
349 | "destroy": "1.0.4",
350 | "encodeurl": "1.0.2",
351 | "escape-html": "1.0.3",
352 | "etag": "1.8.1",
353 | "fresh": "0.5.2",
354 | "http-errors": "1.7.2",
355 | "mime": "1.6.0",
356 | "ms": "2.1.1",
357 | "on-finished": "2.3.0",
358 | "range-parser": "1.2.1",
359 | "statuses": "1.5.0"
360 | },
361 | "dependencies": {
362 | "ms": {
363 | "version": "2.1.1",
364 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
365 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
366 | "dev": true
367 | }
368 | }
369 | },
370 | "serve-static": {
371 | "version": "1.14.1",
372 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
373 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
374 | "dev": true,
375 | "requires": {
376 | "encodeurl": "1.0.2",
377 | "escape-html": "1.0.3",
378 | "parseurl": "1.3.3",
379 | "send": "0.17.1"
380 | }
381 | },
382 | "setprototypeof": {
383 | "version": "1.1.1",
384 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
385 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
386 | "dev": true
387 | },
388 | "statuses": {
389 | "version": "1.5.0",
390 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
391 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
392 | "dev": true
393 | },
394 | "toidentifier": {
395 | "version": "1.0.0",
396 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
397 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
398 | "dev": true
399 | },
400 | "type-is": {
401 | "version": "1.6.18",
402 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
403 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
404 | "dev": true,
405 | "requires": {
406 | "media-typer": "0.3.0",
407 | "mime-types": "2.1.27"
408 | }
409 | },
410 | "unpipe": {
411 | "version": "1.0.0",
412 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
413 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
414 | "dev": true
415 | },
416 | "utils-merge": {
417 | "version": "1.0.1",
418 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
419 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
420 | "dev": true
421 | },
422 | "vary": {
423 | "version": "1.1.2",
424 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
425 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
426 | "dev": true
427 | }
428 | }
429 | }
430 |
--------------------------------------------------------------------------------
/html/assets/js/sm_overview_map.js:
--------------------------------------------------------------------------------
1 | //
2 | // SM Overview Map
3 | // v1.0.0
4 | //
5 | let SMOverviewMap;
6 | SMOverviewMap = (function() {
7 | var celljson = "";
8 | var celldata = [];
9 | var cells = {};
10 | var map;
11 | var clickmarker;
12 |
13 | var minZoom = 0
14 | var maxZoom = 5
15 | var gridSize = 64
16 |
17 | // A quick extension to allow image layer rotation.
18 | L.RotateImageLayer = L.ImageOverlay.extend({
19 | options: {rotation: 0},
20 | _animateZoom: function(e){
21 | L.ImageOverlay.prototype._animateZoom.call(this, e);
22 | var img = this._image;
23 | img.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.rotation + 'deg)';
24 | },
25 | _reset: function(){
26 | L.ImageOverlay.prototype._reset.call(this);
27 | var img = this._image;
28 | img.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.rotation + 'deg)';
29 | }
30 | });
31 | L.rotateImageLayer = function(url, bounds, options) {
32 | return new L.RotateImageLayer(url, bounds, options);
33 | };
34 |
35 | L.TileLayer.OffsetTileLayer = L.TileLayer.extend({
36 | _getTilePos: function (coords) {
37 | var pos = L.TileLayer.prototype._getTilePos.call(this, coords);
38 | if(coords.z <= 1) {
39 | return pos.subtract([200, 420]);
40 | } else if(coords.z == 2){
41 | return pos.subtract([1200, 1400]);
42 | } else {
43 | return pos;
44 | }
45 | }
46 | });
47 |
48 | var markerIcon = L.icon({
49 | iconUrl: './assets/img/marker.png',
50 | shadowUrl: 'https://unpkg.com/leaflet@1.7.1/dist/images/marker-shadow.png',
51 | // iconSize: [38,84],
52 | iconSize: [20,44],
53 | iconAnchor: [9,44],
54 | popupAnchor: [0,-50]
55 | })
56 |
57 | L.tileLayer.offsetTileLayer = function(opts) {
58 | return new L.TileLayer.OffsetTileLayer(opts);
59 | };
60 |
61 | // var tileLayer = L.tileLayer.offsetTileLayer('./img/{x},{y}.jpg', {
62 | // noWrap: true,
63 | // maxNativeZoom: 1,
64 | // minNativeZoom: 1,
65 | // tileSize:250,
66 | // className: "imgTileLayer"
67 | // // tileSize: 1000
68 | // }).addTo(map)
69 |
70 | let loadFile = async function(file, callback) {
71 | $.getJSON(file, function() {
72 | }).done(function(d) {
73 | if(typeof callback === 'function') {
74 | callback(d);
75 | } else {
76 | return d;
77 | }
78 | }).fail(function(d, e, f) {
79 | console.warn(file + " had a problem loading. Sorry!");
80 | console.warn(d, e, f);
81 | }).always(function() {
82 | });
83 | };
84 | let xy = function(x, y) {
85 | let n = L.latLng;
86 | return L.Util.isArray(x) ? n(x[1], x[0]) : n(y, x)
87 | }
88 |
89 | let loadCells = function(json) {
90 | celljson = json;
91 | celldata = SMCellParser.parse(json)
92 |
93 | // var lakeTypes = {}
94 | var poiCoords = [];
95 | // var cells = {};
96 | var stats = "";
97 | var typeCounts = [];
98 | var poiCounts = [];
99 | celldata.forEach((cell) => {
100 | if(cells[cell.x] == undefined) {
101 | cells[cell.x] = {};
102 | }
103 | cells[cell.x][cell.y] = cell;
104 | if(cell.poiType) {
105 | poiCoords.push([cell.x,cell.y]);
106 | }
107 | if(typeCounts[cell.type] == undefined) {
108 | typeCounts[cell.type] = 0;
109 | }
110 | typeCounts[cell.type] += 1;
111 | // if(cell.type == 'LAKE') {
112 | // var id = cell.tileid;
113 | // if(lakeTypes[id] == undefined) {
114 | // lakeTypes[id] = 1;
115 | // } else {
116 | // lakeTypes[id] = lakeTypes[id] + 1;
117 | // }
118 | // }
119 | })
120 | stats += `Map Seed: ${celldata[0].seed}
`
121 | stats += `Cell Types:
`
122 |
123 | var sortedKeys = Object.keys(typeCounts).sort(function(a,b) {
124 | return ( typeCounts[a] > typeCounts[b] ) ? -1 : 1;
125 | })
126 | sortedKeys.forEach((t) => {
127 | var name = t;
128 | if(name == "NONE") {name = "NONE (Road/Cliff)"}
129 | stats += `| ${name}: | ${typeCounts[t]} (${Math.floor((typeCounts[t] / celldata.length) * 100)}%) |
`
130 | })
131 | stats += "
"
132 | // console.log(JSON.stringify(lakeTypes))
133 |
134 | var poisSum = 0;
135 | poiCoords.forEach((coord) => {
136 | let x=coord[0],y=coord[1];
137 | let cell = cells[x][y];
138 | if(cell.poiType && cell.foundPoi == undefined) {
139 | if(poiCounts[cell.poiType] == undefined) {
140 | poiCounts[cell.poiType] = 0;
141 | }
142 | // if(cell.poiType != "POI_CRASHSITE_AREA") {
143 | poiCounts[cell.poiType] += 1;
144 | poisSum += 1;
145 | // }
146 |
147 | let size = POI_SIZES[cell.poiType]
148 | if(size != undefined) {
149 | // console.log(`found ${cell.poiType} at ${x},${y} with size ${size} with tile id ${cell.tileid}`)
150 | let mod = (gridSize / 2)
151 | let startx = mod * x;
152 | let starty = ( mod * y ) - mod;
153 | let endx = startx + ((size) * mod)
154 | let endy = starty + ((size) * mod)
155 | let poiUrl = getPoiUrl(cell.poiType,cell.tileid,x,y);
156 | if(!poiUrl) {
157 | if(cell.type != "LAKE" && cell.poiType != "POI_CRASHSITE_AREA") {
158 | console.log(`Missing POI Image at ${x},${y} for id ${cell.tileid} ${cell.poiType}`)
159 | }
160 | }
161 | if(poiUrl != undefined) {
162 | let rotation=0;
163 | switch(cell.rotation) {
164 | case 0:
165 | rotation=0;
166 | break;
167 | case 1:
168 | rotation=270;
169 | // startx += mod * size
170 | starty -= mod * size
171 | // endx += mod * size
172 | endy -= mod * size
173 | break;
174 | case 2:
175 | rotation=180;
176 | startx += mod * size
177 | starty -= mod * size
178 | endx += mod * size
179 | endy -= mod * size
180 | break;
181 | case 3:
182 | rotation=90;
183 | startx += mod * size
184 | // starty += mod * size
185 | endx += mod * size
186 | // endy += mod * size
187 | break;
188 | }
189 | let poiBounds = [xy(startx, starty), xy(endx, endy)];
190 | L.rotateImageLayer(poiUrl, poiBounds, {/*opacity: 0.85,*/ pane:'poiPane',rotation:rotation}).addTo(map).bringToFront();
191 | }
192 | //Mark all cells for this POI so we dont process them further
193 | for(var ix=0;ix poiCounts[b] ) ? -1 : 1;
212 | })
213 |
214 | stats += `POI Types:
`
215 | sortedKeys.forEach((t) => {
216 | stats += `| ${t}: | ${poiCounts[t]} (${Math.floor((poiCounts[t] / poisSum) * 100)}%) |
`
217 | })
218 | stats += "
"
219 |
220 | document.getElementById("stats-content").innerHTML = stats;
221 | document.getElementById("stats-toggle").addEventListener('click',function(event){
222 | var content = document.getElementById("stats-content")
223 | if(content.classList.contains('collapsed')) {
224 | content.classList.remove("collapsed")
225 | document.getElementById("stats").classList.add("scroll-y")
226 | } else {
227 | content.classList.add("collapsed")
228 | document.getElementById("stats").classList.remove("scroll-y")
229 | }
230 | event.preventDefault();
231 | })
232 |
233 | L.GridLayer.DebugCoords = L.GridLayer.extend({
234 | createTile: function (coords) {
235 | var x = coords.x;
236 | var y = coords.y;
237 | var tile = document.createElement('div');
238 | tile.classList.add("cell")
239 | var inner = document.createElement('div');
240 | inner.classList.add("innercell")
241 | // inner.innerHTML = [x, y * -1].join(', ');
242 | tile.appendChild(inner);
243 |
244 | //temp while matching grid to img
245 | // x -= 3;
246 | // y -= 6;
247 |
248 | // tile.innerHTML = [x, y].join(', ');
249 | var div = document.createElement('div');
250 | inner.appendChild(div)
251 | try {
252 | var cell = cells[x][y * -1];
253 | // var cell = cells[x][y];
254 | // inner.innerHTML += "
"+[cell.xidx, cell.yidx].join(', ')+"";
255 | // div.innerHTML = cell.type;
256 | tile.classList.add(cell.type.toLowerCase())
257 | if(cell.poiType && cell.type == 'LAKE') {
258 | div.innerHTML += "
"+cell.poiType+""
259 | // div.innerHTML += ""+cell.tileid+"
"
260 | }
261 | // div.innerHTML += "R:"+cell.rotation+"
"
262 | // div.innerHTML += ""+cell.tileid+"
"
263 |
264 | var turl = getTileURL(cell.tileid,cell.x,cell.y);
265 | if(!turl) {
266 | if(cell.type != "LAKE" && POI_SIZES[cell.poiType] == undefined) {
267 | console.log(`Missing tile at ${x},${y*-1} for id ${cell.tileid} ${cell.type}`)
268 | }
269 | if(cell.poiurlfound == true) {
270 | tile.classList.remove(cell.type.toLowerCase())
271 | }
272 | }
273 | if(turl) {
274 | tile.classList.remove(cell.type.toLowerCase())
275 | var img = document.createElement('img');
276 | img.src = turl
277 | img.classList.add('tileimg')
278 | inner.appendChild(img);
279 | if(cell.rotation != 0) {
280 | img.classList.add('rot-' + cell.rotation)
281 | }
282 | } else
283 | if(cell.roads.length > 0) {
284 | var split = cell.roads.split('');
285 | split.forEach((dir) => {
286 | var road = document.createElement('div');
287 | road.classList.add("road-"+dir)
288 | // road.innerHTML = dir;
289 | inner.appendChild(road)
290 | var roadlines = document.createElement('div');
291 | roadlines.classList.add("roadline");
292 | road.appendChild(roadlines);
293 | })
294 | tile.classList.remove("none");
295 | tile.classList.add("meadow")
296 | }
297 | } catch(error) {
298 | // console.log(error)
299 | }
300 | // tile.style.outline = '1px solid black';
301 | return tile;
302 | }
303 | });
304 |
305 | L.gridLayer.debugCoords = function(opts) {
306 | return new L.GridLayer.DebugCoords(opts);
307 | };
308 |
309 | var myGridLayer = L.gridLayer.debugCoords({
310 | noWrap: true,
311 | maxNativeZoom: 1,
312 | minNativeZoom: 1,
313 | tileSize: gridSize,
314 | // opacity: 0.75,
315 | keepBuffer: 1,
316 | // bounds: [[-72,-55],[-71,55]],
317 | className: "gridLayer"
318 | })
319 | map.addLayer( myGridLayer);
320 |
321 | // L.control.layers({"Grid": myGridLayer}, {"Img":tileLayer}).addTo(map);
322 | };
323 |
324 | let init = function(inputjson) {
325 | // create the map
326 | map = L.map("map", {
327 | crs: L.CRS.Simple,
328 | minZoom: minZoom,
329 | maxZoom: maxZoom,
330 | zoomSnap: 0.5,
331 | zoomDelta: 0.5,
332 | wheelPxPerZoomLevel: 120
333 | })
334 | map.attributionControl.addAttribution("sm_overview By The1Killer")
335 |
336 | map.createPane('poiPane').style.zIndex = 300;
337 |
338 | try {
339 | var hash = new L.Hash(map);
340 | if(window.location.hash == null || window.location.hash == "") {
341 | map.setView([-848,-858],1);
342 | }
343 | } catch (error) {
344 | map.setView([-848,-858],1);
345 | }
346 |
347 | if(inputjson) {
348 | loadCells(JSON.parse(inputjson));
349 | } else {
350 | loadFile("./assets/json/cells.json",loadCells);
351 | }
352 |
353 | map.on('click', function(e) {
354 | // console.log(JSON.stringify(e));
355 | // console.log(getTileURL(e.latlng.lat, e.latlng.lng, map.getZoom()));
356 | let xscalar = 2;
357 | let yscalar = 2;
358 | let x = Math.floor(e.latlng.lng * xscalar);
359 | let y = Math.floor(e.latlng.lat * yscalar) + 64;
360 |
361 | console.log("lnglat: ", Math.floor(e.latlng.lng),Math.floor(e.latlng.lat));
362 | console.log("scaled ll: ", x,y);
363 | if(clickmarker) {
364 | clickmarker.remove();
365 | }
366 | clickmarker = L.marker([e.latlng.lat, e.latlng.lng], {icon: markerIcon}).addTo(map);
367 | // clickmarker = L.marker([e.latlng.lat, e.latlng.lng]).addTo(map);
368 | clickmarker.bindPopup(contentForMarker(x,y))
369 | clickmarker.openPopup();
370 | // console.log("layer point:", Math.floor(e.layerPoint.x),Math.floor(e.layerPoint.y));
371 | });
372 | }
373 |
374 | function contentForMarker(x,y) {
375 | let cellX = Math.floor( x / 64)
376 | let cellY = Math.floor( y / 64)
377 | let cell = cells[cellX][cellY];
378 | var ctype = cell.type
379 | if(ctype == "NONE") {
380 | ctype = "NONE (Road/Cliff)"
381 | }
382 | let poi = cell.poiType;
383 | var content = `Coords: ${x},${y}
384 | Cell: ${cellX},${cellY}
385 | Type: ${ctype}
386 | TileID: ${cell.tileid}
387 | Rotation: ${cell.rotation}`
388 | if(poi) {
389 | content += `
POI: ${poi}`
390 | }
391 |
392 | return content;
393 | }
394 |
395 | // // .toRad() fix
396 | // // from: http://stackoverflow.com/q/5260423/1418878
397 | // if (typeof(Number.prototype.toRad) === "undefined") {
398 | // Number.prototype.toRad = function() {
399 | // return this * Math.PI / 180;
400 | // }
401 | // }
402 |
403 | // function getTileURL(lat, lon, zoom) {
404 | // var xtile = parseInt(Math.floor( (lon + 180) / 360 * (1< 8000000) {
549 | // return './assets/img/lake_generic.jpg'
550 | // }
551 | if(x == -37 && y == -39) {
552 | return './assets/img/start_crashsite_-37_-39.jpg';
553 | } else if(x == -37 && y == -39) {
554 | return './assets/img/start_crashsite_-37_-39.jpg';
555 | } else if(x == -37 && y == -40) {
556 | return './assets/img/start_crashsite_-37_-40.jpg';
557 | } else if(x == -36 && y == -40) {
558 | return './assets/img/start_crashsite_-36_-40.jpg';
559 | } else if(x == -36 && y == -41) {
560 | return './assets/img/start_crashsite_-36_-41.jpg';
561 | }
562 | }
563 |
564 | var POI_SIZES = {
565 | // "POI_ROAD":1,
566 | "POI_CRASHSITE_AREA":2,
567 | "POI_BUILDAREA_MEDIUM":2,
568 | "POI_MECHANICSTATION_MEDIUM":2,
569 | "POI_LABYRINTH_MEDIUM":2,
570 | "POI_CHEMLAKE_MEDIUM":2,
571 | "POI_RUIN_MEDIUM":2,
572 | "POI_FOREST_RUIN_MEDIUM":2,
573 | "POI_CAPSULESCRAPYARD_MEDIUM":2,
574 | "POI_PACKINGSTATIONVEG_MEDIUM": 2,
575 | "POI_PACKINGSTATIONFRUIT_MEDIUM": 2,
576 | "POI_LAKE_UNDERWATER_MEDIUM": 2,
577 | "POI_CAMP_LARGE":4,
578 | "POI_CRASHEDSHIP_LARGE":4,
579 | "POI_BURNTFOREST_FARMBOTSCRAPYARD_LARGE":4,
580 | "POI_WAREHOUSE2_LARGE":4,
581 | "POI_WAREHOUSE3_LARGE":4,
582 | "POI_WAREHOUSE4_LARGE":4,
583 | "POI_HIDEOUT_XL":8,
584 | "POI_RUINCITY_XL": 8,
585 | "POI_SILODISTRICT_XL": 8
586 | };
587 |
588 | function getMap(){ return map;}
589 |
590 | function getClickMarker(){ return clickmarker;}
591 |
592 | return {
593 | init,
594 | getMap,
595 | getClickMarker
596 | }
597 | })();
--------------------------------------------------------------------------------
/SurvivalGame.lua:
--------------------------------------------------------------------------------
1 | dofile( "$SURVIVAL_DATA/Scripts/game/survival_shapes.lua" )
2 | dofile( "$SURVIVAL_DATA/Scripts/game/survival_harvestable.lua" )
3 | dofile( "$SURVIVAL_DATA/Scripts/game/survival_constants.lua" )
4 | dofile( "$SURVIVAL_DATA/Scripts/game/managers/ElevatorManager.lua" )
5 | dofile( "$SURVIVAL_DATA/Scripts/game/managers/RespawnManager.lua" )
6 | dofile( "$SURVIVAL_DATA/Scripts/game/managers/BeaconManager.lua" )
7 | dofile( "$SURVIVAL_DATA/Scripts/game/managers/UnitManager.lua" )
8 | dofile( "$SURVIVAL_DATA/Scripts/game/managers/QuestManager.lua" )
9 | dofile( "$SURVIVAL_DATA/Scripts/game/util/Timer.lua" )
10 |
11 | dofile( "$SURVIVAL_DATA/Scripts/game/survival_units.lua" )
12 |
13 | SurvivalGame = class( nil )
14 | SurvivalGame.enableLimitedInventory = true
15 | SurvivalGame.enableRestrictions = true
16 | SurvivalGame.enableFuelConsumption = true
17 | SurvivalGame.enableAmmoConsumption = true
18 | SurvivalGame.enableUpgradeCost = true
19 |
20 | local SyncInterval = 400 -- 400 ticks | 10 seconds
21 |
22 |
23 | function SurvivalGame.server_onCreate( self )
24 | print( "SurvivalGame.server_onCreate" )
25 | self.sv = {}
26 | self.sv.saved = self.storage:load()
27 | print( "Saved:", self.sv.saved )
28 | if self.sv.saved == nil then
29 | self.sv.saved = {}
30 | self.sv.saved.data = self.data
31 | printf( "Seed: %.0f", self.sv.saved.data.seed )
32 | self.sv.saved.overworld = sm.world.createWorld( "$SURVIVAL_DATA/Scripts/game/worlds/Overworld.lua", "Overworld", { dev = self.sv.saved.data.dev }, self.sv.saved.data.seed )
33 | self.storage:save( self.sv.saved )
34 | end
35 | self.data = nil
36 |
37 | print( self.sv.saved.data )
38 | if self.sv.saved.data and self.sv.saved.data.dev then
39 | g_godMode = true
40 | g_survivalDev = true
41 | end
42 |
43 | g_survivalDev = true
44 |
45 | self:loadCraftingRecipes()
46 |
47 | g_elevatorManager = ElevatorManager()
48 | g_elevatorManager:sv_onCreate()
49 |
50 | g_respawnManager = RespawnManager()
51 | g_respawnManager:sv_onCreate( self.sv.saved.overworld )
52 |
53 | g_beaconManager = BeaconManager()
54 | g_beaconManager:sv_onCreate()
55 |
56 | g_unitManager = UnitManager()
57 | g_unitManager:sv_onCreate( self.sv.saved.overworld )
58 |
59 | g_questManager = QuestManager()
60 | g_questManager:sv_onCreate( self )
61 | g_questManager:sv_activateQuest( quest_use_terminal )
62 |
63 | if g_survivalDev then
64 | g_questManager:sv_completeQuest( quest_pickup_logbook )
65 | end
66 |
67 | -- Game script managed global warehouse table
68 | self.warehouses = sm.storage.load( STORAGE_CHANNEL_WAREHOUSES )
69 | if self.warehouses then
70 | print( "Loaded warehouses:" )
71 | print( self.warehouses )
72 | else
73 | self.warehouses = {}
74 | self:sv_e_saveWarehouses()
75 | end
76 | g_warehouses = self.warehouses
77 |
78 |
79 | self.sv.time = sm.storage.load( STORAGE_CHANNEL_TIME )
80 | if self.sv.time then
81 | print( "Loaded timeData:" )
82 | print( self.sv.time )
83 | else
84 | self.sv.time = {}
85 | self.sv.time.timeOfDay = 6 / 24 -- 06:00
86 | self.sv.time.timeProgress = true
87 | sm.storage.save( STORAGE_CHANNEL_TIME, self.sv.time )
88 | end
89 | self:sv_updateClientData()
90 |
91 | self.sv.syncTimer = Timer()
92 | self.sv.syncTimer:start( 0 )
93 | end
94 |
95 | function SurvivalGame.server_onRefresh( self )
96 | g_craftingRecipes = nil
97 | g_refineryRecipes = nil
98 | self:loadCraftingRecipes()
99 | end
100 |
101 | function SurvivalGame.client_onCreate( self )
102 | if true then
103 | sm.game.bindChatCommand( "/ammo", { { "int", "quantity", true } }, "cl_onChatCommand", "Give ammo (default 50)" )
104 | sm.game.bindChatCommand( "/spudgun", {}, "cl_onChatCommand", "Give the spudgun" )
105 | sm.game.bindChatCommand( "/gatling", {}, "cl_onChatCommand", "Give the potato gatling gun" )
106 | sm.game.bindChatCommand( "/shotgun", {}, "cl_onChatCommand", "Give the fries shotgun" )
107 | sm.game.bindChatCommand( "/sunshake", {}, "cl_onChatCommand", "Give 1 sunshake" )
108 | sm.game.bindChatCommand( "/baguette", {}, "cl_onChatCommand", "Give 1 revival baguette" )
109 | sm.game.bindChatCommand( "/keycard", {}, "cl_onChatCommand", "Give 1 keycard" )
110 | sm.game.bindChatCommand( "/powercore", {}, "cl_onChatCommand", "Give 1 powercore" )
111 | sm.game.bindChatCommand( "/components", { { "int", "quantity", true } }, "cl_onChatCommand", "Give components (default 10)" )
112 | sm.game.bindChatCommand( "/glowsticks", { { "int", "quantity", true } }, "cl_onChatCommand", "Give components (default 10)" )
113 | sm.game.bindChatCommand( "/tumble", { { "bool", "enable", true } }, "cl_onChatCommand", "Set tumble state" )
114 | sm.game.bindChatCommand( "/god", {}, "cl_onChatCommand", "Mechanic characters will take no damage" )
115 | sm.game.bindChatCommand( "/respawn", {}, "cl_onChatCommand", "Respawn at last bed (or at the crash site)" )
116 | sm.game.bindChatCommand( "/encrypt", {}, "cl_onChatCommand", "Restrict interactions in all warehouses" )
117 | sm.game.bindChatCommand( "/decrypt", {}, "cl_onChatCommand", "Unrestrict interactions in all warehouses" )
118 | sm.game.bindChatCommand( "/limited", {}, "cl_onChatCommand", "Use the limited inventory" )
119 | sm.game.bindChatCommand( "/unlimited", {}, "cl_onChatCommand", "Use the unlimited inventory" )
120 | sm.game.bindChatCommand( "/ambush", { { "number", "magnitude", true }, { "int", "wave", true } }, "cl_onChatCommand", "Starts a 'random' encounter" )
121 | sm.game.bindChatCommand( "/recreate", {}, "cl_onChatCommand", "Recreate world" )
122 | sm.game.bindChatCommand( "/timeofday", { { "number", "timeOfDay", true } }, "cl_onChatCommand", "Sets the time of the day as a fraction (0.5=mid day)" )
123 | sm.game.bindChatCommand( "/timeprogress", { { "bool", "enabled", true } }, "cl_onChatCommand", "Enables or disables time progress" )
124 | sm.game.bindChatCommand( "/day", {}, "cl_onChatCommand", "Disable time progression and set time to daytime" )
125 | sm.game.bindChatCommand( "/spawn", { { "string", "unitName", true } }, "cl_onChatCommand", "Spawn a unit: 'woc', 'tapebot', 'totebot', 'haybot'" )
126 | sm.game.bindChatCommand( "/harvestable", { { "string", "harvestableName", true } }, "cl_onChatCommand", "Create a harvestable: 'tree', 'stone'" )
127 | sm.game.bindChatCommand( "/cleardebug", {}, "cl_onChatCommand", "Clear debug draw objects" )
128 | sm.game.bindChatCommand( "/export", { { "string", "name", false } }, "cl_onChatCommand", "Exports blueprint $SURVIVAL_DATA/LocalBlueprints/.blueprint" )
129 | sm.game.bindChatCommand( "/import", { { "string", "name", false } }, "cl_onChatCommand", "Imports blueprint $SURVIVAL_DATA/LocalBlueprints/.blueprint" )
130 | sm.game.bindChatCommand( "/starterkit", {}, "cl_onChatCommand", "Spawn a starter kit" )
131 | sm.game.bindChatCommand( "/mechanicstartkit", {}, "cl_onChatCommand", "Spawn a starter kit for starting at mechanic station" )
132 | sm.game.bindChatCommand( "/pipekit", {}, "cl_onChatCommand", "Spawn a pipe kit" )
133 | sm.game.bindChatCommand( "/foodkit", {}, "cl_onChatCommand", "Spawn a food kit" )
134 | sm.game.bindChatCommand( "/seedkit", {}, "cl_onChatCommand", "Spawn a seed kit" )
135 | sm.game.bindChatCommand( "/die", {}, "cl_onChatCommand", "Kill the player" )
136 | sm.game.bindChatCommand( "/sethp", { { "number", "hp", false } }, "cl_onChatCommand", "Set player hp value" )
137 | sm.game.bindChatCommand( "/setwater", { { "number", "water", false } }, "cl_onChatCommand", "Set player water value" )
138 | sm.game.bindChatCommand( "/setfood", { { "number", "food", false } }, "cl_onChatCommand", "Set player food value" )
139 | sm.game.bindChatCommand( "/aggroall", {}, "cl_onChatCommand", "All hostile units will be made aware of the player's position" )
140 | sm.game.bindChatCommand( "/goto", { { "string", "name", false } }, "cl_onChatCommand", "Teleport to predefined position" )
141 | sm.game.bindChatCommand( "/raid", { { "int", "level", false }, { "int", "wave", true }, { "number", "hours", true } }, "cl_onChatCommand", "Start a level raid at player position at wave in hours." )
142 | sm.game.bindChatCommand( "/stopraid", {}, "cl_onChatCommand", "Cancel all incoming raids" )
143 | sm.game.bindChatCommand( "/disableraids", { { "bool", "enabled", false } }, "cl_onChatCommand", "Disable raids if true" )
144 | sm.game.bindChatCommand( "/camera", {}, "cl_onChatCommand", "Spawn a SplineCamera tool" )
145 |
146 | sm.game.bindChatCommand( "/printglobals", {}, "cl_onChatCommand", "Print all global lua variables" )
147 | sm.game.bindChatCommand( "/clearpathnodes", {}, "cl_onChatCommand", "Clear all path nodes in overworld" )
148 | sm.game.bindChatCommand( "/enablepathpotatoes", { { "bool", "enable", true } }, "cl_onChatCommand", "Creates path nodes at potato hits in overworld and links to previous node" )
149 |
150 | sm.game.bindChatCommand( "/activatequest", { { "string", "uuid", true } }, "cl_onChatCommand", "Activate quest" )
151 | sm.game.bindChatCommand( "/completequest", { { "string", "uuid", true } }, "cl_onChatCommand", "Complete quest" )
152 |
153 | --custom
154 | sm.game.bindChatCommand( "/cell", { { "string", "x,y,z", false } }, "cl_onChatCommand", "Teleport to numerical cell position" )
155 | sm.game.bindChatCommand( "/tp", { { "string", "x,y,z", false } }, "cl_onChatCommand", "Teleport to numerical position" )
156 | sm.game.bindChatCommand( "/dir", { }, "cl_onChatCommand", "Tell you direction vector you are looking at." )
157 | end
158 |
159 | self.cl = {}
160 | self.cl.time = {}
161 | self.cl.time.timeOfDay = 0.0
162 | self.cl.time.timeProgress = true
163 |
164 | self:loadCraftingRecipes()
165 |
166 | if g_respawnManager == nil then
167 | assert( not sm.isHost )
168 | g_respawnManager = RespawnManager()
169 | end
170 | g_respawnManager:cl_onCreate()
171 |
172 | if g_beaconManager == nil then
173 | assert( not sm.isHost )
174 | g_beaconManager = BeaconManager()
175 | end
176 | g_beaconManager:cl_onCreate()
177 |
178 | if g_unitManager == nil then
179 | assert( not sm.isHost )
180 | g_unitManager = UnitManager()
181 | end
182 | g_unitManager:cl_onCreate()
183 |
184 | if g_questManager == nil then
185 | assert( not sm.isHost )
186 | g_questManager = QuestManager()
187 | end
188 | g_questManager:cl_onCreate()
189 |
190 | -- Music effect
191 | g_survivalMusic = sm.effect.createEffect( "SurvivalMusic" )
192 | assert(g_survivalMusic)
193 |
194 | -- Survival HUD
195 | g_survivalHud = sm.gui.createSurvivalHudGui()
196 | assert(g_survivalHud)
197 | end
198 |
199 | function SurvivalGame.client_onClientDataUpdate( self, clientData )
200 | self.cl.time = clientData.time
201 | end
202 |
203 | function SurvivalGame.cl_n_questMsg( self, params )
204 | g_questManager:cl_handleMsg( params )
205 | end
206 |
207 | function SurvivalGame.loadCraftingRecipes( self )
208 | -- Preload all crafting recipes
209 | if not g_craftingRecipes then
210 | local recipePaths = {
211 | workbench = "$SURVIVAL_DATA/CraftingRecipes/workbench.json",
212 | dispenser = "$SURVIVAL_DATA/CraftingRecipes/dispenser.json",
213 | cookbot = "$SURVIVAL_DATA/CraftingRecipes/cookbot.json",
214 | craftbot = "$SURVIVAL_DATA/CraftingRecipes/craftbot.json",
215 | dressbot = "$SURVIVAL_DATA/CraftingRecipes/dressbot.json"
216 | }
217 | g_craftingRecipes = {}
218 | for name, path in pairs( recipePaths ) do
219 | local json = sm.json.open( path )
220 | local recipes = {}
221 | local recipesByIndex = {}
222 | for idx, recipe in ipairs( json ) do
223 |
224 | recipe.craftTime = math.ceil( recipe.craftTime * 40 ) -- Seconds to ticks
225 | for _,ingredient in ipairs( recipe.ingredientList ) do
226 | ingredient.itemId = sm.uuid.new( ingredient.itemId ) -- Prepare uuid
227 | end
228 |
229 | recipes[recipe.itemId] = recipe
230 | recipesByIndex[idx] = recipe
231 |
232 | end
233 | -- NOTE(daniel): Wardrobe is using 'recipes' by uuid, crafter is using 'recipesByIndex'
234 | g_craftingRecipes[name] = { path = path, recipes = recipes, recipesByIndex = recipesByIndex }
235 | end
236 | end
237 |
238 | -- Preload refinery recipes
239 | if not g_refineryRecipes then
240 | g_refineryRecipes = sm.json.open( "$SURVIVAL_DATA/CraftingRecipes/refinery.json" )
241 | for _,recipe in pairs( g_refineryRecipes ) do
242 | recipe.itemId = sm.uuid.new( recipe.itemId ) -- Prepare uuid
243 | end
244 | end
245 | end
246 |
247 | function SurvivalGame.server_onFixedUpdate( self, timeStep )
248 | -- Update time
249 | local prevTime = self.sv.time.timeOfDay
250 | if self.sv.time.timeProgress then
251 | self.sv.time.timeOfDay = self.sv.time.timeOfDay + timeStep / DAYCYCLE_TIME
252 | end
253 | local newDay = self.sv.time.timeOfDay >= 1.0
254 | if newDay then
255 | self.sv.time.timeOfDay = math.fmod( self.sv.time.timeOfDay, 1 )
256 | end
257 |
258 | if self.sv.time.timeOfDay >= DAYCYCLE_DAWN and prevTime < DAYCYCLE_DAWN then
259 | g_unitManager:sv_initNewDay()
260 | end
261 |
262 | -- Ambush
263 | --if not g_survivalDev then
264 | -- for _,ambush in ipairs( AMBUSHES ) do
265 | -- if self.sv.time.timeOfDay >= ambush.time and ( prevTime < ambush.time or newDay ) then
266 | -- self:sv_ambush( { magnitude = ambush.magnitude, wave = ambush.wave } )
267 | -- end
268 | -- end
269 | --end
270 |
271 | -- Client and save sync
272 | self.sv.syncTimer:tick()
273 | if self.sv.syncTimer:done() then
274 | self.sv.syncTimer:start( SyncInterval )
275 | sm.storage.save( STORAGE_CHANNEL_TIME, self.sv.time )
276 | self:sv_updateClientData()
277 | end
278 |
279 | g_elevatorManager:sv_onFixedUpdate()
280 | g_unitManager:sv_onFixedUpdate()
281 | g_questManager:sv_onFixedUpdate()
282 | end
283 |
284 | function SurvivalGame.sv_updateClientData( self )
285 | self.network:setClientData( { time = self.sv.time } )
286 | end
287 |
288 | function SurvivalGame.client_onUpdate( self, dt )
289 | -- Update time
290 | if self.cl.time.timeProgress then
291 | self.cl.time.timeOfDay = math.fmod( self.cl.time.timeOfDay + dt / DAYCYCLE_TIME, 1.0 )
292 | end
293 | sm.game.setTimeOfDay( self.cl.time.timeOfDay )
294 |
295 | -- Update lighting values
296 | local index = 1
297 | while index < #DAYCYCLE_LIGHTING_TIMES and self.cl.time.timeOfDay >= DAYCYCLE_LIGHTING_TIMES[index + 1] do
298 | index = index + 1
299 | end
300 | assert( index <= #DAYCYCLE_LIGHTING_TIMES )
301 |
302 | local light = 0.0
303 | if index < #DAYCYCLE_LIGHTING_TIMES then
304 | local p = ( self.cl.time.timeOfDay - DAYCYCLE_LIGHTING_TIMES[index] ) / ( DAYCYCLE_LIGHTING_TIMES[index + 1] - DAYCYCLE_LIGHTING_TIMES[index] )
305 | light = sm.util.lerp( DAYCYCLE_LIGHTING_VALUES[index], DAYCYCLE_LIGHTING_VALUES[index + 1], p )
306 | else
307 | light = DAYCYCLE_LIGHTING_VALUES[index]
308 | end
309 | sm.render.setOutdoorLighting( light )
310 | end
311 |
312 | function SurvivalGame.client_showMessage( self, params )
313 | sm.gui.chatMessage( params )
314 | end
315 |
316 | function SurvivalGame.cl_onChatCommand( self, params )
317 | if params[1] == "/ammo" then
318 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_plantables_potato, quantity = ( params[2] or 50 ) } )
319 | elseif params[1] == "/spudgun" then
320 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = tool_spudgun, quantity = 1 } )
321 | elseif params[1] == "/gatling" then
322 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = tool_gatling, quantity = 1 } )
323 | elseif params[1] == "/shotgun" then
324 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = tool_shotgun, quantity = 1 } )
325 | elseif params[1] == "/sunshake" then
326 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_consumable_sunshake, quantity = 1 } )
327 | elseif params[1] == "/baguette" then
328 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_consumable_longsandwich, quantity = 1 } )
329 | elseif params[1] == "/keycard" then
330 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_survivalobject_keycard, quantity = 1 } )
331 | elseif params[1] == "/camera" then
332 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = sm.uuid.new( "5bbe87d3-d60a-48b5-9ca9-0086c80ebf7f" ), quantity = 1 } )
333 | elseif params[1] == "/powercore" then
334 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_survivalobject_powercore, quantity = 1 } )
335 | elseif params[1] == "/components" then
336 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_consumable_component, quantity = ( params[2] or 10 ) } )
337 | elseif params[1] == "/glowsticks" then
338 | self.network:sendToServer( "sv_giveItem", { player = sm.localPlayer.getPlayer(), item = obj_consumable_glowstick, quantity = ( params[2] or 10 ) } )
339 | elseif params[1] == "/god" then
340 | self.network:sendToServer( "sv_switchGodMode" )
341 | elseif params[1] == "/encrypt" then
342 | self.network:sendToServer( "sv_enableRestrictions", true )
343 | elseif params[1] == "/decrypt" then
344 | self.network:sendToServer( "sv_enableRestrictions", false )
345 | elseif params[1] == "/unlimited" then
346 | self.network:sendToServer( "sv_setLimitedInventory", false )
347 | elseif params[1] == "/limited" then
348 | self.network:sendToServer( "sv_setLimitedInventory", true )
349 | elseif params[1] == "/ambush" then
350 | self.network:sendToServer( "sv_ambush", { magnitude = params[2] or 1, wave = params[3] } )
351 | elseif params[1] == "/recreate" then
352 | self.network:sendToServer( "sv_recreateWorld", sm.localPlayer.getPlayer() )
353 | elseif params[1] == "/timeofday" then
354 | self.network:sendToServer( "sv_setTimeOfDay", params[2] )
355 | elseif params[1] == "/timeprogress" then
356 | self.network:sendToServer( "sv_setTimeProgress", params[2] )
357 | elseif params[1] == "/day" then
358 | self.network:sendToServer( "sv_setTimeOfDay", 0.5 )
359 | self.network:sendToServer( "sv_setTimeProgress", false )
360 | elseif params[1] == "/die" then
361 | self.network:sendToServer( "sv_killPlayer", { player = sm.localPlayer.getPlayer() })
362 | elseif params[1] == "/spawn" then
363 | local rayCastValid, rayCastResult = sm.localPlayer.getRaycast( 100 )
364 | if rayCastValid then
365 | local spawnParams = {
366 | uuid = sm.uuid.new( "00000000-0000-0000-0000-000000000000" ),
367 | world = sm.localPlayer.getPlayer().character:getWorld(),
368 | position = rayCastResult.pointWorld,
369 | yaw = 0.0
370 | }
371 | if params[2] == "woc" then
372 | spawnParams.uuid = unit_woc
373 | elseif params[2] == "tapebot" or params[2] == "tb" then
374 | spawnParams.uuid = unit_tapebot
375 | elseif params[2] == "redtapebot" or params[2] == "rtb" then
376 | spawnParams.uuid = unit_tapebot_red
377 | elseif params[2] == "totebot" or params[2] == "green" or params[2] == "t" then
378 | spawnParams.uuid = unit_totebot_green
379 | elseif params[2] == "haybot" or params[2] == "h" then
380 | spawnParams.uuid = unit_haybot
381 | elseif params[2] == "worm" then
382 | spawnParams.uuid = unit_worm
383 | elseif params[2] == "farmbot" or params[2] == "f" then
384 | spawnParams.uuid = unit_farmbot
385 | elseif params[2] then
386 | spawnParams.uuid = sm.uuid.new( params[2] )
387 | end
388 | self.network:sendToServer( "sv_spawnUnit", spawnParams )
389 | end
390 | elseif params[1] == "/harvestable" then
391 | local character = sm.localPlayer.getPlayer().character
392 | if character then
393 | local harvestableUuid = sm.uuid.new( "00000000-0000-0000-0000-000000000000" )
394 | if params[2] == "tree" then
395 | harvestableUuid = sm.uuid.new( "c4ea19d3-2469-4059-9f13-3ddb4f7e0b79" )
396 | elseif params[2] == "stone" then
397 | harvestableUuid = sm.uuid.new( "0d3362ae-4cb3-42ae-8a08-d3f9ed79e274" )
398 | elseif params[2] == "soil" then
399 | harvestableUuid = hvs_soil
400 | elseif params[2] == "fencelong" then
401 | harvestableUuid = sm.uuid.new( "c0f19413-6d8e-4b20-819a-949553242259" )
402 | elseif params[2] == "fenceshort" then
403 | harvestableUuid = sm.uuid.new( "144b5e79-483e-4da6-86ab-c575d0fdcd11" )
404 | elseif params[2] == "fencecorner" then
405 | harvestableUuid = sm.uuid.new( "ead875db-59d0-45f5-861e-b3075e1f8434" )
406 | elseif params[2] == "beehive" then
407 | harvestableUuid = hvs_farmables_beehive
408 | elseif params[2] == "cotton" then
409 | harvestableUuid = hvs_farmables_cottonplant
410 | elseif params[2] then
411 | harvestableUuid = sm.uuid.new( params[2] )
412 | end
413 | local spawnParams = { world = character:getWorld(), uuid = harvestableUuid, position = character.worldPosition, quat = sm.vec3.getRotation( sm.vec3.new( 0, 1, 0 ), sm.vec3.new( 0, 0, 1 ) ) }
414 | self.network:sendToServer( "sv_spawnHarvestable", spawnParams )
415 | end
416 | elseif params[1] == "/cleardebug" then
417 | sm.debugDraw.clear()
418 | elseif params[1] == "/export" then
419 | local rayCastValid, rayCastResult = sm.localPlayer.getRaycast( 100 )
420 | if rayCastValid and rayCastResult.type == "body" then
421 | local importParams = {
422 | name = params[2],
423 | body = rayCastResult:getBody()
424 | }
425 | self.network:sendToServer( "sv_exportCreation", importParams )
426 | end
427 | elseif params[1] == "/import" then
428 | local rayCastValid, rayCastResult = sm.localPlayer.getRaycast( 100 )
429 | if rayCastValid then
430 | local importParams = {
431 | world = sm.localPlayer.getPlayer().character:getWorld(),
432 | name = params[2],
433 | position = rayCastResult.pointWorld
434 | }
435 | self.network:sendToServer( "sv_importCreation", importParams )
436 | end
437 | else
438 | self.network:sendToServer( "sv_onChatCommand", params )
439 | end
440 | end
441 |
442 | function SurvivalGame.sv_giveItem( self, params )
443 | sm.container.beginTransaction()
444 | sm.container.collect( params.player:getInventory(), params.item, params.quantity, false )
445 | sm.container.endTransaction()
446 | end
447 |
448 | function SurvivalGame.sv_switchGodMode( self )
449 | g_godMode = not g_godMode
450 | self.network:sendToClients( "client_showMessage", "GODMODE: " .. ( g_godMode and "On" or "Off" ) )
451 | end
452 |
453 | function SurvivalGame.sv_enableRestrictions( self, state )
454 | sm.game.enableRestrictions( state )
455 | self.network:sendToClients( "client_showMessage", ( state and "Restricted" or "Unrestricted" ) )
456 | end
457 |
458 | function SurvivalGame.sv_setLimitedInventory( self, state )
459 | sm.game.setLimitedInventory( state )
460 | self.network:sendToClients( "client_showMessage", ( state and "Limited inventory" or "Unlimited inventory" ) )
461 | end
462 |
463 | function SurvivalGame.sv_ambush( self, params )
464 | if sm.exists( self.sv.saved.overworld ) then
465 | sm.event.sendToWorld( self.sv.saved.overworld, "sv_ambush", params )
466 | end
467 | end
468 |
469 | function SurvivalGame.sv_recreateWorld( self, player )
470 | local character = player:getCharacter()
471 | if character:getWorld() == self.sv.saved.overworld then
472 | self.sv.saved.overworld:destroy()
473 | self.sv.saved.overworld = sm.world.createWorld( "$SURVIVAL_DATA/Scripts/game/worlds/Overworld.lua", "Overworld", { dev = g_survivalDev }, self.sv.saved.data.seed )
474 | self.storage:save( self.sv.saved )
475 |
476 | local params = { pos = character:getWorldPosition(), dir = character:getDirection() }
477 | self.sv.saved.overworld:loadCell( math.floor( params.pos.x/64 ), math.floor( params.pos.y/64 ), player, "sv_recreatePlayerCharacter", params )
478 |
479 | self.network:sendToClients( "client_showMessage", "Recreating world" )
480 | else
481 | self.network:sendToClients( "client_showMessage", "Recreate world only allowed for overworld" )
482 | end
483 | end
484 |
485 | function SurvivalGame.sv_setTimeOfDay( self, timeOfDay )
486 | if timeOfDay then
487 | self.sv.time.timeOfDay = timeOfDay
488 | self.sv.syncTimer.count = self.sv.syncTimer.ticks -- Force sync
489 | end
490 | self.network:sendToClients( "client_showMessage", ( "Time of day set to "..self.sv.time.timeOfDay ) )
491 | end
492 |
493 | function SurvivalGame.sv_setTimeProgress( self, timeProgress )
494 | if timeProgress ~= nil then
495 | self.sv.time.timeProgress = timeProgress
496 | self.sv.syncTimer.count = self.sv.syncTimer.ticks -- Force sync
497 | end
498 | self.network:sendToClients( "client_showMessage", ( "Time scale set to "..( self.sv.time.timeProgress and "on" or "off ") ) )
499 | end
500 |
501 | function SurvivalGame.sv_killPlayer( self, params )
502 | params.damage = 9999
503 | sm.event.sendToPlayer( params.player, "sv_e_receiveDamage", params )
504 | end
505 |
506 | function SurvivalGame.sv_spawnUnit( self, params )
507 | sm.event.sendToWorld( params.world, "sv_e_spawnUnit", params )
508 | end
509 |
510 | function SurvivalGame.sv_spawnHarvestable( self, params )
511 | sm.event.sendToWorld( params.world, "sv_spawnHarvestable", params )
512 | end
513 |
514 | function SurvivalGame.sv_exportCreation( self, params )
515 | local obj = sm.json.parseJsonString( sm.creation.exportToString( params.body ) )
516 | sm.json.save( obj, "$SURVIVAL_DATA/LocalBlueprints/"..params.name..".blueprint" )
517 | end
518 |
519 | function SurvivalGame.sv_importCreation( self, params )
520 | sm.creation.importFromFile( params.world, "$SURVIVAL_DATA/LocalBlueprints/"..params.name..".blueprint", params.position )
521 | end
522 |
523 | function SurvivalGame.sv_onChatCommand( self, params, player )
524 | if params[1] == "/tumble" then
525 | if params[2] ~= nil then
526 | player.character:setTumbling( params[2] )
527 | end
528 | if player.character:isTumbling() then
529 | self.network:sendToClients( "client_showMessage", "Player is tumbling" )
530 | else
531 | self.network:sendToClients( "client_showMessage", "Player is not tumbling" )
532 | end
533 |
534 | elseif params[1] == "/sethp" then
535 | sm.event.sendToPlayer( player, "sv_e_debug", { hp = params[2] } )
536 |
537 | elseif params[1] == "/setwater" then
538 | sm.event.sendToPlayer( player, "sv_e_debug", { water = params[2] } )
539 |
540 | elseif params[1] == "/setfood" then
541 | sm.event.sendToPlayer( player, "sv_e_debug", { food = params[2] } )
542 |
543 | elseif params[1] == "/goto" then
544 | local pos
545 | if params[2] == "here" then
546 | pos = player.character:getWorldPosition()
547 | elseif params[2] == "start" then
548 | pos = START_AREA_SPAWN_POINT
549 | elseif params[2] == "hideout" then
550 | pos = sm.vec3.new( 32, -1248, 100 )
551 | else
552 | self.network:sendToClient( player, "client_showMessage", "Unknown place" )
553 | end
554 | if pos then
555 | local cellX, cellY = math.floor( pos.x/64 ), math.floor( pos.y/64 )
556 | self.sv.saved.overworld:loadCell( cellX, cellY, player, "sv_recreatePlayerCharacter", { pos = pos, dir = player.character:getDirection() } )
557 | end
558 |
559 | elseif params[1] == "/respawn" then
560 | sm.event.sendToPlayer( player, "sv_e_respawn" )
561 |
562 | elseif params[1] == "/printglobals" then
563 | print( "Globals:" )
564 | for k,_ in pairs(_G) do
565 | print( k )
566 | end
567 |
568 | elseif params[1] == "/activatequest" then
569 | local uuid = params[2]
570 | if uuid then
571 | g_questManager:sv_activateQuest( uuid )
572 | else
573 | g_questManager:sv_activateAllQuests()
574 | end
575 | elseif params[1] == "/completequest" then
576 | local uuid = params[2]
577 | if uuid then
578 | g_questManager:sv_completeQuest( uuid )
579 | else
580 | g_questManager:sv_completeAllQuests()
581 | end
582 | elseif params[1] == "/cell" then
583 | local pos
584 | if params[2] == "here" then
585 | pos = player.character:getWorldPosition()
586 | local cellX, cellY = math.floor( pos.x/64 ), math.floor( pos.y/64 )
587 | print("x:"..cellX.." y:"..cellY)
588 | self.network:sendToClient( player, "client_showMessage", "x:"..cellX.." y:"..cellY.." z:"..math.floor(pos.z) )
589 | --self.network:sendToClient( player, "client_showMessage", "looking x:"..dir.x.." y:"..dir.y.." z:"..dir.z )
590 | return
591 | else
592 | if params[2] ~= nil then
593 | local cellX,cellY,z = params[2]:match("([^,]+),([^,]+),([^,]+)")
594 | local x = cellX * 64
595 | local y = cellY * 64
596 | x = x + 32
597 | y = y + 32
598 | pos = sm.vec3.new( tonumber(x),tonumber(y),tonumber(z) )
599 | else
600 | self.network:sendToClient( player, "client_showMessage", "Usage: /tp x,y,z or /tp here to see current coords" )
601 | end
602 | end
603 | if pos then
604 | local cellX, cellY = math.floor( pos.x/64 ), math.floor( pos.y/64 )
605 | print("x:"..cellX.." y:"..cellY)
606 | local dir = player.character:getDirection()
607 | dir.x = 0
608 | dir.y = 1
609 | dir.z = -1
610 | self.sv.saved.overworld:loadCell( cellX, cellY, player, "sv_recreatePlayerCharacter", { pos = pos, dir = dir } )
611 |
612 | end
613 | elseif params[1] == "/tp" then
614 | local pos
615 | if params[2] == "here" then
616 | pos = player.character:getWorldPosition()
617 | local dir = player.character:getDirection()
618 | self.network:sendToClient( player, "client_showMessage", "x:"..math.floor(pos.x).." y:"..math.floor(pos.y).." z:"..math.floor(pos.z) )
619 | --self.network:sendToClient( player, "client_showMessage", "looking x:"..dir.x.." y:"..dir.y.." z:"..dir.z )
620 | return
621 | elseif params[2] == "cell" then
622 | pos = player.character:getWorldPosition()
623 | local cellX, cellY = math.floor( pos.x/64 ), math.floor( pos.y/64 )
624 | self.network:sendToClient( player, "client_showMessage", "x:"..cellX.." y:"..cellY )
625 | --self.network:sendToClient( player, "client_showMessage", "looking x:"..dir.x.." y:"..dir.y.." z:"..dir.z )
626 | return
627 | else
628 | if params[2] ~= nil then
629 | local x,y,z = params[2]:match("([^,]+),([^,]+),([^,]+)")
630 | pos = sm.vec3.new( tonumber(x),tonumber(y),tonumber(z) )
631 | else
632 | self.network:sendToClient( player, "client_showMessage", "Usage: /tp x,y,z or /tp here to see current coords" )
633 | end
634 | end
635 | if pos then
636 | local cellX, cellY = math.floor( pos.x/64 ), math.floor( pos.y/64 )
637 | print("x:"..cellX.." y:"..cellY)
638 | local dir = player.character:getDirection()
639 | dir.x = 0
640 | dir.y = 1
641 | dir.z = -1
642 | self.sv.saved.overworld:loadCell( cellX, cellY, player, "sv_recreatePlayerCharacter", { pos = pos, dir = dir } )
643 | end
644 | elseif params[1] == "/clearpathnodes"
645 | or params[1] == "/enablepathpotatoes"
646 | or params[1] == "/starterkit"
647 | or params[1] == "/mechanicstartkit"
648 | or params[1] == "/pipekit"
649 | or params[1] == "/foodkit"
650 | or params[1] == "/seedkit"
651 | or params[1] == "/aggroall"
652 | or params[1] == "/raid"
653 | or params[1] == "/stopraid"
654 | or params[1] == "/disableraids"
655 | then
656 | params.player = player
657 | sm.event.sendToWorld( player.character:getWorld(), "sv_e_onChatCommand", params )
658 | end
659 | end
660 |
661 | function SurvivalGame.server_onPlayerJoined( self, player, newPlayer )
662 | print( player.name, "joined the game" )
663 |
664 | if newPlayer then --Player is first time joiners
665 | local inventory = player:getInventory()
666 |
667 | sm.container.beginTransaction()
668 |
669 | if g_survivalDev then
670 | --Hotbar
671 | sm.container.setItem( inventory, 0, tool_sledgehammer, 1 )
672 | sm.container.setItem( inventory, 1, tool_spudgun, 1 )
673 | sm.container.setItem( inventory, 7, obj_plantables_potato, 50 )
674 | sm.container.setItem( inventory, 8, tool_lift, 1 )
675 | sm.container.setItem( inventory, 9, tool_connect, 1 )
676 |
677 | --Actual inventory
678 | sm.container.setItem( inventory, 10, tool_paint, 1 )
679 | sm.container.setItem( inventory, 11, tool_weld, 1 )
680 | else
681 | sm.container.setItem( inventory, 0, tool_sledgehammer, 1 )
682 | sm.container.setItem( inventory, 1, tool_lift, 1 )
683 | end
684 |
685 | sm.container.endTransaction()
686 |
687 | local spawnPoint = START_AREA_SPAWN_POINT
688 | if g_survivalDev then
689 | spawnPoint = SURVIVAL_DEV_SPAWN_POINT
690 | end
691 | if not sm.exists( self.sv.saved.overworld ) then
692 | sm.world.loadWorld( self.sv.saved.overworld )
693 | end
694 | self.sv.saved.overworld:loadCell( math.floor( spawnPoint.x/64 ), math.floor( spawnPoint.y/64 ), player, "sv_createNewPlayer" )
695 | else
696 | local inventory = player:getInventory()
697 |
698 | local sledgehammerCount = sm.container.totalQuantity( inventory, tool_sledgehammer )
699 | if sledgehammerCount == 0 then
700 | sm.container.beginTransaction()
701 | sm.container.collect( inventory, tool_sledgehammer, 1 )
702 | sm.container.endTransaction()
703 | elseif sledgehammerCount > 1 then
704 | sm.container.beginTransaction()
705 | sm.container.spend( inventory, tool_sledgehammer, sledgehammerCount - 1 )
706 | sm.container.endTransaction()
707 | end
708 |
709 | local liftCount = sm.container.totalQuantity( inventory, tool_lift )
710 | if liftCount == 0 then
711 | sm.container.beginTransaction()
712 | sm.container.collect( inventory, tool_lift, 1 )
713 | sm.container.endTransaction()
714 | elseif liftCount > 1 then
715 | sm.container.beginTransaction()
716 | sm.container.spend( inventory, tool_lift, liftCount - 1 )
717 | sm.container.endTransaction()
718 | end
719 | end
720 | g_unitManager:sv_onPlayerJoined( player )
721 | g_questManager:sv_onPlayerJoined( player )
722 | end
723 |
724 | function SurvivalGame.server_onPlayerLeft( self, player )
725 | print( player.name, "left the game" )
726 | g_elevatorManager:sv_onPlayerLeft( player )
727 | end
728 |
729 | function SurvivalGame.sv_e_saveWarehouses( self )
730 | sm.storage.save( STORAGE_CHANNEL_WAREHOUSES, self.warehouses )
731 | print( "Saved warehouses:" )
732 | print( self.warehouses )
733 | end
734 |
735 | function SurvivalGame.sv_e_requestWarehouseRestrictions( self, params )
736 | -- Send the warehouse restrictions to the world that asked
737 | print("SurvivalGame.sv_e_requestWarehouseRestrictions")
738 |
739 | -- Warehouse get
740 | local warehouse = nil
741 | if params.warehouseIndex then
742 | warehouse = self.warehouses[params.warehouseIndex]
743 | end
744 | if warehouse then
745 | sm.event.sendToWorld( params.world, "server_updateRestrictions", warehouse.restrictions )
746 | end
747 | end
748 |
749 | function SurvivalGame.sv_e_setWarehouseRestrictions( self, params )
750 | -- Set the restrictions for this warehouse and propagate the restrictions to all floors
751 |
752 | -- Warehouse get
753 | local warehouse = nil
754 | if params.warehouseIndex then
755 | warehouse = self.warehouses[params.warehouseIndex]
756 | end
757 |
758 | if warehouse then
759 | for _, newRestrictionSetting in pairs( params.restrictions ) do
760 | if warehouse.restrictions[newRestrictionSetting.name] then
761 | warehouse.restrictions[newRestrictionSetting.name].state = newRestrictionSetting.state
762 | else
763 | warehouse.restrictions[newRestrictionSetting.name] = newRestrictionSetting
764 | end
765 | end
766 | self.warehouses[params.warehouseIndex] = warehouse
767 | self:sv_e_saveWarehouses()
768 |
769 | for i, world in ipairs( warehouse.worlds ) do
770 | if sm.exists( world ) then
771 | sm.event.sendToWorld( world, "server_updateRestrictions", warehouse.restrictions )
772 | end
773 | end
774 | end
775 | end
776 |
777 | function SurvivalGame.sv_e_createElevatorDestination( self, params )
778 | print( "SurvivalGame.sv_e_createElevatorDestination" )
779 | print( params )
780 |
781 | -- Warehouse get or create
782 | local warehouse
783 | if params.warehouseIndex then
784 | warehouse = self.warehouses[params.warehouseIndex]
785 | else
786 | assert( params.name == "ELEVATOR_ENTRANCE" )
787 | warehouse = {}
788 | warehouse.world = params.portal:getWorldA()
789 | warehouse.worlds = {}
790 | warehouse.exits = params.exits
791 | warehouse.maxLevels = params.maxLevels
792 | warehouse.index = #self.warehouses + 1
793 | warehouse.restrictions = { erasable = { name = "erasable", state = false }, connectable = { name = "connectable", state = false } }
794 | self.warehouses[#self.warehouses + 1] = warehouse
795 | self:sv_e_saveWarehouses()
796 | end
797 |
798 |
799 | -- Level up
800 | local level
801 | if params.level then
802 | if params.name == "ELEVATOR_UP" then
803 | level = params.level + 1
804 | elseif params.name == "ELEVATOR_DOWN" then
805 | level = params.level - 1
806 | elseif params.name == "ELEVATOR_EXIT" then
807 | if #warehouse.exits > 0 then
808 | for _,cell in ipairs( warehouse.exits ) do
809 | if not sm.exists( warehouse.world ) then
810 | sm.world.loadWorld( warehouse.world )
811 | end
812 | local name = params.name.." "..cell.x..","..cell.y
813 | sm.portal.addWorldPortalHook( warehouse.world, name, params.portal )
814 | print( "Added portal hook '"..name.."' in world "..warehouse.world.id )
815 |
816 | g_elevatorManager:sv_loadBForPlayersInElevator( params.portal, warehouse.world, cell.x, cell.y )
817 | end
818 | else
819 | sm.log.error( "No exit hint found, this elevator is going nowhere!" )
820 | end
821 | return
822 | else
823 | assert( false )
824 | end
825 | else
826 | if params.name == "ELEVATOR_EXIT" then
827 | level = warehouse.maxLevels
828 | elseif params.name == "ELEVATOR_ENTRANCE" then
829 | level = 1
830 | else
831 | end
832 | end
833 |
834 | -- Create warehouse world
835 | local worldData = {}
836 | worldData.level = level
837 | worldData.warehouseIndex = warehouse.index
838 | worldData.maxLevels = warehouse.maxLevels
839 | local world = sm.world.createWorld( "$SURVIVAL_DATA/Scripts/game/worlds/WarehouseWorld.lua", "WarehouseWorld", worldData )
840 | print( "Created WarehouseWorld "..world.id )
841 |
842 | -- Use the same restrictions for the new floor as the other floors
843 | warehouse.worlds[#warehouse.worlds+1] = world
844 | if warehouse.restrictions then
845 | sm.event.sendToWorld( world, "server_updateRestrictions", warehouse.restrictions )
846 | end
847 | -- Elevator portal hook
848 | local name
849 | if params.name == "ELEVATOR_UP" then
850 | name = "ELEVATOR_DOWN"
851 | elseif params.name == "ELEVATOR_DOWN" then
852 | name = "ELEVATOR_UP"
853 | else
854 | name = params.name
855 | end
856 | sm.portal.addWorldPortalHook( world, name, params.portal )
857 | print( "Added portal hook '"..name.."' in world "..world.id )
858 |
859 | g_elevatorManager:sv_loadBForPlayersInElevator( params.portal, world, 0, 0 )
860 | end
861 |
862 | function SurvivalGame.sv_e_elevatorEvent( self, params )
863 | print( "SurvivalGame.sv_e_elevatorEvent" )
864 | print( params )
865 | g_elevatorManager[params.fn]( g_elevatorManager, params )
866 | end
867 |
868 | function SurvivalGame.sv_createNewPlayer( self, world, x, y, player )
869 | local params = { player = player, x = x, y = y }
870 | sm.event.sendToWorld( self.sv.saved.overworld, "sv_spawnNewCharacter", params )
871 | end
872 |
873 | function SurvivalGame.sv_recreatePlayerCharacter( self, world, x, y, player, params )
874 | local yaw = math.atan2( params.dir.y, params.dir.x ) - math.pi/2
875 | local pitch = math.asin( params.dir.z )
876 | local newCharacter = sm.character.createCharacter( player, self.sv.saved.overworld, params.pos, yaw, pitch )
877 | player:setCharacter( newCharacter )
878 | print( "Recreate character in new world" )
879 | print( params )
880 | end
881 |
882 | function SurvivalGame.sv_e_respawn( self, params )
883 | if params.player.character and sm.exists( params.player.character ) then
884 | g_respawnManager:sv_requestRespawnCharacter( params.player )
885 | else
886 | local spawnPoint = START_AREA_SPAWN_POINT
887 | if g_survivalDev then
888 | spawnPoint = SURVIVAL_DEV_SPAWN_POINT
889 | end
890 | if not sm.exists( self.saved.overworld ) then
891 | sm.world.loadWorld( self.saved.overworld )
892 | end
893 | self.saved.overworld:loadCell( math.floor( spawnPoint.x/64 ), math.floor( spawnPoint.y/64 ), params.player, "sv_createNewPlayer" )
894 | end
895 | end
896 |
897 | function SurvivalGame.sv_loadedRespawnCell( self, world, x, y, player )
898 | g_respawnManager:sv_respawnCharacter( player, world )
899 | end
900 |
901 | function SurvivalGame.sv_e_onSpawnPlayerCharacter( self, player )
902 | if player.character and sm.exists( player.character ) then
903 | g_respawnManager:sv_onSpawnCharacter( player )
904 | g_beaconManager:sv_onSpawnCharacter( player )
905 | else
906 | sm.log.warning("SurvivalGame.sv_e_onSpawnPlayerCharacter for a character that doesn't exist")
907 | end
908 | end
909 |
910 | function SurvivalGame.sv_e_markBag( self, params )
911 | if sm.exists( params.world ) then
912 | sm.event.sendToWorld( params.world, "sv_e_markBag", params )
913 | else
914 | sm.log.warning("SurvivalGame.sv_e_markBag in a world that doesn't exist")
915 | end
916 | end
917 |
918 | function SurvivalGame.sv_e_unmarkBag( self, params )
919 | if sm.exists( params.world ) then
920 | sm.event.sendToWorld( params.world, "sv_e_unmarkBag", params )
921 | else
922 | sm.log.warning("SurvivalGame.sv_e_unmarkBag in a world that doesn't exist")
923 | end
924 | end
925 |
926 | -- Beacons
927 | function SurvivalGame.sv_e_createBeacon( self, params )
928 | if sm.exists( params.beacon.world ) then
929 | sm.event.sendToWorld( params.beacon.world, "sv_e_createBeacon", params )
930 | else
931 | sm.log.warning( "SurvivalGame.sv_e_createBeacon in a world that doesn't exist" )
932 | end
933 | end
934 |
935 | function SurvivalGame.sv_e_destroyBeacon( self, params )
936 | if sm.exists( params.beacon.world ) then
937 | sm.event.sendToWorld( params.beacon.world, "sv_e_destroyBeacon", params )
938 | else
939 | sm.log.warning( "SurvivalGame.sv_e_destroyBeacon in a world that doesn't exist" )
940 | end
941 | end
942 |
943 | function SurvivalGame.sv_e_unloadBeacon( self, params )
944 | if sm.exists( params.beacon.world ) then
945 | sm.event.sendToWorld( params.beacon.world, "sv_e_unloadBeacon", params )
946 | else
947 | sm.log.warning( "SurvivalGame.sv_e_unloadBeacon in a world that doesn't exist" )
948 | end
949 | end
--------------------------------------------------------------------------------