diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bee8a64
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+__pycache__
diff --git a/data/map.tmx b/data/map.tmx
new file mode 100644
index 0000000..e776a35
--- /dev/null
+++ b/data/map.tmx
@@ -0,0 +1,72 @@
+
+
diff --git a/data/nj0.tiled-project b/data/nj0.tiled-project
new file mode 100644
index 0000000..d0eb592
--- /dev/null
+++ b/data/nj0.tiled-project
@@ -0,0 +1,14 @@
+{
+ "automappingRulesFile": "",
+ "commands": [
+ ],
+ "compatibilityVersion": 1100,
+ "extensionsPath": "extensions",
+ "folders": [
+ "."
+ ],
+ "properties": [
+ ],
+ "propertyTypes": [
+ ]
+}
diff --git a/data/nj0.tiled-session b/data/nj0.tiled-session
new file mode 100644
index 0000000..5f0ea66
--- /dev/null
+++ b/data/nj0.tiled-session
@@ -0,0 +1,21 @@
+{
+ "Map/SizeTest": {
+ "height": 4300,
+ "width": 2
+ },
+ "activeFile": "",
+ "expandedProjectPaths": [
+ ],
+ "fileStates": {
+ },
+ "last.imagePath": "/home/bog/NightJam/nj0/data",
+ "map.height": 64,
+ "map.lastUsedFormat": "tmx",
+ "map.width": 64,
+ "openFiles": [
+ ],
+ "project": "nj0.tiled-project",
+ "recentFiles": [
+ ],
+ "tileset.lastUsedFormat": "tsx"
+}
diff --git a/data/tilemap.ase b/data/tilemap.ase
new file mode 100644
index 0000000..efc8af5
Binary files /dev/null and b/data/tilemap.ase differ
diff --git a/data/tilemap.png b/data/tilemap.png
new file mode 100644
index 0000000..6a79ea4
Binary files /dev/null and b/data/tilemap.png differ
diff --git a/data/tilemap.tsx b/data/tilemap.tsx
new file mode 100644
index 0000000..a8ee589
--- /dev/null
+++ b/data/tilemap.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/gui/app.py b/gui/app.py
new file mode 100644
index 0000000..602d63b
--- /dev/null
+++ b/gui/app.py
@@ -0,0 +1,52 @@
+from . import map
+import pygame as pg
+import numpy as np
+
+class App:
+ def __init__(self, world):
+ pg.init()
+ self.screen = pg.display.set_mode((800, 600))
+ self.clock = pg.time.Clock()
+ self.running = True
+ self.world = world
+ self.map = map.Map(self.world)
+
+ def start(self):
+ dt = 0.0
+
+ while self.running:
+ start = pg.time.get_ticks()
+
+ for event in pg.event.get():
+ if event.type == pg.QUIT:
+ self.running = False
+
+ # EVENTS
+ # ======
+ keys = pg.key.get_pressed()
+ delta = np.array([0.0, 0.0])
+
+ if keys[pg.K_UP]:
+ delta[1] -= 1.0
+ if keys[pg.K_DOWN]:
+ delta[1] += 1.0
+ if keys[pg.K_LEFT]:
+ delta[0] -= 1.0
+ if keys[pg.K_RIGHT]:
+ delta[0] += 1.0
+
+ player = self.world.get_player()
+ norm = np.linalg.norm(delta)
+ if norm > 0:
+ delta /= norm
+ delta *= player.speed
+ player.pos += delta * dt
+
+ self.screen.fill('black')
+ self.map.draw(self.screen)
+ pg.display.flip()
+ self.clock.tick(60)
+ dt = (pg.time.get_ticks() - start)/1000.0
+ pg.quit()
+
+
diff --git a/gui/map.py b/gui/map.py
new file mode 100644
index 0000000..73da6f7
--- /dev/null
+++ b/gui/map.py
@@ -0,0 +1,40 @@
+import pygame as pg
+import numpy as np
+import xml.etree.ElementTree as ET
+
+class Map:
+ def __init__(self, world):
+ self.world = world
+ self.cam = np.array([0.0, 0.0])
+ self.data = self.load()
+ self.tileset = pg.image.load('data/tilemap.png')
+
+ def draw(self, screen):
+ # MAP
+ for i in range(0, 64):
+ for j in range(0, 64):
+ k = i * 64 + j
+ index = int(self.data[k]) - 1
+ self.draw_tile(screen, (j*32, i*32), index)
+
+ # PLAYER
+ player = self.world.get_player()
+ self.cam = (player.pos[0] - screen.get_width()/2,
+ player.pos[1] - screen.get_height()/2)
+
+ pg.draw.rect(screen, 'white', (
+ player.pos[0] - player.size[0]/2.0 - self.cam[0],
+ player.pos[1] - player.size[1]/2.0 - self.cam[1],
+ player.size[0],
+ player.size[1]
+ ))
+
+ def draw_tile(self, screen, pos, index):
+ p = (pos[0] - self.cam[0], pos[1] - self.cam[1])
+ screen.blit(self.tileset, p, (index * 32, 0, 32, 32))
+
+ def load(self):
+ tree = ET.parse('data/map.tmx')
+ root = tree.getroot()
+ csv = root[1][0]
+ return csv.text.split(',')
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..b934719
--- /dev/null
+++ b/main.py
@@ -0,0 +1,7 @@
+from model import world
+from gui import app
+
+if __name__ == '__main__':
+ world = world.World()
+ application = app.App(world)
+ application.start()
diff --git a/model/player.py b/model/player.py
new file mode 100644
index 0000000..9465db2
--- /dev/null
+++ b/model/player.py
@@ -0,0 +1,10 @@
+import numpy as np
+
+class Player:
+ def __init__(self):
+ self.life = 100
+ self.mental = 100
+ self.mana = 100
+ self.pos = np.array([64.0, 64.0])
+ self.size = np.array([32.0, 32.0])
+ self.speed = 192.0
diff --git a/model/world.py b/model/world.py
new file mode 100644
index 0000000..4dfdcb3
--- /dev/null
+++ b/model/world.py
@@ -0,0 +1,8 @@
+from . import player
+
+class World:
+ def __init__(self):
+ self.player = player.Player()
+
+ def get_player(self):
+ return self.player
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..9c846b2
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+numpy==1.26.4
+pygame==2.5.2