summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--site/content/software/cem.typ30
-rw-r--r--site/content/software/minitrem.typ68
-rw-r--r--site/content/software/ray.typ38
-rw-r--r--site/content/software/schachtmeister2.typ (renamed from site/content/schachtmeister2.typ)0
-rw-r--r--static/software/cem_grating.jpgbin0 -> 55306 bytes
-rw-r--r--static/software/cem_presentation.jpgbin0 -> 516896 bytes
-rw-r--r--static/software/minitrem.jpgbin0 -> 147462 bytes
-rw-r--r--static/software/minitrem_aliens.jpgbin0 -> 16831 bytes
-rw-r--r--static/software/minitrem_crystals.jpgbin0 -> 28189 bytes
-rw-r--r--static/software/minitrem_humans.jpgbin0 -> 46844 bytes
-rw-r--r--static/software/rrt_1.jpgbin0 -> 569532 bytes
-rw-r--r--static/software/rrt_2.jpgbin0 -> 341066 bytes
12 files changed, 136 insertions, 0 deletions
diff --git a/site/content/software/cem.typ b/site/content/software/cem.typ
new file mode 100644
index 0000000..1754553
--- /dev/null
+++ b/site/content/software/cem.typ
@@ -0,0 +1,30 @@
+#import "/common.typ": post, static, img, link-self
+
+#show: post.with(
+ title: "cem",
+ date: datetime(year: 2020, month: 8, day: 15),
+)
+
+#figure(
+ img(static("software/cem_grating.jpg")),
+ caption: [Diffraction on a periodic grating],
+)
+
+Cem is a simple C implementation of the finite-difference time-domain method for solving Maxwell's equations. It can simulate and visualize a number of wave phenomena like diffraction or refraction.
+
+= Background
+
+#figure(
+ img(static("software/cem_presentation.jpg")),
+ caption: [Me presenting at the contest. The text on the slide is a short description of FDTD. #link("http://www.lo10.wroc.pl/pl/gala-finalowa-xii-edycji-otwartego-miedzyszkolnego-konkursu-fizycznego-im-bozeny-koronkiewicz.html")[Source]],
+)
+
+Written two years after #link-self("software/ray")[ray], cem got me the first place in the 12th edition of the "Open Interschool Physics Contest" in 2015. The thing about this project I'm most proud of is how quickly I completed it. It took me only two weeks to go from having never heard of FDTD to the finished program.
+
+= Compiling and running
+
+The source code is available at #link("https://redman.xyz/git/cem")[cem]. While considerably more well-written than ray and even has a Makefile, your mileage may vary.
+
+This is yet another program of mine with an arcane interface. The window displays a cross-section of the (cuboidal) simulation domain. Use the mouse to look around. Keys 1 through 3 switch between orthogonal cross-section planes. Keys 4 through 6 switch between different fields: the electric field, the magnetic field and relative permittivity. F3 opens a new window, so you can look at what's going on from different points of view.
+
+Press return to open the command line. Try "load omkf/1.sim" or the other, bundled files. You can figure out the rest of the commands by looking at the .sim files. Press P and O to start and pause the simulation and press L to take a single step.
diff --git a/site/content/software/minitrem.typ b/site/content/software/minitrem.typ
new file mode 100644
index 0000000..9c1c488
--- /dev/null
+++ b/site/content/software/minitrem.typ
@@ -0,0 +1,68 @@
+#import "/common.typ": post, static, img
+
+#show: post.with(
+ title: "Minitrem",
+ date: datetime(year: 2022, month: 4, day: 15),
+)
+
+#figure(
+ img(static("software/minitrem.jpg")),
+ caption: [A screenshot of the game, #link("https://www.youtube.com/watch?v=Hkt2JXWH4sw")[watch the video].],
+)
+
+Minitrem is a 2D real-time strategy game with an infinite, procedurally-generated world. The overall theme is loosely based on Tremulous. The game is written in C++, using #link("https://www.sfml-dev.org/")[SFML] for graphics and sound. Most of the assets were also made by me.
+
+= Background
+
+Minitrem started in 2017 as a project for an "intro to C++" class at my University. I kept developing it until I eventually lost interest.
+
+= Compiling
+
+The source code is available at #link("https://redman.xyz/git/minitrem/")[minitrem]. Make sure you have a C++14 compiler and SFML installed and run the Makefile. It should even work on Windows and OS X, your mileage may vary.
+
+= How to play
+
+#figure(
+ img(static("software/minitrem_crystals.jpg")),
+ caption: [Some Crystals in a cave.],
+)
+
+The objective of the game is to collect crystals and expand the number of your units. After starting the game, you have to place the first teleporter. Find a suitable spot (away from enemies), hold the right mouse button and select placing the teleporter from the context menu. Use the left mouse button to select the newly-placed building and use the context menu to hire a Scientist and a Soldier. This consumes Crystals, the currency in the game, displayed in the top left corner. Make sure no one is standing on the Teleporter when units are teleported. You can move selected units from the context menu.
+
+== Scientists
+
+#figure(
+ img(static("software/minitrem_humans.jpg")),
+ caption: [The two buildables: a Teleporter and a Replicator and the three unit types: a Scientist, a Builder and a Soldier.],
+)
+
+Scientists walk quickly and can collect crystals from the world. Losing the last scientist while having not enough crystals or a teleporter to hire a new one is a game over scenario. You must take good care of them as they explode upon death, usually taking everything and everyone around with them.
+
+== Soldiers
+
+Soldiers, equipped with pump-action shotguns, fire at Spiders and Nests in range. Their ammunition is finite and will eventually need replenishing using a Replicator. You can order Soldiers to fire at a specific point using the context menu. Soldiers can also throw grenades, which deal a lot of area damage.
+
+== Builders
+
+Builders can build new Teleporters and Replicators and repair damaged buildings. To build something, stand close to the desired location and use the context menu.
+
+== Replicators
+
+Replicators spend crystals on creating shotgun ammunition and grenades. Select a Replicator and use the context menu to "replicate shells" or "replicate grenades." Once there's ammunition in the Replicator, visualized on the building's card in the lower right corner, approach it with a Soldier. Then use the Soldier's context menu to "restock shells" or "restock grenades".
+
+== Aliens
+
+#figure(
+ img(static("software/minitrem_aliens.jpg")),
+ caption: [A few Spiders near a Nest.],
+)
+
+Aliens are the enemies of the game. Spiders attack by approaching a human and biting him to death. They spawn randomly all over the map. Spiders are sensitive to sound and will react to gunfire and explosions from a large distance.
+
+Nests continuously spawn new Spiders and must be destroyed for an area to become safe. Use grenades to quickly take out Nests and all nearby Spiders.
+
+= The world
+
+Arguably the most interesting thing about this game is the infinite world. You can scroll as much as you want in any direction and the game will generate new chunks as needed.
+
+The game uses a sleep/wake system for objects, similarly to physics engines. Objects actively participate in the game only if they've been woken up and go to sleep if nothing's happening. This way there can be huge numbers of Nests and Spiders in the game, but because only a few are active at a time (those with human activity nearby), the cost is negligible.
diff --git a/site/content/software/ray.typ b/site/content/software/ray.typ
new file mode 100644
index 0000000..df64659
--- /dev/null
+++ b/site/content/software/ray.typ
@@ -0,0 +1,38 @@
+#import "/common.typ": post, static, img, link-self
+
+#show: post.with(
+ title: "ray",
+ date: datetime(year: 2020, month: 8, day: 15),
+)
+
+#figure(
+ img(static("software/rrt_1.jpg")),
+ caption: [A render of the bundled scene (gamma corrected).],
+)
+
+Ray is a multi-threaded, real-time #link("https://en.wikipedia.org/wiki/Path_tracing")[path tracer], written in C. Paths are traced through an octree, which can be edited at run-time, giving it sort of an "early Minecraft prototype" feel. Being my first "serious" program, it's rather primitive and can't work with complicated geometry or surface models.
+
+= Background
+
+#figure(
+ img(static("software/rrt_2.jpg")),
+ caption: [A render of a default random octree (gamma corrected).],
+)
+
+I wrote the program as a part of my presentation titled "A physically accurate computer light model" for the finale of the 10th edition of the "Open Interschool Physics Contest" in 2013. I didn't win as there was way too much programming and too little physics involved. I wasn't great at presenting back then either. Nevertheless this was the first step toward choosing Optics as my field of study. And I did much better two years later with #link-self("software/cem")[cem].
+
+= Compiling and running
+
+The source code is available here at #link("https://redman.xyz/git/ray")[ray]. Because this is a very old program, written back when I wasn't too experienced, compiling and running it can be a bit of a challenge. You'll probably have to figure it out yourself.
+
+At start the program loads a world from "world" in the working directory. If it's not present, it'll generate a fractal-looking random octree. The repository includes a weird Pripyat-looking scene. Sometimes camera physics bug out, removing the world fixes the issue.
+
+The controls are listed below.
+- Use the mouse to look around, WASD to move around, space to fly up, C to fly down.
+- *F1 releases/locks the cursor.*
+- The mouse wheel adjusts the focal length (zoom level).
+- Left and right mouse buttons destroy and place blocks, respectively.
+- Keys Z, X, R, T, Y and U select the block type to place. In order: concrete, dirt, metal, mirror, light and banner.
+- Keys 1 through 7 change the render quality (7 being the best).
+- Press Q to launch a bouncy light source, F to toggle the flashlight.
+- F11 renders to "offline.bmp" at a much higher resolution.
diff --git a/site/content/schachtmeister2.typ b/site/content/software/schachtmeister2.typ
index f000360..f000360 100644
--- a/site/content/schachtmeister2.typ
+++ b/site/content/software/schachtmeister2.typ
diff --git a/static/software/cem_grating.jpg b/static/software/cem_grating.jpg
new file mode 100644
index 0000000..71075ad
--- /dev/null
+++ b/static/software/cem_grating.jpg
Binary files differ
diff --git a/static/software/cem_presentation.jpg b/static/software/cem_presentation.jpg
new file mode 100644
index 0000000..b42e429
--- /dev/null
+++ b/static/software/cem_presentation.jpg
Binary files differ
diff --git a/static/software/minitrem.jpg b/static/software/minitrem.jpg
new file mode 100644
index 0000000..baf93ce
--- /dev/null
+++ b/static/software/minitrem.jpg
Binary files differ
diff --git a/static/software/minitrem_aliens.jpg b/static/software/minitrem_aliens.jpg
new file mode 100644
index 0000000..2c0a783
--- /dev/null
+++ b/static/software/minitrem_aliens.jpg
Binary files differ
diff --git a/static/software/minitrem_crystals.jpg b/static/software/minitrem_crystals.jpg
new file mode 100644
index 0000000..80f6927
--- /dev/null
+++ b/static/software/minitrem_crystals.jpg
Binary files differ
diff --git a/static/software/minitrem_humans.jpg b/static/software/minitrem_humans.jpg
new file mode 100644
index 0000000..9ed163e
--- /dev/null
+++ b/static/software/minitrem_humans.jpg
Binary files differ
diff --git a/static/software/rrt_1.jpg b/static/software/rrt_1.jpg
new file mode 100644
index 0000000..bd643fb
--- /dev/null
+++ b/static/software/rrt_1.jpg
Binary files differ
diff --git a/static/software/rrt_2.jpg b/static/software/rrt_2.jpg
new file mode 100644
index 0000000..3c8e552
--- /dev/null
+++ b/static/software/rrt_2.jpg
Binary files differ