mima-engine 0.1.5__py3-none-any.whl → 0.2.1__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 (80) hide show
  1. mima/__init__.py +1 -1
  2. mima/backend/pygame_assets.py +14 -8
  3. mima/backend/pygame_audio.py +5 -2
  4. mima/backend/pygame_backend.py +255 -57
  5. mima/backend/pygame_camera.py +63 -0
  6. mima/backend/pygame_events.py +369 -120
  7. mima/collision.py +182 -111
  8. mima/engine.py +155 -15
  9. mima/maps/tiled/tiled_map.py +3 -3
  10. mima/maps/tiled/tiled_tileset.py +1 -0
  11. mima/maps/tilemap.py +78 -15
  12. mima/maps/tileset.py +8 -2
  13. mima/maps/transition_map.py +6 -8
  14. mima/mode_engine.py +80 -0
  15. mima/objects/animated_sprite.py +23 -15
  16. mima/objects/attributes.py +3 -0
  17. mima/objects/creature.py +54 -17
  18. mima/objects/dynamic.py +30 -8
  19. mima/objects/effects/colorize_screen.py +22 -6
  20. mima/objects/effects/debug_box.py +124 -0
  21. mima/objects/effects/light.py +21 -30
  22. mima/objects/effects/show_sprite.py +39 -0
  23. mima/objects/effects/walking_on_grass.py +25 -7
  24. mima/objects/effects/walking_on_water.py +17 -6
  25. mima/objects/loader.py +24 -13
  26. mima/objects/projectile.py +21 -6
  27. mima/objects/sprite.py +7 -8
  28. mima/objects/world/color_gate.py +5 -2
  29. mima/objects/world/color_switch.py +12 -6
  30. mima/objects/world/container.py +17 -8
  31. mima/objects/world/floor_switch.py +8 -4
  32. mima/objects/world/gate.py +8 -5
  33. mima/objects/world/light_source.py +11 -9
  34. mima/objects/world/logic_gate.py +8 -7
  35. mima/objects/world/movable.py +72 -28
  36. mima/objects/world/oneway.py +14 -9
  37. mima/objects/world/pickup.py +10 -5
  38. mima/objects/world/switch.py +28 -25
  39. mima/objects/world/teleport.py +76 -55
  40. mima/scene_engine.py +19 -20
  41. mima/scripts/command.py +16 -2
  42. mima/scripts/commands/change_map.py +23 -4
  43. mima/scripts/commands/equip_weapon.py +23 -0
  44. mima/scripts/commands/give_item.py +5 -3
  45. mima/scripts/commands/move_map.py +9 -9
  46. mima/scripts/commands/parallel.py +16 -3
  47. mima/scripts/commands/present_item.py +7 -5
  48. mima/scripts/commands/screen_fade.py +30 -12
  49. mima/scripts/commands/serial.py +30 -7
  50. mima/scripts/commands/set_spawn_map.py +6 -3
  51. mima/scripts/commands/show_choices.py +16 -7
  52. mima/scripts/commands/show_dialog.py +110 -3
  53. mima/scripts/script_processor.py +41 -20
  54. mima/states/game_state.py +2 -0
  55. mima/states/memory.py +28 -0
  56. mima/states/quest.py +2 -3
  57. mima/types/keys.py +48 -0
  58. mima/types/mode.py +4 -10
  59. mima/types/player.py +9 -0
  60. mima/types/position.py +13 -0
  61. mima/types/tile_collision.py +11 -0
  62. mima/types/window.py +44 -0
  63. mima/usables/item.py +1 -0
  64. mima/util/colors.py +5 -0
  65. mima/util/constants.py +6 -0
  66. mima/util/functions.py +27 -0
  67. mima/util/input_defaults.py +109 -0
  68. mima/util/runtime_config.py +234 -30
  69. mima/util/trading_item.py +20 -0
  70. mima/view/camera.py +160 -19
  71. mima/view/mima_mode.py +612 -0
  72. mima/view/mima_scene.py +225 -0
  73. mima/view/mima_view.py +12 -0
  74. mima/view/mima_window.py +153 -0
  75. {mima_engine-0.1.5.dist-info → mima_engine-0.2.1.dist-info}/METADATA +4 -2
  76. mima_engine-0.2.1.dist-info/RECORD +128 -0
  77. {mima_engine-0.1.5.dist-info → mima_engine-0.2.1.dist-info}/WHEEL +1 -1
  78. mima/view/scene.py +0 -322
  79. mima_engine-0.1.5.dist-info/RECORD +0 -114
  80. {mima_engine-0.1.5.dist-info → mima_engine-0.2.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,225 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Dict, List, Optional
4
+
5
+ from ..types.position import Position
6
+ from ..types.window import Window
7
+ from ..util.colors import BLACK, WHITE
8
+ from ..util.constants import (
9
+ DIALOG_CHARS_PER_LINE,
10
+ DIALOG_HEIGHT,
11
+ DIALOG_N_LINES,
12
+ DIALOG_WIDTH,
13
+ )
14
+ from .camera import Camera
15
+ from .mima_view import MimaView
16
+ from .mima_window import MimaWindow
17
+
18
+ if TYPE_CHECKING:
19
+ from ..objects.dynamic import Dynamic
20
+ from ..types.player import Player
21
+
22
+
23
+ class MimaScene(MimaView):
24
+ def __init__(
25
+ self,
26
+ player: Player,
27
+ position: Position,
28
+ camera_name: Optional[str] = None,
29
+ ) -> None:
30
+ self.window_stack: List[Window] = []
31
+ self.windows: Dict[Window, MimaWindow] = {}
32
+ self._current_window: Optional[MimaWindow] = None
33
+ self.stack_changed = False
34
+ self.skip_draw_ui = False
35
+
36
+ self.player: Player = player
37
+ self._position: Position = position
38
+
39
+ self._camera_name: str = (
40
+ camera_name if camera_name is not None else f"C_{player.name}"
41
+ )
42
+
43
+ self.camera: Camera
44
+ self._dialog_px: float
45
+ self._dialog_py: float
46
+ self._dialog_width: float = DIALOG_WIDTH
47
+ self._dialog_height: float = DIALOG_HEIGHT
48
+ self._dialog_spacing: float = 3 / self.engine.rtc.tile_height
49
+
50
+ self._dialog_text_color = BLACK
51
+ self._dialog_bg_color = WHITE
52
+
53
+ self.update_scene_position(self._position)
54
+
55
+ def update_scene_position(self, position: Position) -> None:
56
+ width = self.engine.backend.render_width / self.engine.rtc.tile_width
57
+ height = (
58
+ self.engine.backend.render_height / self.engine.rtc.tile_height
59
+ )
60
+ # print(f"Starting camera setup: {width}, {height}, {position}")
61
+ if position in (
62
+ Position.LEFT,
63
+ Position.RIGHT,
64
+ Position.TOP_LEFT,
65
+ Position.TOP_RIGHT,
66
+ Position.BOTTOM_LEFT,
67
+ Position.BOTTOM_RIGHT,
68
+ ):
69
+ width /= 2
70
+ self._dialog_px = 1
71
+ else:
72
+ self._dialog_px = width / 2 - self._dialog_width / 2
73
+
74
+ if position in (
75
+ Position.TOP,
76
+ Position.BOTTOM,
77
+ Position.TOP_LEFT,
78
+ Position.TOP_RIGHT,
79
+ Position.BOTTOM_LEFT,
80
+ Position.BOTTOM_RIGHT,
81
+ ):
82
+ height /= 2
83
+ self._dialog_py = height - 4
84
+ else:
85
+ self._dialog_py = height - 4
86
+
87
+ self.camera = Camera(self._camera_name, width, height)
88
+ if position == Position.CENTER:
89
+ # print(f"Camera setup finished: {width}, {height}")
90
+ return
91
+
92
+ if position in (
93
+ Position.RIGHT,
94
+ Position.BOTTOM_RIGHT,
95
+ Position.TOP_RIGHT,
96
+ ):
97
+ self.camera.px = self.engine.backend.render_width / 2
98
+ self.camera.border_left = True
99
+
100
+ if position in (
101
+ Position.BOTTOM,
102
+ Position.BOTTOM_LEFT,
103
+ Position.BOTTOM_RIGHT,
104
+ ):
105
+ self.camera.py = self.engine.backend.render_height / 2
106
+ self.camera.border_top = True
107
+
108
+ if position in (
109
+ Position.LEFT,
110
+ Position.TOP_LEFT,
111
+ Position.BOTTOM_LEFT,
112
+ ):
113
+ self.camera.border_right = True
114
+ self.camera.border_color = BLACK
115
+
116
+ if position in (Position.TOP, Position.TOP_LEFT, Position.TOP_RIGHT):
117
+ self.camera.border_bottom = True
118
+ self.camera.border_color = BLACK
119
+
120
+ def update(
121
+ self,
122
+ elapsed_time: float,
123
+ *,
124
+ target: Optional[Dynamic] = None,
125
+ map_width: int = 0,
126
+ map_height: int = 0,
127
+ ) -> bool:
128
+ self.update_window()
129
+
130
+ self.camera.update(target, map_width, map_height)
131
+ self.update_dialog_position()
132
+
133
+ # print(type(self._current_window))
134
+ return self._current_window.update(elapsed_time, self.camera)
135
+
136
+ def clear_stack(self, windows: Optional[List[Window]] = None):
137
+ self.stack_changed = True
138
+ if windows is not None:
139
+ self.window_stack = windows
140
+ else:
141
+ self.window_stack = []
142
+
143
+ def add_window(self, window: Window):
144
+ self.window_stack.append(window)
145
+ self.stack_changed = True
146
+
147
+ def pop_window(self):
148
+ self.stack_changed = True
149
+ return self.window_stack.pop()
150
+
151
+ def get_window(self) -> MimaWindow:
152
+ return self._current_window
153
+
154
+ def get_next_window_type(self) -> Window:
155
+ return self.window_stack[-1]
156
+
157
+ def get_previous_window_type(self) -> Window:
158
+ return self.window_stack[-2]
159
+
160
+ def handle_user_input(self):
161
+ if self._current_window is None:
162
+ self.update_window()
163
+ self._current_window.handle_user_input(self.player)
164
+
165
+ def draw_map_and_objects(
166
+ self, player, camera, tmap, dynamics, projectiles, effects
167
+ ) -> None:
168
+ self._current_window.draw_map_layers(tmap, [-1, 0])
169
+ self._current_window.draw_objects_y_sorted(
170
+ dynamics + projectiles, [-1, 0, 1, 2]
171
+ )
172
+
173
+ self._current_window.draw_effect_layers(effects, [0])
174
+
175
+ self._current_window.draw_map_layers(tmap, [1, 2])
176
+
177
+ self._current_window.draw_effect_layers(effects, [1, 2, 3, 4])
178
+
179
+ def draw_ui(self):
180
+ if self.skip_draw_ui:
181
+ self.skip_draw_ui = False
182
+ return
183
+ self._current_window.draw_ui()
184
+
185
+ def draw_camera_border(self):
186
+ self.camera.draw_borders()
187
+
188
+ def load_window(self):
189
+ self._current_window.load(
190
+ self.engine.get_view().maps[self.player].name
191
+ )
192
+
193
+ def update_window(self):
194
+ old_window = self._current_window
195
+ self._current_window = self.windows[self.window_stack[-1]]
196
+ self._current_window.set_camera(self.camera)
197
+ self._current_window.set_player(self.player)
198
+
199
+ if self._current_window != old_window or self.stack_changed:
200
+ self.stack_changed = False
201
+ if old_window is not None:
202
+ old_window.on_exit_focus()
203
+
204
+ self._current_window.on_enter_focus()
205
+ self.skip_draw_ui = True
206
+
207
+ def update_dialog_position(self):
208
+ self._dialog_px = (
209
+ self.camera.visible_tiles_ex - self._dialog_width
210
+ ) / 2
211
+ self._dialog_py = (
212
+ self.camera.visible_tiles_ey - self._dialog_height - 1
213
+ )
214
+
215
+ def display_dialog(self, lines):
216
+ self._current_window.display_dialog(
217
+ lines,
218
+ int(self._dialog_px * self.engine.rtc.tile_width),
219
+ int(self._dialog_py * self.engine.rtc.tile_height),
220
+ int(self._dialog_width * self.engine.rtc.tile_width),
221
+ int(self._dialog_height * self.engine.rtc.tile_height),
222
+ int(self._dialog_spacing * self.engine.rtc.tile_height),
223
+ self._dialog_text_color,
224
+ self._dialog_bg_color,
225
+ )
mima/view/mima_view.py ADDED
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from ..engine import MimaEngine
7
+
8
+
9
+ class MimaView:
10
+ """Base class for all view related classes."""
11
+
12
+ engine: MimaEngine
@@ -0,0 +1,153 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any, List, Optional
4
+
5
+ from ..types.direction import Direction
6
+ from ..types.keys import Key as K
7
+ from ..types.player import Player
8
+ from ..types.window import Window
9
+ from ..util.functions import wrap_text
10
+ from .mima_view import MimaView
11
+
12
+ if TYPE_CHECKING:
13
+ from ..maps.tilemap import Tilemap
14
+ from ..objects.dynamic import Dynamic
15
+ from ..util.colors import Color
16
+ from .camera import Camera
17
+ from .mima_mode import MimaMode
18
+ from .mima_scene import MimaScene
19
+
20
+
21
+ class MimaWindow(MimaView):
22
+ def __init__(
23
+ self,
24
+ mode: MimaMode,
25
+ scene: MimaScene,
26
+ wtype: Window = Window.PLACEHOLDER,
27
+ ) -> None:
28
+ self.mode = mode
29
+ self.scene = scene
30
+ self.wtype = wtype
31
+
32
+ self.p_obj: Optional[Dynamic] = None
33
+ self.camera: Optional[Camera] = None
34
+ self.dialog_to_show: List[str] = []
35
+ self.additional_data: Optional[Any] = None
36
+
37
+ def on_enter_focus(self):
38
+ pass
39
+
40
+ def on_exit_focus(self):
41
+ pass
42
+
43
+ def update(self, elapsed_time: float, camera: Camera) -> bool:
44
+ return True
45
+
46
+ def handle_user_input(self, player: Player) -> None:
47
+ self.p_obj.vx = self.p_obj.vy = 0
48
+
49
+ if self.engine.keys.key_held(K.UP, player):
50
+ self.p_obj.vy = -1
51
+ self.p_obj.facing_direction = Direction.NORTH
52
+ if self.engine.keys.key_held(K.DOWN, player):
53
+ self.p_obj.vy = 1
54
+ self.p_obj.facing_direction = Direction.SOUTH
55
+ if self.engine.keys.key_held(K.LEFT, player):
56
+ self.p_obj.vx = -1
57
+ self.p_obj.facing_direction = Direction.WEST
58
+ if self.engine.keys.key_held(K.RIGHT, player):
59
+ self.p_obj.vx = 1
60
+ self.p_obj.facing_direction = Direction.EAST
61
+
62
+ def draw_map_layers(self, tilemap: Tilemap, layers: List[int]) -> None:
63
+ for pos in layers:
64
+ tilemap.draw_self(
65
+ self.camera.ox,
66
+ self.camera.oy,
67
+ self.camera.visible_tiles_sx,
68
+ self.camera.visible_tiles_sy,
69
+ self.camera.visible_tiles_ex,
70
+ self.camera.visible_tiles_ey,
71
+ pos,
72
+ self.camera.name,
73
+ )
74
+
75
+ def draw_objects_y_sorted(
76
+ self, objects: List[Dynamic], layers: Optional[List[int]] = None
77
+ ) -> None:
78
+ layers = layers if layers is not None else list(range(-3, 3))
79
+
80
+ y_sorted = sorted(objects, key=lambda obj: obj.py)
81
+ for layer in layers:
82
+ for obj in y_sorted:
83
+ if self._check_draw_object(obj, layer):
84
+ # print(
85
+ # obj.px,
86
+ # obj.py,
87
+ # obj.name,
88
+ # self._camera.name,
89
+ # self._camera.ox,
90
+ # self._camera.oy,
91
+ # )
92
+ obj.draw_self(
93
+ self.camera.ox, self.camera.oy, self.camera.name
94
+ )
95
+
96
+ def draw_effect_layers(
97
+ self, effects: List[Dynamic], layers: List[int]
98
+ ) -> None:
99
+ for layer in layers:
100
+ for effect in effects:
101
+ if effect.layer == layer:
102
+ effect.draw_self(
103
+ self.camera.ox, self.camera.oy, self.camera.name
104
+ )
105
+
106
+ def _check_draw_object(self, obj, layer) -> bool:
107
+ if obj.redundant or not obj.visible or obj.layer != layer:
108
+ return False
109
+
110
+ return self.check_draw_object(obj, layer)
111
+
112
+ def check_draw_object(self, obj, layer) -> bool:
113
+ """Custom check if object should be drawn."""
114
+ return True
115
+
116
+ def draw_ui(self) -> None:
117
+ pass
118
+
119
+ def set_camera(self, camera: Camera):
120
+ self.camera = camera
121
+
122
+ def set_player(self, player: Player):
123
+ self.p_obj = self.engine.get_player(player)
124
+
125
+ def display_dialog(
126
+ self,
127
+ lines: List[str],
128
+ ppx: int,
129
+ ppy: int,
130
+ pwidth: int,
131
+ pheight: int,
132
+ pspacing: int,
133
+ text_color: Color,
134
+ bg_color: Color,
135
+ ):
136
+ self.engine.backend.fill_rect(
137
+ ppx, ppy, pwidth, pheight, bg_color, self.camera.name
138
+ )
139
+ self.engine.backend.draw_rect(
140
+ ppx, ppy, pwidth, pheight, text_color, self.camera.name
141
+ )
142
+ # print(ppx, ppy, pwidth, pheight, lines)
143
+ for idx, line in enumerate(lines):
144
+ self.engine.backend.draw_big_text(
145
+ line,
146
+ ppx + 4,
147
+ ppy
148
+ + 4
149
+ + idx * pspacing
150
+ + idx * self.engine.rtc.big_font_height,
151
+ text_color,
152
+ self.camera.name,
153
+ )
@@ -1,14 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mima-engine
3
- Version: 0.1.5
3
+ Version: 0.2.1
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"
10
12
  Provides-Extra: pygame
11
- Requires-Dist: pygame-ce ; extra == 'pygame'
13
+ Requires-Dist: pygame; extra == "pygame"
12
14
 
13
15
  # Mima Engine
14
16
 
@@ -0,0 +1,128 @@
1
+ mima/__init__.py,sha256=HfjVOrpTnmZ-xVFCYSVmX50EXaBQeJteUHG-PD6iQs8,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
6
+ mima/backend/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
+ mima/backend/pygame_assets.py,sha256=TdDmKASk1n6whwh4ONxX41kofVS_iXhsdEzCV5l8NeM,11986
8
+ mima/backend/pygame_audio.py,sha256=gag9bM-UT8DfYpGDYvKBn8jdnwgFU4NklEs2aNwHhRY,2365
9
+ mima/backend/pygame_backend.py,sha256=yS_QMkugldd6vzHCoZSF6jtyGp__NkQZbiSiloN4iIs,18470
10
+ mima/backend/pygame_camera.py,sha256=5ietEyhDryT3SBChvcY_jdsWRi09gcTg5O5mvg_15mM,2059
11
+ mima/backend/pygame_events.py,sha256=orxC6a3EtWKWbTMyKO-9MMrcemw8qrN7y3S6DyLyX-0,26677
12
+ mima/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ mima/maps/template.py,sha256=xBIIzf2o6ATHevfZA5b5XP-o6o71-04u7OAS4847buY,1178
14
+ mima/maps/tile.py,sha256=ZIPtpVCrX_dnL8SKwobj_0etMCUrQxRL5d04KnEmwNQ,639
15
+ mima/maps/tile_animation.py,sha256=xoI41BIFd6udW47xHAbfGhuqMVIvAw75vlec1iEhdhE,106
16
+ mima/maps/tile_info.py,sha256=VLAjfPCrLbzTP7p1qk5O3ytc4zFg_52ZyYvAbufC_X8,152
17
+ 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/tileset_info.py,sha256=nJvghbxlxpvYOXaR1A2Joyz3LxPV7usspQcvKM5iyBg,136
21
+ mima/maps/transition_map.py,sha256=B5vrEkDXiEDIR7rjtJfwM8WngLztDnfoni-vEPNfG8U,4909
22
+ mima/maps/tiled/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ mima/maps/tiled/tiled_layer.py,sha256=JpSoxHGYf-g4fjGcU8J8z3M9RaSvuBd1VHIp9joZy4A,1572
24
+ mima/maps/tiled/tiled_map.py,sha256=eqtgqfxwBA5zEd4Kh4L1uSsaUHYZATNOmBrtpGYas9I,2968
25
+ mima/maps/tiled/tiled_object.py,sha256=ubfvPY2VSfy7tOhakHbfBbD4wa6X3fpSJ8ugGUzvGuI,2782
26
+ mima/maps/tiled/tiled_objectgroup.py,sha256=CDaxhpj65v-jKGdIHbN80VBfd6GbEfALgJnB5cdcKUU,588
27
+ mima/maps/tiled/tiled_template.py,sha256=02JlfGitkorSFztDQ4BrLx7ZnWRctJgV7azK5cGvTNE,1498
28
+ mima/maps/tiled/tiled_tile.py,sha256=CMh0W7KweqP_WZUbcgcYT3xis8hOECBlzaVtRKTYLX8,3172
29
+ mima/maps/tiled/tiled_tileset.py,sha256=UuzyF5bSfZcfmnxC4Fu4FCLrmoPADCVGY-sUQP8eVfM,1437
30
+ mima/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ mima/objects/animated_sprite.py,sha256=RMhd8iALN-CdnmLDS0-WSy0Z0Gie8f2BlZ0nUMFSiA0,6784
32
+ mima/objects/attribute_effect.py,sha256=zikOSb6-hD6Ecm4L9EyRocTyJQ7IYC0CJ9DCBxbK4cU,650
33
+ 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
39
+ mima/objects/effects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ mima/objects/effects/colorize_screen.py,sha256=qTd9X_xU3PK25bP_Zn61T-bS6xC4O3ATRDPnZrzq5gA,1702
41
+ 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
46
+ mima/objects/world/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ mima/objects/world/color_gate.py,sha256=JPV5tApbHWYFQtdxWd-slCZodw6ucFvkEMT698lEigs,2029
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=ZUMQ9R25twyt75ao7Te7j1LaZIiAVdpruaEgiK3iweI,5774
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
59
+ mima/scripts/__init__.py,sha256=yLRT6igjwtSkOFbd0x8PXXFZVt1_xUIuCHhWhywHRuE,75
60
+ mima/scripts/command.py,sha256=rLjUbmvmpHqhaznt9TWkifY5IKtO-AdAGkzKnoKqAGg,881
61
+ mima/scripts/script_processor.py,sha256=IPl6oFlVAnZ2uibc9X4ffyTNwpendk4cMGZMvZDObjc,2072
62
+ mima/scripts/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ mima/scripts/commands/add_quest.py,sha256=r5eCLgAarLJmtMROxLqMTryK5Bfv9wUSqsC8p0RHVkU,387
64
+ mima/scripts/commands/change_map.py,sha256=I1_sr3iDmXDzupbZIIyt6GkkNq2rv3OF8aB3QqWStno,981
65
+ mima/scripts/commands/close_dialog.py,sha256=-yWyEtYA41RsehJ4c-zIXhxIhR25e8GTWN20GuTnT80,207
66
+ mima/scripts/commands/equip_weapon.py,sha256=pKx_i-b48EbrUu0-Ak65W_VH40IuQj_2SfazY-kKztQ,636
67
+ mima/scripts/commands/give_item.py,sha256=yc6iRTy40TvdEqU6u3q4Bh0JAlHzoFs0ul9Lwt5DQ3c,688
68
+ mima/scripts/commands/give_resource.py,sha256=J9c0hk__DY4To1BStZ5qmcEOMbAYRefNJT8Kk5WyORE,1805
69
+ mima/scripts/commands/move_map.py,sha256=NY0LDex2_lcXz-6HR58eTYC4VQkiOvywxUQ5IdSY0iw,4907
70
+ mima/scripts/commands/move_to.py,sha256=FE2efowCpMp5QgDBvIlGju4T0xfa9N1UwjaE2yh3v4Q,1420
71
+ mima/scripts/commands/oneway_move.py,sha256=1mytQxv6kiSGr_-H7m-DQPKbFKfT2T45i99Ro764vE4,1683
72
+ mima/scripts/commands/parallel.py,sha256=YFDDv6Lgc6uKvr_53II6YUznnlnW8JNhmlWK5FMwDSw,1780
73
+ mima/scripts/commands/play_sound.py,sha256=m4wqWC6O8TUsJIcYrP8bb8ZFjSNK3IpAyBdxLo-e8zo,348
74
+ mima/scripts/commands/present_item.py,sha256=7kYfoT4e6LtmMlwXX66vBZ6o8jBAAJR8QunwYxLAb-Q,1780
75
+ mima/scripts/commands/progress_quest.py,sha256=-Nm7basBFdnixKwf42Xrs6iDROx22WGIDHpAZ0itpGU,359
76
+ mima/scripts/commands/quit_game.py,sha256=BmLlh45K46Mx57j1dE2wWhmmmcb0Y-X5mLrFV1HIfhI,219
77
+ mima/scripts/commands/save_game.py,sha256=yhmXIpnhD89otDmltE7mucdEozHc0LfRSZCSZZO915c,392
78
+ mima/scripts/commands/screen_fade.py,sha256=rcdH44ANsaQa_wLMTj7mdzc4Dy9ZzjAQLNMWAcmFh34,2290
79
+ mima/scripts/commands/serial.py,sha256=AI8h2r5nF9B7H6gpiI3J3ewvpF9p0thsYpnKecXWfP8,2223
80
+ mima/scripts/commands/set_facing_direction.py,sha256=M_AFJQWgd0nYG7ZPq6BBOmjF4n0jcnBdvyxLboucjZk,567
81
+ mima/scripts/commands/set_spawn_map.py,sha256=OstfyoHyKVLmXZmP4pwCQT1GjxhC8yr7cwWcBAuODNc,531
82
+ mima/scripts/commands/show_choices.py,sha256=6DwlhmXMcAgMyVmzwvUoQKEmIu2ynO1VmiAjPvbuy2A,1737
83
+ mima/scripts/commands/show_dialog.py,sha256=xKlve5O03IlBvg87zfyDczWT7IlaMRPfsl2Y9hxabVE,3948
84
+ mima/scripts/commands/take_coins.py,sha256=37jChQBQKFaIBx6-Bvx3xNPlqSq87pvnMtnSWQWU1iI,573
85
+ mima/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
+ mima/states/game_state.py,sha256=ZWOEy7EtKT1mj9yOfpelKZCJaS4aZS7PJ6Uz49NllhM,5112
87
+ mima/states/memory.py,sha256=js8sqKDcq8xPw8oB6j4GICXWeNsoqj_rueSe3jRS0-A,1020
88
+ mima/states/quest.py,sha256=sF1IhVa0QcwSoHrl8hiCG-j6UlE51UrLbq--a8Rvu4k,2380
89
+ mima/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
+ mima/types/alignment.py,sha256=Oz5nhU2MXClOZyKX47A3wyajyD2HG0DWK3-41uBhnv4,89
91
+ mima/types/blend.py,sha256=0zhU2QjlajZDh3-tvmUCP_gMQsvr_eZPOZ9dqbk3LLU,96
92
+ mima/types/damage.py,sha256=8AgvwiNgcENXwc0v0VCuxxA1w45huSTQdR6S1RW4yj8,584
93
+ mima/types/direction.py,sha256=P7EqLZFacMjf8BmQmgNFlXutKtYxlJ6U5ha3JPyFwjI,1116
94
+ mima/types/gate_color.py,sha256=Mby5_s4EoTIrEZ92gKLBAG9vymF3207RK93EfqGtLuk,86
95
+ mima/types/graphic_state.py,sha256=6pUumsqyvPIVIJrOH4TRfgrHWDlTkNYU1g6Joc9Cx_U,308
96
+ mima/types/keys.py,sha256=OP4P4gsGRbN242CRzuYmzlYC1JnNlZU41p1Z3yLUQz4,935
97
+ mima/types/mode.py,sha256=sxq6ZLKAswrHjnxeIB4AZFfiboFeT-Vh2l0Wcdy-r-Q,120
98
+ mima/types/nature.py,sha256=4tANHg4mzN8O57B-pr0jafikCZkqB83r-pJpDG4CnAw,159
99
+ mima/types/object.py,sha256=D21AAm-GCtxQQM0n741T17MeQPVsVSOHQFtC84VGZoQ,377
100
+ mima/types/player.py,sha256=YQanpSfR6Y46Fqu4Hj67NgVJcpEn5O5v2rdGZEzq3GQ,99
101
+ mima/types/position.py,sha256=yBZvHcIJ89mbY-4yVpsu0psZFP-D1vV12bBzMHkaULM,185
102
+ mima/types/start.py,sha256=maeU5GQ9tE8q28vrA7aBGWqmi6mPW4aZTC_Qh7R_zp0,80
103
+ mima/types/terrain.py,sha256=vMITb4PnoEMAWc8VF-g7NeQ5453yLM93q9dcF_5RSfI,130
104
+ mima/types/tile_collision.py,sha256=2O_IfJV1lCtfItjyu3dtm2UY7_JNwCSk9q0JXrQaGmk,152
105
+ mima/types/weapon_slot.py,sha256=kX5mYKgrgn-CcJ-gUzfvTGOVoxLllPRQ92sRjWYoqCg,87
106
+ mima/types/window.py,sha256=ZdknCL1lvlQDbr-eVXlXObQ_BsZ6PF7cxMGQguhmV44,890
107
+ 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/util/__init__.py,sha256=KMuEDnRsGr32gXED12ZyL1za6iKAuk_Tn8S3mTtpYds,42
111
+ mima/util/colors.py,sha256=u4YVTCvSNFBhHaR9dFiMVzvE9fRM1UlW1m8gDa7oDY4,1483
112
+ mima/util/constants.py,sha256=Sy-6vwAXJf86drHy7IxQLDXtuBbcGhuNU0-YKTUNBFM,1353
113
+ mima/util/functions.py,sha256=GqAgT4-ATZcCvaaUyEOCeXphUu8xJXmVshAbFPJfOWI,1130
114
+ mima/util/input_defaults.py,sha256=6S9YlXqtvA5Q1yAFqwicyorCXcy5FEhi3AlyzqpUxAc,2641
115
+ mima/util/logging.py,sha256=p6-C1ozlCs_sCkmykh_B0NgZtvSkcZXXseE6qA6Zwew,1197
116
+ 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/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
+ mima/view/camera.py,sha256=IZQJF7NxrQ265TRgPnlmSVcNwgsJ3I1ek40u7PQG20g,6260
121
+ mima/view/mima_mode.py,sha256=fFOcjJzaFK-3OIyqW8nTynKFVNYJcNWOF8hJe2B-t5s,21981
122
+ mima/view/mima_scene.py,sha256=oGfyM-WLN-eQLILnIbzI0sa160BqsS8dE2UaC2qq2XY,6988
123
+ mima/view/mima_view.py,sha256=tKLcoNWVwldoqgG3jxhI_jMsFAXzod2csXyEbhub2xI,217
124
+ mima/view/mima_window.py,sha256=LllwqhKo1D-MoNAXJaiufTi0AacRo_QnVZX8WYUH4ds,4790
125
+ mima_engine-0.2.1.dist-info/METADATA,sha256=hR9LUxy9kL4esvBTkEJK9uDhbFtIkK6WbXqNksr3PG4,487
126
+ mima_engine-0.2.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
127
+ mima_engine-0.2.1.dist-info/top_level.txt,sha256=5t1cOdQSaPQ0jWDhKDvDXwpV2XZ_a1GSSFAIvEsG0fQ,5
128
+ mima_engine-0.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5