mima-engine 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl

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 mima-engine might be problematic. Click here for more details.

Files changed (48) hide show
  1. mima/__init__.py +4 -1
  2. mima/backend/pygame_assets.py +67 -9
  3. mima/backend/pygame_backend.py +5 -2
  4. mima/core/__init__.py +0 -0
  5. mima/{collision.py → core/collision.py} +11 -17
  6. mima/core/database.py +58 -0
  7. mima/{engine.py → core/engine.py} +51 -45
  8. mima/{mode_engine.py → core/mode_engine.py} +8 -12
  9. mima/{scene_engine.py → core/scene_engine.py} +3 -7
  10. mima/maps/template.py +31 -1
  11. mima/maps/tiled/tiled_object.py +1 -1
  12. mima/maps/tiled/tiled_tileset.py +10 -5
  13. mima/maps/tilemap.py +4 -10
  14. mima/maps/tileset.py +5 -4
  15. mima/objects/animated_sprite.py +79 -68
  16. mima/objects/creature.py +14 -7
  17. mima/objects/dynamic.py +3 -1
  18. mima/objects/effects/colorize_screen.py +9 -1
  19. mima/objects/effects/light.py +6 -1
  20. mima/objects/effects/show_sprite.py +17 -6
  21. mima/objects/effects/walking_on_grass.py +27 -13
  22. mima/objects/effects/walking_on_water.py +36 -31
  23. mima/objects/loader.py +6 -9
  24. mima/objects/projectile.py +15 -5
  25. mima/objects/sprite.py +8 -1
  26. mima/objects/world/color_gate.py +10 -15
  27. mima/objects/world/color_switch.py +18 -28
  28. mima/objects/world/container.py +31 -36
  29. mima/objects/world/floor_switch.py +22 -28
  30. mima/objects/world/gate.py +21 -24
  31. mima/objects/world/light_source.py +27 -32
  32. mima/objects/world/logic_gate.py +30 -37
  33. mima/objects/world/movable.py +106 -89
  34. mima/objects/world/oneway.py +29 -33
  35. mima/objects/world/pickup.py +75 -17
  36. mima/objects/world/switch.py +26 -31
  37. mima/objects/world/teleport.py +21 -22
  38. mima/scripts/commands/present_item.py +10 -10
  39. mima/types/graphic_state.py +1 -0
  40. mima/usables/item.py +28 -9
  41. mima/usables/weapon.py +28 -8
  42. mima/util/runtime_config.py +8 -15
  43. mima/util/trading_item.py +4 -1
  44. mima/view/mima_mode.py +19 -54
  45. {mima_engine-0.2.2.dist-info → mima_engine-0.2.3.dist-info}/METADATA +3 -3
  46. {mima_engine-0.2.2.dist-info → mima_engine-0.2.3.dist-info}/RECORD +48 -46
  47. {mima_engine-0.2.2.dist-info → mima_engine-0.2.3.dist-info}/WHEEL +1 -1
  48. {mima_engine-0.2.2.dist-info → mima_engine-0.2.3.dist-info}/top_level.txt +0 -0
@@ -25,18 +25,18 @@ class CommandPresentItem(Command):
25
25
  self._item_sprite = Projectile(
26
26
  self._dynamic.px,
27
27
  self._dynamic.py - 1,
28
- 0,
29
- 0,
30
- 3600,
31
- self._dynamic.alignment,
32
- self._dynamic.tilemap,
28
+ f"Present {item.name}",
29
+ sprite_name=item.sprite_name,
30
+ tilemap=self._dynamic.tilemap,
31
+ duration=3600,
32
+ alignment=self._dynamic.alignment,
33
33
  )
34
34
  self._item_sprite.layer = 2
35
- self._item_sprite.sprite.name = item.sprite_name
36
- self._item_sprite.sprite.ox = item.sprite_ox
37
- self._item_sprite.sprite.oy = item.sprite_oy
38
- self._item_sprite.sprite.width = item.sprite_width
39
- self._item_sprite.sprite.height = item.sprite_height
35
+ # self._item_sprite.sprite.name = item.sprite_name
36
+ # self._item_sprite.sprite.ox = item.sprite_ox
37
+ # self._item_sprite.sprite.oy = item.sprite_oy
38
+ # self._item_sprite.sprite.width = item.sprite_width
39
+ # self._item_sprite.sprite.height = item.sprite_height
40
40
  self._item_sprite.solid_vs_dyn = False
41
41
  self._item_sprite.solid_vs_map = False
42
42
  self._item_sprite.one_hit = False
@@ -15,6 +15,7 @@ class GraphicState(Enum):
15
15
  LOCKED = 10
16
16
  OFF = 11
17
17
  ON = 12
18
+ ICON = 13
18
19
 
19
20
 
20
21
  class Until(Enum):
mima/usables/item.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING
3
+ from typing import TYPE_CHECKING, Any, Dict
4
4
 
5
5
  from ..util.constants import DEFAULT_SPRITE_HEIGHT, DEFAULT_SPRITE_WIDTH
6
6
 
@@ -13,20 +13,39 @@ if TYPE_CHECKING:
13
13
  class Item:
14
14
  engine: MimaEngine
15
15
 
16
- def __init__(self, name: str, sprite_name: str, description: str):
17
- self.name: str = name
18
- self.description: str = description
19
- self.sprite_name: str = sprite_name
20
- self.sprite_ox: int = 0
21
- self.sprite_oy: int = 0
22
- self.sprite_width: int = DEFAULT_SPRITE_WIDTH
23
- self.sprite_height: int = DEFAULT_SPRITE_HEIGHT
16
+ def __init__(self):
17
+ self.name: str = ""
18
+ self.description: str = ""
19
+ self.sprite_name: str = ""
20
+ # self.sprite_ox: int = 0
21
+ # self.sprite_oy: int = 0
22
+ # self.sprite_width: int = DEFAULT_SPRITE_WIDTH
23
+ # self.sprite_height: int = DEFAULT_SPRITE_HEIGHT
24
24
  self.key_item: bool = False
25
25
  self.equipable: bool = False
26
26
  self.price: int = 0
27
+ self.stackable: bool = False
28
+ self.stackable_by_merchant: bool = False
29
+
30
+ def init(self, data: Dict[str, Any]):
31
+
32
+ for key, val in data.items():
33
+ setattr(self, key, val)
34
+ # self.usable_id = data["usable_id"]
35
+ # self.name = data["name"]
36
+ # self.description = data["description"]
37
+ # self.price = data.get("attr_price", 0)
38
+ # self.sprite_name = data.get("sprite_name")
27
39
 
28
40
  def on_interaction(self, obj: Dynamic):
29
41
  return False
30
42
 
31
43
  def on_use(self, obj: Creature):
32
44
  return False
45
+
46
+ def __str__(self):
47
+ txt = f"{type(self).__name__}({self.name})"
48
+ return txt
49
+
50
+ def __repr__(self):
51
+ return str(self)
mima/usables/weapon.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Tuple
3
+ from typing import TYPE_CHECKING, Any, Dict, Tuple
4
4
 
5
5
  from ..types.damage import Damage
6
6
  from ..types.direction import Direction
@@ -11,20 +11,37 @@ if TYPE_CHECKING:
11
11
 
12
12
 
13
13
  class Weapon(Item):
14
- def __init__(self, name: str, sprite: str, description: str):
15
- super().__init__(name, sprite, description)
14
+ def __init__(self):
15
+ super().__init__()
16
16
 
17
17
  self.equipable = True
18
18
 
19
19
  self.damage: int = 0
20
20
  self.dtype: Damage = Damage.BODY
21
- self.health_cost: int = 0
22
- self.magic_cost: int = 0
23
- self.stamina_cost: int = 0
21
+ self.health_cost: float = 0.0
22
+ self.magic_cost: float = 0.0
23
+ self.stamina_cost: float = 0.0
24
24
  self.arrow_cost: int = 0
25
25
  self.bomb_cost: int = 0
26
- self.swing_timer: int = 0.2
27
- # self.projectiles: List[Projectile] = []
26
+ self.swing_timer: float = 0.2
27
+
28
+ def init(self, data: Dict[str, Any]):
29
+ for key, val in data.items():
30
+ setattr(self, key, val)
31
+ # self.usable_id = data["usable_id"]
32
+ # self.name = data["display_name"]
33
+ # self.description = data["description"]
34
+ # self.sprite_name = data["sprite_name"]
35
+ # self.price = data["attr_price"]
36
+ # self.swing_timer = data["attr_swing_timer"]
37
+ # self.damage = data["attr_damage"]
38
+ # self.dtype = data["attr_dtype"]
39
+ # self.health_cost = data["attr_health_cost"]
40
+ # self.magic_cost = data["attr_magic_cost"]
41
+ # self.stamina_cost = data["attr_stamina_cost"]
42
+ # self.bomb_cost = data["attr_bomb_cost"]
43
+ # self.arrow_cost = data["attr_arrow_cost"]
44
+ # print()
28
45
 
29
46
  def _determine_attack_origin(self, obj: Creature) -> Tuple[float, float]:
30
47
  vx = 0.0
@@ -46,3 +63,6 @@ class Weapon(Item):
46
63
 
47
64
  def on_unequip(self, obj: Creature):
48
65
  pass
66
+
67
+ def on_interaction(self, target: Creature):
68
+ return True # Add to inventory
@@ -106,9 +106,7 @@ class RuntimeConfig:
106
106
  self._converted: Dict[str, Any] = {}
107
107
 
108
108
  if not config_path:
109
- config_path = os.path.abspath(
110
- os.path.join(os.getcwd(), "mima.ini")
111
- )
109
+ config_path = os.path.abspath(os.path.join(os.getcwd(), "mima.ini"))
112
110
 
113
111
  self._config_path = config_path
114
112
  config = configparser.ConfigParser()
@@ -145,6 +143,9 @@ class RuntimeConfig:
145
143
  self.small_font_width = SMALL_FONT_WIDTH
146
144
  self.small_font_height = SMALL_FONT_HEIGHT
147
145
 
146
+ ## Locale
147
+ self.locale = "en"
148
+
148
149
  def _read_config(self, config: configparser.ConfigParser):
149
150
  mappings = [
150
151
  "keyboard_map_p1",
@@ -251,14 +252,10 @@ class RuntimeConfig:
251
252
  if but.value < 12:
252
253
  kbmap[but] = []
253
254
  elif but.value < 24:
254
- kbmap[but] = self._loaded["keyboard_map_p1"][
255
- but.name.split("_")[1]
256
- ]
255
+ kbmap[but] = self._loaded["keyboard_map_p1"][but.name.split("_")[1]]
257
256
 
258
257
  elif but.value < 36:
259
- kbmap[but] = self._loaded["keyboard_map_p2"][
260
- but.name.split("_")[1]
261
- ]
258
+ kbmap[but] = self._loaded["keyboard_map_p2"][but.name.split("_")[1]]
262
259
 
263
260
  else:
264
261
  kbmap[but] = []
@@ -271,14 +268,10 @@ class RuntimeConfig:
271
268
  if but.value < 12:
272
269
  jsmap[but] = []
273
270
  elif but.value < 24:
274
- jsmap[but] = self._loaded["joystick_map_p1"][
275
- but.name.split("_")[1]
276
- ]
271
+ jsmap[but] = self._loaded["joystick_map_p1"][but.name.split("_")[1]]
277
272
 
278
273
  elif but.value < 36:
279
- jsmap[but] = self._loaded["joystick_map_p2"][
280
- but.name.split("_")[1]
281
- ]
274
+ jsmap[but] = self._loaded["joystick_map_p2"][but.name.split("_")[1]]
282
275
 
283
276
  else:
284
277
  jsmap[but] = []
mima/util/trading_item.py CHANGED
@@ -10,11 +10,14 @@ if TYPE_CHECKING:
10
10
  @dataclass
11
11
  class TradingItem:
12
12
  item: Item
13
- price: int
14
13
  count: int = 1
15
14
  factor: float = 1.0
16
15
  available: int = 1
17
16
  tid: int = 0
17
+ price: int = 0
18
+ trading_price: int = 0
19
+ stackable: bool = False
20
+ stackable_merchant: bool = False
18
21
 
19
22
  def __eq__(self, other):
20
23
  return self.tid == other.tid
mima/view/mima_mode.py CHANGED
@@ -4,7 +4,7 @@ import logging
4
4
  import math
5
5
  from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
6
6
 
7
- from ..collision import (
7
+ from ..core.collision import (
8
8
  _chunk_index,
9
9
  add_to_collision_chunk,
10
10
  check_object_to_map_collision,
@@ -90,9 +90,7 @@ class MimaMode(MimaView):
90
90
  def get_camera_name(self, player: Player = Player.P1):
91
91
  return self.scenes[player].camera.name
92
92
 
93
- def unload_map(
94
- self, player: Player = Player.P1, player_only: bool = False
95
- ) -> None:
93
+ def unload_map(self, player: Player = Player.P1, player_only: bool = False) -> None:
96
94
  p_obj = self.engine.memory.player[player]
97
95
  map_name = p_obj.tilemap.name
98
96
 
@@ -146,9 +144,7 @@ class MimaMode(MimaView):
146
144
  # Map not loaded
147
145
  self.prepare_object_lists(map_name, player, p_obj)
148
146
 
149
- self._loader.populate_dynamics(
150
- self.maps[player], self.dynamics[map_name]
151
- )
147
+ self._loader.populate_dynamics(self.maps[player], self.dynamics[map_name])
152
148
 
153
149
  for quest in self.engine.memory.quests:
154
150
  quest.populate_dynamics(self.dynamics[map_name], map_name)
@@ -189,9 +185,7 @@ class MimaMode(MimaView):
189
185
  chunks_per_row,
190
186
  )
191
187
  if self.engine.draw_chunk_info:
192
- self.add_effect(
193
- DynamicDebugBox(obj, n_frames=-1), map_name
194
- )
188
+ self.add_effect(DynamicDebugBox(obj, n_frames=-1), map_name)
195
189
 
196
190
  def handle_user_input(self):
197
191
  for player, scene in self.scenes.items():
@@ -221,9 +215,7 @@ class MimaMode(MimaView):
221
215
  else:
222
216
  msg += f"object {obj.name} ({obj.dyn_id})"
223
217
  else:
224
- msg = (
225
- "Trying to interact with a quest that is None"
226
- )
218
+ msg = "Trying to interact with a quest that is None"
227
219
 
228
220
  LOG.exception(msg)
229
221
  raise
@@ -298,9 +290,7 @@ class MimaMode(MimaView):
298
290
  tilemap.width + self.chunk_size // 2,
299
291
  self.chunk_size,
300
292
  ):
301
- chidx = _chunk_index(
302
- px, py, self.chunk_size, chunks_per_row
303
- )
293
+ chidx = _chunk_index(px, py, self.chunk_size, chunks_per_row)
304
294
  # collision_lists[map_name][chidx] = []
305
295
  self.add_effect(
306
296
  StaticDebugBox(
@@ -343,9 +333,7 @@ class MimaMode(MimaView):
343
333
  # return collision_lists
344
334
 
345
335
  def _determine_target(self, obj, players) -> Dynamic:
346
- players = [
347
- p for p in players if not self.engine.get_player(p).occupied
348
- ]
336
+ players = [p for p in players if not self.engine.get_player(p).occupied]
349
337
  if not players:
350
338
  return None
351
339
  dists = [
@@ -376,12 +364,8 @@ class MimaMode(MimaView):
376
364
  obj.vz = 0.0
377
365
 
378
366
  def handle_collisions(self, elapsed_time: float) -> None:
379
- screen_width = (
380
- self.engine.backend.render_width // self.engine.rtc.tile_width
381
- )
382
- screen_height = (
383
- self.engine.backend.render_height // self.engine.rtc.tile_height
384
- )
367
+ screen_width = self.engine.backend.render_width // self.engine.rtc.tile_width
368
+ screen_height = self.engine.backend.render_height // self.engine.rtc.tile_height
385
369
  max_dist = screen_width + screen_height
386
370
 
387
371
  for map_name, players in self.players_on_map.items():
@@ -423,19 +407,13 @@ class MimaMode(MimaView):
423
407
  self.engine.memory.quests,
424
408
  ]
425
409
  if self._probe_p2p_collision(obj, other):
426
- new2_px, new2_py = (
427
- check_object_to_object_collision(*args)
428
- )
410
+ new2_px, new2_py = check_object_to_object_collision(*args)
429
411
 
430
412
  if new2_px == new_px and new2_py == new_py:
431
413
  # No change = no collision
432
- self.engine.trigger_player_collision(
433
- True, obj.player
434
- )
414
+ self.engine.trigger_player_collision(True, obj.player)
435
415
  else:
436
- new_px, new_py = check_object_to_object_collision(
437
- *args
438
- )
416
+ new_px, new_py = check_object_to_object_collision(*args)
439
417
  obj.px = new_px
440
418
  obj.py = new_py
441
419
 
@@ -457,23 +435,17 @@ class MimaMode(MimaView):
457
435
  vx, vy = vx * 0.707, vy * 0.707
458
436
 
459
437
  obj.real_vx = (
460
- vx
461
- if vx == obj.real_vx
462
- else calculate(obj, vx, obj.real_vx, elapsed_time)
438
+ vx if vx == obj.real_vx else calculate(obj, vx, obj.real_vx, elapsed_time)
463
439
  )
464
440
  obj.real_vy = (
465
- vy
466
- if vy == obj.real_vy
467
- else calculate(obj, vy, obj.real_vy, elapsed_time)
441
+ vy if vy == obj.real_vy else calculate(obj, vy, obj.real_vy, elapsed_time)
468
442
  )
469
443
 
470
444
  new_px = (
471
- obj.px
472
- + obj.real_vx * obj.speed * obj.attributes.speed_mod * elapsed_time
445
+ obj.px + obj.real_vx * obj.speed * obj.attributes.speed_mod * elapsed_time
473
446
  )
474
447
  new_py = (
475
- obj.py
476
- + obj.real_vy * obj.speed * obj.attributes.speed_mod * elapsed_time
448
+ obj.py + obj.real_vy * obj.speed * obj.attributes.speed_mod * elapsed_time
477
449
  )
478
450
 
479
451
  return new_px, new_py
@@ -503,9 +475,7 @@ class MimaMode(MimaView):
503
475
  for map_name in self.players_on_map:
504
476
  for effect in self.effects[map_name]:
505
477
  effect.update(elapsed_time)
506
- effect.px, effect.py = self.update_position(
507
- effect, elapsed_time
508
- )
478
+ effect.px, effect.py = self.update_position(effect, elapsed_time)
509
479
 
510
480
  def update_scenes(self, elapsed_time: float) -> None:
511
481
  for player, scene in self.scenes.items():
@@ -524,17 +494,12 @@ class MimaMode(MimaView):
524
494
 
525
495
  def add_dynamic(self, dynamic: Dynamic, map_name: str):
526
496
  self.dynamics[map_name].append(dynamic)
527
- if (
528
- map_name in self.collision_targets
529
- and not dynamic.moves_on_collision
530
- ):
497
+ if map_name in self.collision_targets and not dynamic.moves_on_collision:
531
498
  dynamic.chunks = add_to_collision_chunk(
532
499
  self.collision_targets[map_name],
533
500
  dynamic,
534
501
  self.chunk_size,
535
- _chunks_per_row(
536
- self.chunk_size, self.engine.get_map(map_name).width
537
- ),
502
+ _chunks_per_row(self.chunk_size, self.engine.get_map(map_name).width),
538
503
  )
539
504
 
540
505
  def add_projectile(self, projectile: Projectile, map_name: str):
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mima-engine
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: A game engine based on pygame.
5
5
  Author-email: Stephan Balduin <stephan.balduin@mailbox.org>
6
6
  Classifier: Programming Language :: Python :: 3
7
7
  Classifier: License :: OSI Approved :: MIT License
8
8
  Requires-Python: >=3.8
9
9
  Description-Content-Type: text/markdown
10
- Provides-Extra: ce
11
- Requires-Dist: pygame-ce; extra == "ce"
12
10
  Provides-Extra: pygame
13
11
  Requires-Dist: pygame; extra == "pygame"
12
+ Provides-Extra: ce
13
+ Requires-Dist: pygame-ce; extra == "ce"
14
14
 
15
15
  # Mima Engine
16
16
 
@@ -1,61 +1,63 @@
1
- mima/__init__.py,sha256=m6kyaNpwBcP1XYcqrelX2oS3PJuOnElOcRdBa9pEb8c,22
2
- mima/collision.py,sha256=-XISlbgGK9QI0Z--vm2KEsFx7QsDPrhIu0mM71AuH38,9251
3
- mima/engine.py,sha256=xsRtw5TRKDRMLSI342SnxgNdRdX2OZ1FRP4xA55dTls,10459
4
- mima/mode_engine.py,sha256=Yidqa1lTNGyNHTMpz4ysIjFRdabQj71QeNTuQDx4PSA,2259
5
- mima/scene_engine.py,sha256=S2I_HWQ29ZYlnKyKaE_uyZ84M7oBC1euexefuPcvuaY,2662
1
+ mima/__init__.py,sha256=FfhHMFAnVC-I1HTjRsXx5yyTgh-3hwQwp8F4lX-uzTs,104
6
2
  mima/backend/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
- mima/backend/pygame_assets.py,sha256=TdDmKASk1n6whwh4ONxX41kofVS_iXhsdEzCV5l8NeM,11986
3
+ mima/backend/pygame_assets.py,sha256=DoeebQlRqzTtuu_AsZ0kauqGzly0JtrOi66W1WTzUhk,14106
8
4
  mima/backend/pygame_audio.py,sha256=gag9bM-UT8DfYpGDYvKBn8jdnwgFU4NklEs2aNwHhRY,2365
9
- mima/backend/pygame_backend.py,sha256=yS_QMkugldd6vzHCoZSF6jtyGp__NkQZbiSiloN4iIs,18470
5
+ mima/backend/pygame_backend.py,sha256=O7cdu-HPY4W1dWosJtxv_j3bGlqVIc93AhVkTr68GR4,18552
10
6
  mima/backend/pygame_camera.py,sha256=5ietEyhDryT3SBChvcY_jdsWRi09gcTg5O5mvg_15mM,2059
11
7
  mima/backend/pygame_events.py,sha256=orxC6a3EtWKWbTMyKO-9MMrcemw8qrN7y3S6DyLyX-0,26677
8
+ mima/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ mima/core/collision.py,sha256=Quv5EZpYq5-uIn_Q1sxVhKtSclRoQyASXFPO69edJJY,9209
10
+ mima/core/database.py,sha256=lo_LlhONPwZxuW8fdm_Oeg8Ofe4Qr8pwbAeYx477HxM,2007
11
+ mima/core/engine.py,sha256=D-b-_pONz7fOxH7ySMsx40hCYwy5j-cT0r-PFtTcY1k,11125
12
+ mima/core/mode_engine.py,sha256=4nW0ohWSavN9yUvaRhaZzhKVcEsRwfK1yzqgmd0wAmU,2221
13
+ mima/core/scene_engine.py,sha256=8P_ZuXwPHZFthgHmVtWkIgaXHedeu0eyRdf2P8ACLRA,2586
12
14
  mima/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- mima/maps/template.py,sha256=xBIIzf2o6ATHevfZA5b5XP-o6o71-04u7OAS4847buY,1178
15
+ mima/maps/template.py,sha256=0IDxo-g0ZTbCwhIIZadMG5rFvPLNJnm137mz4GVGlw0,2463
14
16
  mima/maps/tile.py,sha256=ZIPtpVCrX_dnL8SKwobj_0etMCUrQxRL5d04KnEmwNQ,639
15
17
  mima/maps/tile_animation.py,sha256=xoI41BIFd6udW47xHAbfGhuqMVIvAw75vlec1iEhdhE,106
16
18
  mima/maps/tile_info.py,sha256=VLAjfPCrLbzTP7p1qk5O3ytc4zFg_52ZyYvAbufC_X8,152
17
19
  mima/maps/tile_layer.py,sha256=L8qmXaWnAaS4FUb-poC8Xve_pGvoFmwR_YCLE1tdWww,1592
18
- mima/maps/tilemap.py,sha256=u3SDH57V12Rh7FLTC5zEO9fLt5w6TEqnAaRdkhRbEdw,6966
19
- mima/maps/tileset.py,sha256=okd0foJ04qb9KrBMlc094Du9TraRaOcikeC3-xIXfZ0,1006
20
+ mima/maps/tilemap.py,sha256=LQPt58F9jpbthumC3Ariq5tlSN2aWDzzil8NG3v_HZI,6867
21
+ mima/maps/tileset.py,sha256=ipXEq4J5VyKT3XL2C0oIPqO5yUGs5xGu7OcZLnjEEww,1062
20
22
  mima/maps/tileset_info.py,sha256=nJvghbxlxpvYOXaR1A2Joyz3LxPV7usspQcvKM5iyBg,136
21
23
  mima/maps/transition_map.py,sha256=B5vrEkDXiEDIR7rjtJfwM8WngLztDnfoni-vEPNfG8U,4909
22
24
  mima/maps/tiled/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
25
  mima/maps/tiled/tiled_layer.py,sha256=JpSoxHGYf-g4fjGcU8J8z3M9RaSvuBd1VHIp9joZy4A,1572
24
26
  mima/maps/tiled/tiled_map.py,sha256=eqtgqfxwBA5zEd4Kh4L1uSsaUHYZATNOmBrtpGYas9I,2968
25
- mima/maps/tiled/tiled_object.py,sha256=ubfvPY2VSfy7tOhakHbfBbD4wa6X3fpSJ8ugGUzvGuI,2782
27
+ mima/maps/tiled/tiled_object.py,sha256=TkUNag8ZZyS28yoMScXqEdHq_-jdtG9UdTh78KbvXAk,2770
26
28
  mima/maps/tiled/tiled_objectgroup.py,sha256=CDaxhpj65v-jKGdIHbN80VBfd6GbEfALgJnB5cdcKUU,588
27
29
  mima/maps/tiled/tiled_template.py,sha256=02JlfGitkorSFztDQ4BrLx7ZnWRctJgV7azK5cGvTNE,1498
28
30
  mima/maps/tiled/tiled_tile.py,sha256=CMh0W7KweqP_WZUbcgcYT3xis8hOECBlzaVtRKTYLX8,3172
29
- mima/maps/tiled/tiled_tileset.py,sha256=UuzyF5bSfZcfmnxC4Fu4FCLrmoPADCVGY-sUQP8eVfM,1437
31
+ mima/maps/tiled/tiled_tileset.py,sha256=nJwbvLxGbZzmuruRNrdf7tFxP2EMgQWTpxUi5ElgPy0,1598
30
32
  mima/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- mima/objects/animated_sprite.py,sha256=RMhd8iALN-CdnmLDS0-WSy0Z0Gie8f2BlZ0nUMFSiA0,6784
33
+ mima/objects/animated_sprite.py,sha256=xeg89mZxx2_PpKX_dq1ySkfeZlEbxVymbX2Kf_yOHSw,7210
32
34
  mima/objects/attribute_effect.py,sha256=zikOSb6-hD6Ecm4L9EyRocTyJQ7IYC0CJ9DCBxbK4cU,650
33
35
  mima/objects/attributes.py,sha256=qqIVjuIXUQDv3qtdoaRDvBnx5oUbjuPdvcGR49fHRwM,3781
34
- mima/objects/creature.py,sha256=SbyDRobooNQ6sHiHjjKkaxiBPDPkKIHKYTMHOiTK6TM,12555
35
- mima/objects/dynamic.py,sha256=dUKYRczqXob80Vo-YzDVoXfs32gCy3n2ragzi4wWrM8,6362
36
- mima/objects/loader.py,sha256=ofJQUeKF6V3R0qPQPNngc4U8FLX8bjGD1mPW__TzQ6A,4374
37
- mima/objects/projectile.py,sha256=xsbIcGKru1A2xZ47c8Qfl-8U708go0DPT1KUx-HiQZM,3001
38
- mima/objects/sprite.py,sha256=quNsFAPvADsSsitEmw1omyol9DA-hpAVQmGxBAQUDe8,3851
36
+ mima/objects/creature.py,sha256=Y0J8TXHYHB9A9vSgZEmlFd0EA1cfL-leeCYh1EifcoY,12690
37
+ mima/objects/dynamic.py,sha256=yDh8wjX_FViUWF0lqiLH0q3iuLMaE1qAd4uu6DHB7D4,6434
38
+ mima/objects/loader.py,sha256=GAdXsS5dINwNuHq88nCTHqrorg-BC5Fw8wgDtcMpnoA,4394
39
+ mima/objects/projectile.py,sha256=50aoKz8F8NH0Z5wSSsSm2RhsgbGWQd4PFMTf0Ku-0z4,3214
40
+ mima/objects/sprite.py,sha256=yQ_fFzqchlMYvbmQ8EKoxMrj4Cqq0wLyVAeSuP7GV4M,3959
39
41
  mima/objects/effects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- mima/objects/effects/colorize_screen.py,sha256=qTd9X_xU3PK25bP_Zn61T-bS6xC4O3ATRDPnZrzq5gA,1702
42
+ mima/objects/effects/colorize_screen.py,sha256=k-rt6xRmg3eW_vmmKbhII55-wlVUjlxNVfi4IZpkGaM,1834
41
43
  mima/objects/effects/debug_box.py,sha256=Lc9bx8vGU9n0GXEFwrWmtPfcH0KBpMBspb-eNObgCDc,4074
42
- mima/objects/effects/light.py,sha256=ivl0euJoaBJHYNC7WRlr4wCZqTgvjZurKerItlWHC6M,3044
43
- mima/objects/effects/show_sprite.py,sha256=vR50nWV1LtPrje1NCOllLVMVilI03R9IcpdRCCe8LFo,964
44
- mima/objects/effects/walking_on_grass.py,sha256=kjBNPEapFFWr-_HZX_vgub7QasXvpPJ34rsRQqKxpOQ,1677
45
- mima/objects/effects/walking_on_water.py,sha256=9KbeQut852I8O_vwWB5gSf0CnMgoa5tScQijEGLUHR4,1548
44
+ mima/objects/effects/light.py,sha256=w0XsxChQYE4YBJ2o0supakwP7Xove7dOod3u5MBEDvA,3131
45
+ mima/objects/effects/show_sprite.py,sha256=kPACkdOn6R6r-ov9QFWvfZd9vJksNcFrKa2Sg_KU8dQ,1216
46
+ mima/objects/effects/walking_on_grass.py,sha256=9qo3Qtv4Ra1kdus4OE48JWEy9Tk-91e1Ti6zKDSa3Ks,2057
47
+ mima/objects/effects/walking_on_water.py,sha256=K2EdzzTfnO2fNEBC7Hr8esY5nirZvHkw8IUNh4wzOs4,1727
46
48
  mima/objects/world/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- mima/objects/world/color_gate.py,sha256=FgS98BY10AfVF2a9Eun4nJeuWmr2NNCJCOLjTxirteA,2131
48
- mima/objects/world/color_switch.py,sha256=1HN1ZYWAGFuepX4ELREKfsa_1EA4Fx7siPCMxPMEVAk,3400
49
- mima/objects/world/container.py,sha256=r6wWoKG_6btGtqlTS_AbxKBJ_-WxSx2ixoDxRHLZleQ,6212
50
- mima/objects/world/floor_switch.py,sha256=Tplii1SjbQQq734Sz1d_HMWhWPlsRs-xxk6hvWLiVRg,3453
51
- mima/objects/world/gate.py,sha256=B9Enhfe-ICo7yWb9EigFO-2p9L5qyGbdHsdPu_gte7Y,5850
52
- mima/objects/world/light_source.py,sha256=0N8wJOnWTeYb-p-N2qD7-opEsdsfBokLvIbRWB0mSxk,4013
53
- mima/objects/world/logic_gate.py,sha256=WFwWoF-nQY-1gt1-4hawQkLxWzM1dtKiM2iclchRoe0,5148
54
- mima/objects/world/movable.py,sha256=7qxXavKIoKZN3zHTKYsQddfmf6s9U3Qte4dbvfak_KI,12041
55
- mima/objects/world/oneway.py,sha256=9pRozTdoB0Z_DqDZehLLT29lJ1K4fenp2UWeVTOaJt4,5657
56
- mima/objects/world/pickup.py,sha256=KcF-E3lKyhkar6WrOezqeLYH_Ua1pignb-lMMDt9V9o,3190
57
- mima/objects/world/switch.py,sha256=kk4_Z6XwymI-FjHrbqy97Ou_8ZOeLgesv8TtrhXCCw0,5800
58
- mima/objects/world/teleport.py,sha256=EzlGagBLgZ3htEv2REBYGcTb6qhthtSJLp0WAXlIkBI,10815
49
+ mima/objects/world/color_gate.py,sha256=1VZsQ6M8dPgtuE94yb-HBuAd6g_ZRvkH3F3Qjq7T8Rc,2013
50
+ mima/objects/world/color_switch.py,sha256=3Iw4GPKcT2sxO2oIrmZmroAFZLYx0vU8dMDtIswrW10,3121
51
+ mima/objects/world/container.py,sha256=nBdGByhKuIRsVET36Gb1eAKFZJ0AXRwpE4Y6w00q3t0,6000
52
+ mima/objects/world/floor_switch.py,sha256=Xnm8BOFiEnBmj_h68ZtZcUpeD0Lsl3jHVS9njCsiAus,3285
53
+ mima/objects/world/gate.py,sha256=aaxkTLdfLGrWroWGyjj6cn4QI29ze_to9UKxyNArjY4,5679
54
+ mima/objects/world/light_source.py,sha256=LQ-m8YqLUu7Wb9oZeb-ClrxWbSdr36LQ1fZesLu_5eI,3746
55
+ mima/objects/world/logic_gate.py,sha256=5f3gkU0TJ6y8nnz88bzD3-feDa4gPsCprOT86ZXsKN8,4863
56
+ mima/objects/world/movable.py,sha256=IdB0QSCaivs36YeDrJwsDIgL2rXaY_YL7IPDl5wNfH8,12578
57
+ mima/objects/world/oneway.py,sha256=dgeIFZ-wVR5-9eJwNO1meh2S7DjQB2OqJqBGz7c9ddM,5401
58
+ mima/objects/world/pickup.py,sha256=NY8ElHFYX33H2OZKSgJiXQ_BSB9i9Ks9i9pqvPxFRhQ,4708
59
+ mima/objects/world/switch.py,sha256=Z_3_1xF-SJgd3cS8AoDr7yrbD4n-weVBe4m3bcytM7M,5540
60
+ mima/objects/world/teleport.py,sha256=2HqMkaU6V01AcsfEY_YG-wNrc8iRnsaQyNI-SNXVK4M,10584
59
61
  mima/scripts/__init__.py,sha256=yLRT6igjwtSkOFbd0x8PXXFZVt1_xUIuCHhWhywHRuE,75
60
62
  mima/scripts/command.py,sha256=rLjUbmvmpHqhaznt9TWkifY5IKtO-AdAGkzKnoKqAGg,881
61
63
  mima/scripts/script_processor.py,sha256=IPl6oFlVAnZ2uibc9X4ffyTNwpendk4cMGZMvZDObjc,2072
@@ -71,7 +73,7 @@ mima/scripts/commands/move_to.py,sha256=FE2efowCpMp5QgDBvIlGju4T0xfa9N1UwjaE2yh3
71
73
  mima/scripts/commands/oneway_move.py,sha256=1mytQxv6kiSGr_-H7m-DQPKbFKfT2T45i99Ro764vE4,1683
72
74
  mima/scripts/commands/parallel.py,sha256=YFDDv6Lgc6uKvr_53II6YUznnlnW8JNhmlWK5FMwDSw,1780
73
75
  mima/scripts/commands/play_sound.py,sha256=m4wqWC6O8TUsJIcYrP8bb8ZFjSNK3IpAyBdxLo-e8zo,348
74
- mima/scripts/commands/present_item.py,sha256=7kYfoT4e6LtmMlwXX66vBZ6o8jBAAJR8QunwYxLAb-Q,1780
76
+ mima/scripts/commands/present_item.py,sha256=HfSCncURe6HIc2-omA7xvFbon58wmRaKEwVukZ1FlhM,1865
75
77
  mima/scripts/commands/progress_quest.py,sha256=-Nm7basBFdnixKwf42Xrs6iDROx22WGIDHpAZ0itpGU,359
76
78
  mima/scripts/commands/quit_game.py,sha256=BmLlh45K46Mx57j1dE2wWhmmmcb0Y-X5mLrFV1HIfhI,219
77
79
  mima/scripts/commands/save_game.py,sha256=yhmXIpnhD89otDmltE7mucdEozHc0LfRSZCSZZO915c,392
@@ -92,7 +94,7 @@ mima/types/blend.py,sha256=0zhU2QjlajZDh3-tvmUCP_gMQsvr_eZPOZ9dqbk3LLU,96
92
94
  mima/types/damage.py,sha256=8AgvwiNgcENXwc0v0VCuxxA1w45huSTQdR6S1RW4yj8,584
93
95
  mima/types/direction.py,sha256=P7EqLZFacMjf8BmQmgNFlXutKtYxlJ6U5ha3JPyFwjI,1116
94
96
  mima/types/gate_color.py,sha256=Mby5_s4EoTIrEZ92gKLBAG9vymF3207RK93EfqGtLuk,86
95
- mima/types/graphic_state.py,sha256=6pUumsqyvPIVIJrOH4TRfgrHWDlTkNYU1g6Joc9Cx_U,308
97
+ mima/types/graphic_state.py,sha256=eucW0exiUwyFfRbNii5MYMuKOgqsbd3BbbzC2yTJrhY,322
96
98
  mima/types/keys.py,sha256=OP4P4gsGRbN242CRzuYmzlYC1JnNlZU41p1Z3yLUQz4,935
97
99
  mima/types/mode.py,sha256=sxq6ZLKAswrHjnxeIB4AZFfiboFeT-Vh2l0Wcdy-r-Q,120
98
100
  mima/types/nature.py,sha256=4tANHg4mzN8O57B-pr0jafikCZkqB83r-pJpDG4CnAw,159
@@ -105,8 +107,8 @@ mima/types/tile_collision.py,sha256=2O_IfJV1lCtfItjyu3dtm2UY7_JNwCSk9q0JXrQaGmk,
105
107
  mima/types/weapon_slot.py,sha256=kX5mYKgrgn-CcJ-gUzfvTGOVoxLllPRQ92sRjWYoqCg,87
106
108
  mima/types/window.py,sha256=ZdknCL1lvlQDbr-eVXlXObQ_BsZ6PF7cxMGQguhmV44,890
107
109
  mima/usables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
- mima/usables/item.py,sha256=6xZSm_-x14LP5-Cgicg6GOt1bG3OhwfYqnZGJUL1gRg,911
109
- mima/usables/weapon.py,sha256=U0h6AZAA3bC8QapFqPcHFZdRKiwIf07xPtgPXUn1Z90,1269
110
+ mima/usables/item.py,sha256=3ZM1gR6Ve-5PgBC8QuXU26rKIe9KXbKp_VCouvi-vUY,1443
111
+ mima/usables/weapon.py,sha256=YzahQ_B9PT2rgd6NjBJY2ISVAE3XO7PPpE2gZumv3q4,2033
110
112
  mima/util/__init__.py,sha256=KMuEDnRsGr32gXED12ZyL1za6iKAuk_Tn8S3mTtpYds,42
111
113
  mima/util/colors.py,sha256=u4YVTCvSNFBhHaR9dFiMVzvE9fRM1UlW1m8gDa7oDY4,1483
112
114
  mima/util/constants.py,sha256=Sy-6vwAXJf86drHy7IxQLDXtuBbcGhuNU0-YKTUNBFM,1353
@@ -114,15 +116,15 @@ mima/util/functions.py,sha256=GqAgT4-ATZcCvaaUyEOCeXphUu8xJXmVshAbFPJfOWI,1130
114
116
  mima/util/input_defaults.py,sha256=6S9YlXqtvA5Q1yAFqwicyorCXcy5FEhi3AlyzqpUxAc,2641
115
117
  mima/util/logging.py,sha256=p6-C1ozlCs_sCkmykh_B0NgZtvSkcZXXseE6qA6Zwew,1197
116
118
  mima/util/property.py,sha256=o6dEWpIOWxwS_lf6MvYZSjkyI5Amo56P2JIDa7AMaRY,107
117
- mima/util/runtime_config.py,sha256=uRJJ4Tgr6fBv8Oc0w2oBRxWAj0ljTqhy_8Ff1blROVw,9505
118
- mima/util/trading_item.py,sha256=4GROKX-8EiMx_v4zgWzR1zjvyJvccB7t8T9Q3yaqQWI,370
119
+ mima/util/runtime_config.py,sha256=MyRA1xHS6O5HdISUEhKFmIPQHPz26vtaBnKdqa_ISDc,9369
120
+ mima/util/trading_item.py,sha256=mToWWNyZKbWVTbeefUUX8kGEPyvJ9-YJQBCjlWlPLLY,466
119
121
  mima/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
122
  mima/view/camera.py,sha256=IZQJF7NxrQ265TRgPnlmSVcNwgsJ3I1ek40u7PQG20g,6260
121
- mima/view/mima_mode.py,sha256=fFOcjJzaFK-3OIyqW8nTynKFVNYJcNWOF8hJe2B-t5s,21981
123
+ mima/view/mima_mode.py,sha256=wJTb3UMsx5RwvrifPvZIYWeBkPCmUDFWJ6QFCMXLxrg,21328
122
124
  mima/view/mima_scene.py,sha256=oGfyM-WLN-eQLILnIbzI0sa160BqsS8dE2UaC2qq2XY,6988
123
125
  mima/view/mima_view.py,sha256=tKLcoNWVwldoqgG3jxhI_jMsFAXzod2csXyEbhub2xI,217
124
126
  mima/view/mima_window.py,sha256=LllwqhKo1D-MoNAXJaiufTi0AacRo_QnVZX8WYUH4ds,4790
125
- mima_engine-0.2.2.dist-info/METADATA,sha256=sdQq2GGV9rf5MORGh8dXekYkvMWb61aWhqS3KbH3X2c,487
126
- mima_engine-0.2.2.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
127
- mima_engine-0.2.2.dist-info/top_level.txt,sha256=5t1cOdQSaPQ0jWDhKDvDXwpV2XZ_a1GSSFAIvEsG0fQ,5
128
- mima_engine-0.2.2.dist-info/RECORD,,
127
+ mima_engine-0.2.3.dist-info/METADATA,sha256=GIWbMyJ0CCwRdm0NUVMqDdpnjdZzKkeYyX1knlBtDI4,487
128
+ mima_engine-0.2.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
129
+ mima_engine-0.2.3.dist-info/top_level.txt,sha256=5t1cOdQSaPQ0jWDhKDvDXwpV2XZ_a1GSSFAIvEsG0fQ,5
130
+ mima_engine-0.2.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5