maps4fs 1.0.1__tar.gz → 1.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maps4fs might be problematic. Click here for more details.

Files changed (29) hide show
  1. {maps4fs-1.0.1 → maps4fs-1.0.4}/PKG-INFO +22 -4
  2. {maps4fs-1.0.1 → maps4fs-1.0.4}/README.md +21 -3
  3. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/background.py +3 -4
  4. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/config.py +1 -1
  5. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/dem.py +12 -8
  6. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/grle.py +1 -2
  7. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/i3d.py +3 -5
  8. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/map.py +3 -3
  9. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/texture.py +4 -4
  10. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs.egg-info/PKG-INFO +22 -4
  11. {maps4fs-1.0.1 → maps4fs-1.0.4}/pyproject.toml +1 -1
  12. {maps4fs-1.0.1 → maps4fs-1.0.4}/LICENSE.md +0 -0
  13. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/__init__.py +0 -0
  14. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/__init__.py +0 -0
  15. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/component.py +0 -0
  16. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/game.py +0 -0
  17. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/path_steps.py +0 -0
  18. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/qgis.py +0 -0
  19. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/generator/tile.py +0 -0
  20. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/logger.py +0 -0
  21. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/toolbox/__init__.py +0 -0
  22. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/toolbox/background.py +0 -0
  23. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs/toolbox/dem.py +0 -0
  24. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs.egg-info/SOURCES.txt +0 -0
  25. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs.egg-info/dependency_links.txt +0 -0
  26. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs.egg-info/requires.txt +0 -0
  27. {maps4fs-1.0.1 → maps4fs-1.0.4}/maps4fs.egg-info/top_level.txt +0 -0
  28. {maps4fs-1.0.1 → maps4fs-1.0.4}/setup.cfg +0 -0
  29. {maps4fs-1.0.1 → maps4fs-1.0.4}/tests/test_generator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maps4fs
3
- Version: 1.0.1
3
+ Version: 1.0.4
4
4
  Summary: Generate map templates for Farming Simulator from real places.
5
5
  Author-email: iwatkot <iwatkot@gmail.com>
6
6
  License: MIT License
@@ -89,6 +89,13 @@ Requires-Dist: pympler
89
89
  There are several ways to use the tool. You obviously need the **first one**, but you can choose any of the others depending on your needs.<br>
90
90
  ### 🚜 For most users
