aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rwxr-xr-xplugins/imager.py40
2 files changed, 41 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 019579b..90e856e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
*.sim
*.auto
*.exe
+bin/*.png
diff --git a/plugins/imager.py b/plugins/imager.py
new file mode 100755
index 0000000..7c26092
--- /dev/null
+++ b/plugins/imager.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python3
+"""
+This script generates an PNG image from a SALIS save file (or a list of saved
+files), on which each pixel corresponds to a single byte on the simulation.
+It's useful for identifying large scale structures and appreciating the
+large-scale evolution of the world.
+
+Tu run it, simply call it from within the ./bin/ directory inside the SALIS
+main directory, such as:
+
+../plugins/imager.py def.sim.*
+
+Calling this will create a PNG image for each file beggining with "def.sim".
+"""
+import sys
+from ctypes import *
+from PIL import Image
+files = sys.argv[1:]
+salis = CDLL("libsalis.so")
+salis.sm_getSize.restype = c_uint
+
+def makeImage(iname):
+ salis.s_load(bytes(iname, "utf-8"))
+ lsize = int(salis.sm_getSize() ** 0.5)
+ image = Image.new("RGB", (lsize, lsize), "black")
+ pixels = image.load()
+
+ for y in range(lsize):
+ for x in range(lsize):
+ addr = (y * lsize) + x
+ byte = salis.sm_getByteAt(addr)
+ pixels[x, y] = (byte // 4, byte // 2, byte)
+
+ salis.s_quit()
+ oname = iname + ".png"
+ image.save(oname)
+ print(oname + " generated")
+
+for f in files:
+ makeImage(f)