91
91
  **Option 1:** open the [maps4fs](https://maps4fs.streamlit.app) on StreamLit and generate a map template in a few clicks.<br>
92
+ <i>Note, that StreamLit community hosting has some limitations, such as: <br>
93
+ 1. Maximum map size is 4096x4096 meters. <br>
94
+ 2. Advanced settings are disabled. <br>
95
+ 3. Texure dissolving is disabled (they will look worse). </i><br>
96
+
97
+ If you run the application locally, you won't have any of these limitations and will be able to generate maps of any size with any settings you want and nice looking textures.<br>
98
+ So, jump to [Docker version](#option-2-docker-version) to launch the tool with one command and get the full experience.<br>
92
99
 
93
100
  ![Basic WebUI](https://github.com/user-attachments/assets/52f499cc-f28a-4da3-abef-0e818abe8dbe)
94
101
 
@@ -141,14 +148,22 @@ You'll find detailed instructions on how to run the project below. But if you pr
141
148
  <i>Video tutorial: How to generate a Farming Simulator 22 map from real-world data.</i>
142
149
 
143
150
  ### Option 1: StreamLit
144
- 🟢 Recommended for all users, you don't need to install anything.<br>
151
+ 🟢 Recommended for all users.
152
+ 🛠️ Don't need to install anything.
153
+ 🗺️ Supported map sizes: 2x2, 4x4 km.
154
+ ⚙️ Advanced settings: disabled.
155
+ 🖼️ Texture dissolving: disabled.
145
156
  Using the [StreamLit](https://maps4fs.streamlit.app) version of the tool is the easiest way to generate a map template. Just open the link and follow the instructions.
146
157
  Note: due to CPU and RAM limitations of the hosting, the generation may take some time. If you need faster processing, use the [Docker version](#option-2-docker-version).<br>
147
158
 
148
159
  Using it is easy and doesn't require any guides. Enjoy!
149
160
 
150
161
  ### Option 2: Docker version
151
- 🟠 Recommended for users who want faster processing, very simple installation.<br>
162
+ 🟠 Recommended for users who want bigger maps, fast generation, nice looking textures and advanced settings.
163
+ 🛠️ Launch with one single command.
164
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
165
+ ⚙️ Advanced settings: enabled.
166
+ 🖼️ Texture dissolving: enabled.
152
167
  You can launch the project with minimalistic UI in your browser using Docker. Follow these steps:
153
168
 
154
169
  1. Install [Docker](https://docs.docker.com/get-docker/) for your OS.
@@ -161,7 +176,10 @@ docker run -d -p 8501:8501 iwatkot/maps4fs
161
176
  5. When the map is generated click on the `Download` button to get the map.
162
177
 
163
178
  ### Option 3: Python package
164
- 🔴 Recommended for developers.<br>
179
+ 🔴 Recommended for developers.
180
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
181
+ ⚙️ Advanced settings: enabled.
182
+ 🖼️ Texture dissolving: enabled.
165
183
  You can use the Python package to generate maps. Follow these steps:
166
184
 
167
185
  1. Install the package from PyPI:
@@ -64,6 +64,13 @@
64
64
  There are several ways to use the tool. You obviously need the **first one**, but you can choose any of the others depending on your needs.<br>
65
65
  ### 🚜 For most users
66
66
  **Option 1:** open the [maps4fs](https://maps4fs.streamlit.app) on StreamLit and generate a map template in a few clicks.<br>
67
+ <i>Note, that StreamLit community hosting has some limitations, such as: <br>
68
+ 1. Maximum map size is 4096x4096 meters. <br>
69
+ 2. Advanced settings are disabled. <br>
70
+ 3. Texure dissolving is disabled (they will look worse). </i><br>
71
+
72
+ If you run the application locally, you won't have any of these limitations and will be able to generate maps of any size with any settings you want and nice looking textures.<br>
73
+ So, jump to [Docker version](#option-2-docker-version) to launch the tool with one command and get the full experience.<br>
67
74
 
68
75
  ![Basic WebUI](https://github.com/user-attachments/assets/52f499cc-f28a-4da3-abef-0e818abe8dbe)
69
76
 
@@ -116,14 +123,22 @@ You'll find detailed instructions on how to run the project below. But if you pr
116
123
  <i>Video tutorial: How to generate a Farming Simulator 22 map from real-world data.</i>
117
124
 
118
125
  ### Option 1: StreamLit
119
- 🟢 Recommended for all users, you don't need to install anything.<br>
126
+ 🟢 Recommended for all users.
127
+ 🛠️ Don't need to install anything.
128
+ 🗺️ Supported map sizes: 2x2, 4x4 km.
129
+ ⚙️ Advanced settings: disabled.
130
+ 🖼️ Texture dissolving: disabled.
120
131
  Using the [StreamLit](https://maps4fs.streamlit.app) version of the tool is the easiest way to generate a map template. Just open the link and follow the instructions.
121
132
  Note: due to CPU and RAM limitations of the hosting, the generation may take some time. If you need faster processing, use the [Docker version](#option-2-docker-version).<br>
122
133
 
123
134
  Using it is easy and doesn't require any guides. Enjoy!
124
135
 
125
136
  ### Option 2: Docker version
126
- 🟠 Recommended for users who want faster processing, very simple installation.<br>
137
+ 🟠 Recommended for users who want bigger maps, fast generation, nice looking textures and advanced settings.
138
+ 🛠️ Launch with one single command.
139
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
140
+ ⚙️ Advanced settings: enabled.
141
+ 🖼️ Texture dissolving: enabled.
127
142
  You can launch the project with minimalistic UI in your browser using Docker. Follow these steps:
128
143
 
129
144
  1. Install [Docker](https://docs.docker.com/get-docker/) for your OS.
@@ -136,7 +151,10 @@ docker run -d -p 8501:8501 iwatkot/maps4fs
136
151
  5. When the map is generated click on the `Download` button to get the map.
137
152
 
138
153
  ### Option 3: Python package
139
- 🔴 Recommended for developers.<br>
154
+ 🔴 Recommended for developers.
155
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
156
+ ⚙️ Advanced settings: enabled.
157
+ 🖼️ Texture dissolving: enabled.
140
158
  You can use the Python package to generate maps. Follow these steps:
141
159
 
142
160
  1. Install the package from PyPI:
@@ -143,7 +143,7 @@ class Background(Component):
143
143
  self.logger.warning("DEM file not found, generation will be stopped: %s", dem_path)
144
144
  return
145
145
 
146
- self.logger.info("DEM file for tile %s found: %s", tile.code, dem_path)
146
+ self.logger.debug("DEM file for tile %s found: %s", tile.code, dem_path)
147
147
 
148
148
  base_directory = os.path.dirname(dem_path)
149
149
  save_path = os.path.join(base_directory, f"{tile.code}.obj")
@@ -164,7 +164,6 @@ class Background(Component):
164
164
  if tile_code == PATH_FULL_NAME:
165
165
  resize_factor = FULL_RESIZE_FACTOR
166
166
  simplify_factor = FULL_SIMPLIFY_FACTOR
167
- self.logger.info("Generating a full map obj file")
168
167
  else:
169
168
  resize_factor = RESIZE_FACTOR
170
169
  simplify_factor = SIMPLIFY_FACTOR
@@ -214,7 +213,7 @@ class Background(Component):
214
213
  mesh.apply_transform(rotation_matrix_y)
215
214
  mesh.apply_transform(rotation_matrix_z)
216
215
 
217
- self.logger.info("Mesh generated with %s faces, will be simplified", len(mesh.faces))
216
+ self.logger.debug("Mesh generated with %s faces, will be simplified", len(mesh.faces))
218
217
 
219
218
  # Simplify the mesh to reduce the number of faces.
220
219
  mesh = mesh.simplify_quadric_decimation(face_count=len(faces) // simplify_factor)
@@ -224,7 +223,7 @@ class Background(Component):
224
223
  self.mesh_to_stl(mesh)
225
224
 
226
225
  mesh.export(save_path)
227
- self.logger.info("Obj file saved: %s", save_path)
226
+ self.logger.debug("Obj file saved: %s", save_path)
228
227
 
229
228
  def mesh_to_stl(self, mesh: trimesh.Trimesh) -> None:
230
229
  """Converts the mesh to an STL file and saves it in the previews directory.
@@ -36,7 +36,7 @@ class Config(Component):
36
36
  self.logger.warning("Map XML file not found: %s.", self._map_xml_path)
37
37
  return
38
38
  tree = ET.parse(self._map_xml_path)
39
- self.logger.debug("Map XML file loaded from: %s.", self._map_xml_path)
39
+ self.logger.info("Map XML file loaded from: %s.", self._map_xml_path)
40
40
  root = tree.getroot()
41
41
  for map_elem in root.iter("map"):
42
42
  map_elem.set("width", str(self.map_width))
@@ -103,7 +103,7 @@ class DEM(Component):
103
103
  north, south, east, west = self.bbox
104
104
 
105
105
  dem_output_resolution = self.get_output_resolution()
106
- self.logger.debug("DEM output resolution: %s.", dem_output_resolution)
106
+ self.logger.info("DEM output resolution: %s.", dem_output_resolution)
107
107
 
108
108
  tile_path = self._srtm_tile()
109
109
  if not tile_path:
@@ -223,7 +223,7 @@ class DEM(Component):
223
223
  )
224
224
 
225
225
  cv2.imwrite(self._dem_path, resampled_data)
226
- self.logger.debug("DEM data was saved to %s.", self._dem_path)
226
+ self.logger.info("DEM data was saved to %s.", self._dem_path)
227
227
 
228
228
  if self.game.additional_dem_name is not None:
229
229
  self.make_copy(self.game.additional_dem_name)
@@ -239,7 +239,7 @@ class DEM(Component):
239
239
  additional_dem_path = os.path.join(dem_directory, dem_name)
240
240
 
241
241
  shutil.copyfile(self._dem_path, additional_dem_path)
242
- self.logger.debug("Additional DEM data was copied to %s.", additional_dem_path)
242
+ self.logger.info("Additional DEM data was copied to %s.", additional_dem_path)
243
243
 
244
244
  def _tile_info(self, lat: float, lon: float) -> tuple[str, str]:
245
245
  """Returns latitude band and tile name for SRTM tile from coordinates.
@@ -260,7 +260,7 @@ class DEM(Component):
260
260
  else:
261
261
  tile_name = f"{latitude_band}E{abs(tile_longitude):03d}"
262
262
 
263
- self.logger.debug(
263
+ self.logger.info(
264
264
  "Detected tile name: %s for coordinates: lat %s, lon %s.", tile_name, lat, lon
265
265
  )
266
266
  return latitude_band, tile_name
@@ -421,14 +421,18 @@ class DEM(Component):
421
421
 
422
422
  scaling_factor = self._get_scaling_factor(max_dev)
423
423
  adjusted_max_height = int(65535 * scaling_factor)
424
- self.logger.debug(
425
- f"Maximum deviation: {max_dev}. Scaling factor: {scaling_factor}. "
426
- f"Adjusted max height: {adjusted_max_height}."
424
+ self.logger.info(
425
+ "Maximum deviation: %s. Scaling factor: %s. Adjusted max height: %s.",
426
+ max_dev,
427
+ scaling_factor,
428
+ adjusted_max_height,
427
429
  )
428
430
  normalized_data = (
429
431
  (data - data.min()) / (data.max() - data.min()) * adjusted_max_height
430
432
  ).astype("uint16")
431
433
  self.logger.debug(
432
- f"DEM data was normalized to {normalized_data.min()} - {normalized_data.max()}."
434
+ "DEM data was normalized to %s - %s.",
435
+ normalized_data.min(),
436
+ normalized_data.max(),
433
437
  )
434
438
  return normalized_data
@@ -59,9 +59,8 @@ class GRLE(Component):
59
59
 
60
60
  # Create the InfoLayer PNG file with zeros.
61
61
  info_layer_data = np.zeros((height, width), dtype=data_type)
62
- print(info_layer_data.shape)
63
62
  cv2.imwrite(file_path, info_layer_data) # pylint: disable=no-member
64
- self.logger.info("InfoLayer PNG file %s created.", file_path)
63
+ self.logger.debug("InfoLayer PNG file %s created.", file_path)
65
64
  else:
66
65
  self.logger.warning("Invalid InfoLayer schema: %s.", info_layer)
67
66
 
@@ -89,7 +89,7 @@ class I3d(Component):
89
89
  self.logger.debug("TerrainTransformGroup element updated in I3D file.")
90
90
 
91
91
  tree.write(self._map_i3d_path) # type: ignore
92
- self.logger.debug("Map I3D file saved to: %s.", self._map_i3d_path)
92
+ self.logger.info("Map I3D file saved to: %s.", self._map_i3d_path)
93
93
 
94
94
  def previews(self) -> list[str]:
95
95
  """Returns a list of paths to the preview images (empty list).
@@ -120,13 +120,11 @@ class I3d(Component):
120
120
  self.logger.warning("Fields data not found in textures info layer.")
121
121
  return
122
122
 
123
- self.logger.debug("Found %s fields in textures info layer.", len(fields))
123
+ self.logger.info("Found %s fields in textures info layer.", len(fields))
124
124
 
125
125
  root = tree.getroot()
126
126
  gameplay_node = root.find(".//TransformGroup[@name='gameplay']")
127
127
  if gameplay_node is not None:
128
- self.logger.debug("Found the gameplay node.")
129
-
130
128
  fields_node = gameplay_node.find(".//TransformGroup[@name='fields']")
131
129
  user_attributes_node = root.find(".//UserAttributes")
132
130
 
@@ -194,7 +192,7 @@ class I3d(Component):
194
192
  node_id += 1
195
193
 
196
194
  tree.write(self._map_i3d_path) # type: ignore
197
- self.logger.debug("Map I3D file saved to: %s.", self._map_i3d_path)
195
+ self.logger.info("Map I3D file saved to: %s.", self._map_i3d_path)
198
196
 
199
197
  def get_name_indicator_node(self, node_id: int, field_id: int) -> tuple[ET.Element, int]:
200
198
  """Creates a name indicator node with given node ID and field ID.
@@ -44,17 +44,17 @@ class Map:
44
44
  if not logger:
45
45
  logger = Logger(to_stdout=True, to_file=False)
46
46
  self.logger = logger
47
- self.logger.debug("Game was set to %s", game.code)
47
+ self.logger.info("Game was set to %s", game.code)
48
48
 
49
49
  self.kwargs = kwargs
50
- self.logger.debug("Additional arguments: %s", kwargs)
50
+ self.logger.info("Additional arguments: %s", kwargs)
51
51
 
52
52
  os.makedirs(self.map_directory, exist_ok=True)
53
53
  self.logger.debug("Map directory created: %s", self.map_directory)
54
54
 
55
55
  try:
56
56
  shutil.unpack_archive(game.template_path, self.map_directory)
57
- self.logger.info("Map template unpacked to %s", self.map_directory)
57
+ self.logger.debug("Map template unpacked to %s", self.map_directory)
58
58
  except Exception as e:
59
59
  raise RuntimeError(f"Can not unpack map template due to error: {e}") from e
60
60
 
@@ -239,7 +239,7 @@ class Texture(Component):
239
239
 
240
240
  for layer in self.layers:
241
241
  self._generate_weights(layer)
242
- self.logger.debug("Prepared weights for %s layers.", len(self.layers))
242
+ self.logger.info("Prepared weights for %s layers.", len(self.layers))
243
243
 
244
244
  def _generate_weights(self, layer: Layer) -> None:
245
245
  """Generates weight files for textures. Each file is a numpy array of zeros and
@@ -339,7 +339,7 @@ class Texture(Component):
339
339
  cumulative_image = cv2.bitwise_or(cumulative_image, output_image)
340
340
 
341
341
  cv2.imwrite(layer_path, output_image)
342
- self.logger.debug("Texture %s saved.", layer_path)
342
+ self.logger.info("Texture %s saved.", layer_path)
343
343
 
344
344
  # Save info layer data.
345
345
  with open(self.info_layer_path, "w", encoding="utf-8") as f:
@@ -351,7 +351,7 @@ class Texture(Component):
351
351
  if not self.light_version:
352
352
  self.dissolve()
353
353
  else:
354
- self.logger.info("Skipping dissolve in light version of the map.")
354
+ self.logger.debug("Skipping dissolve in light version of the map.")
355
355
 
356
356
  def dissolve(self) -> None:
357
357
  """Dissolves textures of the layers with tags into sublayers for them to look more
@@ -423,7 +423,7 @@ class Texture(Component):
423
423
  self.logger.debug("Drawing base layer %s.", layer_path)
424
424
  img = cv2.bitwise_not(cumulative_image)
425
425
  cv2.imwrite(layer_path, img)
426
- self.logger.debug("Base texture %s saved.", layer_path)
426
+ self.logger.info("Base texture %s saved.", layer_path)
427
427
 
428
428
  def get_relative_x(self, x: float) -> int:
429
429
  """Converts UTM X coordinate to relative X coordinate in map image.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maps4fs
3
- Version: 1.0.1
3
+ Version: 1.0.4
4
4
  Summary: Generate map templates for Farming Simulator from real places.
5
5
  Author-email: iwatkot <iwatkot@gmail.com>
6
6
  License: MIT License
@@ -89,6 +89,13 @@ Requires-Dist: pympler
89
89
  There are several ways to use the tool. You obviously need the **first one**, but you can choose any of the others depending on your needs.<br>
90
90
  ### 🚜 For most users
91
91
  **Option 1:** open the [maps4fs](https://maps4fs.streamlit.app) on StreamLit and generate a map template in a few clicks.<br>
92
+ <i>Note, that StreamLit community hosting has some limitations, such as: <br>
93
+ 1. Maximum map size is 4096x4096 meters. <br>
94
+ 2. Advanced settings are disabled. <br>
95
+ 3. Texure dissolving is disabled (they will look worse). </i><br>
96
+
97
+ If you run the application locally, you won't have any of these limitations and will be able to generate maps of any size with any settings you want and nice looking textures.<br>
98
+ So, jump to [Docker version](#option-2-docker-version) to launch the tool with one command and get the full experience.<br>
92
99
 
93
100
  ![Basic WebUI](https://github.com/user-attachments/assets/52f499cc-f28a-4da3-abef-0e818abe8dbe)
94
101
 
@@ -141,14 +148,22 @@ You'll find detailed instructions on how to run the project below. But if you pr
141
148
  <i>Video tutorial: How to generate a Farming Simulator 22 map from real-world data.</i>
142
149
 
143
150
  ### Option 1: StreamLit
144
- 🟢 Recommended for all users, you don't need to install anything.<br>
151
+ 🟢 Recommended for all users.
152
+ 🛠️ Don't need to install anything.
153
+ 🗺️ Supported map sizes: 2x2, 4x4 km.
154
+ ⚙️ Advanced settings: disabled.
155
+ 🖼️ Texture dissolving: disabled.
145
156
  Using the [StreamLit](https://maps4fs.streamlit.app) version of the tool is the easiest way to generate a map template. Just open the link and follow the instructions.
146
157
  Note: due to CPU and RAM limitations of the hosting, the generation may take some time. If you need faster processing, use the [Docker version](#option-2-docker-version).<br>
147
158
 
148
159
  Using it is easy and doesn't require any guides. Enjoy!
149
160
 
150
161
  ### Option 2: Docker version
151
- 🟠 Recommended for users who want faster processing, very simple installation.<br>
162
+ 🟠 Recommended for users who want bigger maps, fast generation, nice looking textures and advanced settings.
163
+ 🛠️ Launch with one single command.
164
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
165
+ ⚙️ Advanced settings: enabled.
166
+ 🖼️ Texture dissolving: enabled.
152
167
  You can launch the project with minimalistic UI in your browser using Docker. Follow these steps:
153
168
 
154
169
  1. Install [Docker](https://docs.docker.com/get-docker/) for your OS.
@@ -161,7 +176,10 @@ docker run -d -p 8501:8501 iwatkot/maps4fs
161
176
  5. When the map is generated click on the `Download` button to get the map.
162
177
 
163
178
  ### Option 3: Python package
164
- 🔴 Recommended for developers.<br>
179
+ 🔴 Recommended for developers.
180
+ 🗺️ Supported map sizes: 2x2, 4x4, 8x8, 16x16 km and any custom size.
181
+ ⚙️ Advanced settings: enabled.
182
+ 🖼️ Texture dissolving: enabled.
165
183
  You can use the Python package to generate maps. Follow these steps:
166
184
 
167
185
  1. Install the package from PyPI:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "maps4fs"
7
- version = "1.0.1"
7
+ version = "1.0.4"
8
8
  description = "Generate map templates for Farming Simulator from real places."
9
9
  authors = [{name = "iwatkot", email = "iwatkot@gmail.com"}]
10
10
  license = {text = "MIT License"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes