wanieru about
Hi, I'm wanieru ๐๏ธ
>=================<
I make games and software.
Here's some of the projects I've made.
If you want to contact me, feel free to reach out:
[email protected].
>==========<
A web-based read-only reddit front-end for desktop and mobile with PWA-support.
>==========<
๐๏ธ websites
Golang Ftp Server Contribution nov 2022 # >==========<
I made a contribution to an open-source FTP Server written in Go, by
flcairamb.
The original version of the software required you to configure each FTP User by saving their plain-text password in a config file on the server.
My contribution made it possible to save hashed passwords in the config instead, as well as adding an option for the FTP server to detect unhashed password in the config file and automatically hash them.
>==========<
๐งโ๐ป๏ธ dev
>==========<
Billshare lets you create a room and easily share expenses, and track who owes what.
>==========<
๐๏ธ websites
>==========<
tsch - TypeScript x JSON Schema library
>==========<
๐งโ๐ป๏ธ dev
Whodunnit Today jun 2022 # >==========<
In this logic-based murder mystery game, you have to help Officer Numskol solve a new murder every day, by looking at the evidence, and pointing out contradictions in his reasoning.
This game was an adventure for me to use the Wave Function Collapse algorithm to generate a logic puzzle with language-based clues, and I think it turned out well. Give it a try!
>==========<
๐ฎ๏ธ games
>==========<
Trapped in darkness, only the Lightbringer's claps of light can help her find her way out. Help her escape by solving the puzzles blocking the way out and light up your surroundings. But be careful, your light might attract what's hiding in the dark...
>==========<
Main Programming:
wanieru,
Levi Moore Music & Programming:
Camilla Vallentin >==========<
๐งช๏ธ game-jams โญ๏ธ featured ๐๏ธ portfolio
>==========<
I use the tool "git-ftp" all the time, and this script adds a bit of extra functionality to it, such as configuring servers to share between multiple repositories, and pointing different branches to different locations on a server.
>==========<
๐งโ๐ป๏ธ dev
>==========<
Jormun Sync (from Jรถrmungandr) is a framework which handles data storage and synchronization for web apps.
>==========<
๐งโ๐ป๏ธ dev
Card Club Classics aug 2021 # >==========<
Your favorite card games vs. CPU players without ads! Hearts, Skat and many more.
(Turn on JavaScript to see more images)
>==========<
>==========<
๐ฑ๏ธ apps โญ๏ธ featured ๐๏ธ portfolio
Call-Ace Whist may 2021 # >==========<
In this game, you play the Danish Whist variant "Call-Ace Whist" against 3 computers.
>==========<
Music: Antti Luode
>==========<
๐ฎ๏ธ games โญ๏ธ featured
Forcing an AI to play my favorite card game forever may 2021 # >==========<
>==========<
๐๏ธ videos โญ๏ธ featured
nordvpn-openvpn.sh apr 2021 # >==========<
This script makes it easy to use NordVPN with OpenVPN. It's a bash script to download nordvpn configs, authenticating and connecting/disconnecting from recommended servers.
>==========<
๐งโ๐ป๏ธ dev
Realm of the Mad Lad jan 2021 # >==========<
Explore a world controlled by the fearsome overlord The Mad Lad. Defeat his minions, earn gold and trade with the locals in this simple, but fun MMORPG.
This game was created as part of my Bachelor's Degree in Software Development. In its entirety, the MMORPG consisted of many small scalable units, such as a login server, chat server, realm manager service, many realm instances and others.
Now that the project is over, I wanted to create a version that was easy for anyone to play - so this version only requires one instance of the server, which clients can connect to.
To host it, download the server build for Windows, or use the docker-compose file below.
{
"version": "3.8",
"services": {
"rotml": {
"container_name": "rotml",
"image": "frostbandit/rotml",
"ports": [
"12537:12537/udp",
"12537:12537/tcp"
],
"volumes": [
"./authentication:/app/authentication",
"./storage:/app/storage",
"./crashlogs:/app/crashlogs"
],
"restart": "unless-stopped"
}
}
}
>==========<
>==========<
๐ฎ๏ธ games โญ๏ธ featured ๐๏ธ portfolio
Binary Rank / The Fastest Way To Rank Anything may 2020 # >==========<
How would you go about producing an exact ranking list of 10 paintings? Or maybe even 400 marbles? Binary Search is there to help, and I've made a website to make it easy.
>==========<
๐๏ธ videos โญ๏ธ featured ๐๏ธ websites
>==========<
In "A Fox Tale" you embark on a short journey from the rainy island shore at the foot of the mountain to the frozen top. Solve puzzles and discover mysterious runes while you take in the scenery on the island.
This game was made as a project to learn about shaders in Unity, so making a game that looked nice was our top priority for this. The game takes about 10 minutes to complete and the main mechanic is walking around and exploring your surroundings.
>==========<
>==========<
๐ฎ๏ธ games โญ๏ธ featured ๐๏ธ portfolio
Explaining randomness to a Play Store reviewer feb 2020 # >==========<
I discuss the Gambler's Fallacy based on a Play Store review I got, claiming my card shuffling isn't random enough.
In retrospect, the reviewer may have meant it was a single game where he dealt three rows. In that case, the reviewer's observations about the game's randomness are even more ludicrous, as it's based on a single sample.
>==========<
๐๏ธ videos โญ๏ธ featured
How I made a clone of libraryofbabel.info nov 2019 # >==========<
I discuss the Library of Babel short story by Jorge Luis Borges. I explain how Jonathan Basile's libraryofbabel.info is made (probably), and talk about how to use encryption to make a clone website.
>==========<
๐๏ธ videos โญ๏ธ featured
>==========<
Running Out is a game about sustaining your phone battery while trying to find the train station.
In an unknown city, with only 2 minutes before your train departs, you have to use your phone to navigate to the train station. But your phone is running low, and if it dies, you can't show your train ticket to the conductor. Take quick peaks at your map, and try not to get distracted by your many fun apps.
>==========<
Graphics & Game Design:
Stine Lund Additional Assets:
Kenney Sound Effects: knufds2, tack00, benzix2, GameAudio
>==========<
๐งช๏ธ game-jams โญ๏ธ featured ๐๏ธ portfolio
Simply Solitaire jul 2019 # >==========<
Play all your favorite solitaire games without ad interruptions! Simply Solitaire's charming visual style and smooth responsive cards will keep you entertained for hours. Try completely new games that use more than 4 suits, such as 6-Suit Aces Up or 8-Suit Spider.
>==========<
>==========<
๐ฑ๏ธ apps โญ๏ธ featured ๐๏ธ portfolio
>==========<
A very useful website for easily creating polls using a fair voting system.
>==========<
๐๏ธ websites โญ๏ธ featured ๐๏ธ portfolio
Player Vs Self apr 2019 # >==========<
Sometimes a bullet to the head is the best way to fix your past mistakes. A bullet to whose head? Your own of course! ... Or, at least a version of you.
After acquiring a watch that lets them reset time, the player must shoot their own clones before they break time and space itself. But be careful, the clones shoot back! That is, if you stand in the line of fire of yourself when you tried to shoot your clones in the past. Confused?
Try to survive 20 rounds without letting your clones run rampant.
>==========<
>==========<
๐งช๏ธ game-jams
Archives of Pandemonium dec 2018 # >==========<
Library of babel is a short story written by Argentine author Jorge Luis Borges about a universe which is basically just a huge library. In this library, every possible 410-page book exists somewhere.
Jonathan Basile created the website
libraryofbabel.info, which does an extremely good job of staying true to the original short story.On the site, you can choose any of the countless hexagons, choose a wall, a shelf, a book and a page.
What felt really unsatisfactory to me, though, was that fact that you basically just had to input one big text for the hexagon, and then make a tiny insignificant choice at the end.
Here I've made my own version where the user is presented with equal-sized choices at each intersection.
>==========<
๐๏ธ websites โญ๏ธ featured
Shield Academy nov 2018 # >==========<
You arrive at a seemingly abandoned dungeon-school where students learn about shield combat. Discover what happened while blocking projectiles throughout.
This game was supposed to be a small game created in one month, but I ended up spending a lot more time on it through that month that I had planned. I was having so much fun writing a story, building a world and composing my own music, something I haven't done for a game before.
I hope you enjoy!
>==========<
>==========<
๐ฎ๏ธ games โญ๏ธ featured
It's A Conundrum sep 2018 # >==========<
You're a ghost. Stay on the gravestones to stay alive. Don't get caught.
>==========<
๐ฆ๏ธ fun-stuff
>==========<
On the 29th of August 2018, I hosted a game jam on itch.io called
Idiom Game Jam. The theme was "Leave no stone unturned".
You play as the last unturned stone in the kingdom, who has to fight back against the hands and their leader, Igor the Handsome. The game features a unique artstyle with a handrawn feel.
(Turn on JavaScript to see more images)
>==========<
>==========<
๐งช๏ธ game-jams
>==========<
Outlaw is a game where you have way too short conversations with strangers before you start shooting each other up.
Quick! Press left and right to shoot the tough guy and the shaman. Become the fastest gunslinger in the wild west. Unlock abilities and other secrets.
>==========<
>==========<
๐ฎ๏ธ games โญ๏ธ featured ๐๏ธ portfolio
Treasure Hunters, Inc. mar 2018 # >==========<
In this whiteboard platformer, you play as an intern who must deliver the batteries of a huge laser weapon to your boss before the treasure they're hunting escapes.
Play through 10 unique (and infuriating) levels and time yourself to improve your personal best.
This game was made using VikingEngine, a game engine we developed for MonoGame.
>==========<
Voice Acting: Mikkel Lodahl as The Intern and The Boss, Nicklas Johansen Liรฐ as The Treasure
>==========<
๐ฎ๏ธ games โญ๏ธ featured ๐๏ธ portfolio
Terminal Chess sep 2017 # >==========<
A chess implementation & AI, programmed in a Console Application. Made for a basic programming challenge, banning all use of classes, structs, lists, dictionaries, threading and so on...
>==========<
๐ฆ๏ธ fun-stuff
>==========<
QumuluZ was based on a single question: Why do we have to make due with old, outdated questions with our trivia games? Soon after followed the idea: Why has no one put the question part of a standard family trivia board game into the cloud and onto our smartphones? The idea was born, and soon I was brought in to the project to bring the online part of the game to life.
QumuluZ is a board game and a trivia quiz game as you know it. But we use a digital platform to serve the questions, instead of including thousands of small pieces of cardboard, which can't be updated or changed. We add new questions on a regular basis, and update the existing ones to always be factually accurate. Utilizing a digital platform allows us to minimize repeated questions a user gets, serve questions based on each user's age, and let the user purchase additional categories for the game from the comfort of their living room.
I've filled countless of the technical roles in the development of QumuluZ, such as web developer, tools programmer, graphics designer and social media manager. While I can't share code snippets from QumuluZ, I can share some technical details.
The game runs in a browser to maximize compatability while keeping development time low for a single developer. Using Ajax requests, the game dynamically allows the player to choose categories to play with, change players and their ages, and of course use the main game loop, consisting of spinning a wheel, choosing a category, and drawing a question/answer. Development started with a prototype of this game in 2015, and was then reworked from scratch in the summer 2016 before the game's release just in time for christmas. The game box contains a board and cloud-shaped pieces, as well as a 16-digit code which grants the user access to the game, as well as 4 free categories. More categories can be purchased before starting a new game.
Behind the scenes, I also developed an application to administer the game's categories, questions and media attached to the questions. This too was developed first as a prototype and then reworked when specifications became more clear. When writing a question, an admin will categorize the question in terms of categories, difficulty and agegroup. The questions then go through a QA-process using another specialized tool, to make sure they are correctly categorized. When questions are served, the agegroup is chosen based on a player's age and how close they are to the limits of that group. The game then also makes sure that a user won't get repeated questions before they have exhausted the entire stack of questions.
>==========<
๐๏ธ portfolio
>==========<
Imagine if chess was a fast-paced real time strategy game played on a terrain-like board with fog of war. That is exactly what Pawn Storm is. Play online against another player. Capture the opponent's king while dropping captured piecess as pawns in your base to promote.
Comes with a Piece Customization system, to decorate your army as you win more matches.
(Turn on JavaScript to see more images)
>==========<
Music: EternalSushi
Font: Julieta Ulanovsky
Icons (game-icons.net): Lorc, Delapouite, John Colburn, Felbrigg, John Redman, Carl Olsen, sbed, PriorBlue, Willdabeast, Viscious Speed, Lord Berandas, Irongamer, HeavenlyDog, Lucas
Icons (game-icons.net) (cont): Faithtoken, Skoll, Andy Meneely, Cathelineau, Kier Heyl, Simon (aussiesim), sparker, Zeromancer, rihlsul, Quoting, Guard13007, DarkZaitzev, Various artists
Sound Effects: freesound.net, Bart Kelsey
>==========<
๐ฎ๏ธ games โญ๏ธ featured
>==========<
Pac-Table was my final project for my electronics class at HTX. Using an Arduino and LED-strips mapped out as a pac-man maze, we made a table which you can play Pac-Man on. We use a buzzer and the Arduino's built-in timer module to generate square wave sounds to go with the game. We paid close attention to detail, making sure that every one of the four ghosts appear and behave exactly as they did in the original Pac-Man. So while the maze-layout has been simplified a bit, veterans of the original should still be able to take advantage of the AI (even down to an overflow error with one of the ghosts being simulated in this version).
This was not just a school project - we put a lot of effort into making sure the product could be displayed and used by people every day, and it is now a permanent installation at the school.
Below are a few snippets of the code. Each ghost has its own set of variables, and use a collection of general functions to share logic. The following function is the general update function for a ghost. Its target and speed depends on the game's mode (chase / scatter mode, if you know your pac-man terminology), and if the ghost is dead or not. Another function is then responsible for not just moving ghosts but any character including pac-man, to make sure they move on fixed intervals based on their speed, and that they can't go through walls and so on. Finally, when a ghost moves, it runs the pathfinding function to find the next direction to move.
void GhostUpdate(boolean& isDead, int8_t target[], int8_t chaseTarget[], int8_t scatterTarget[], uint16_t& moveTimer, int8_t pos[], int8_t dir[], boolean& isFrightened)
{
if (isDead) //Dead target
{
target[0] = GhostStartPos[0];
target[1] = GhostStartPos[1];
}
else if (GhostModeChasing) //Chasing target
{
target[0] = chaseTarget[0];
target[1] = chaseTarget[1];
}
else //Scatter target
{
target[0] = scatterTarget[0];
target[1] = scatterTarget[1];
}
uint16_t speed = isDead ? GhostSpeedDead : (isFrightened ? GhostSpeedFrightened : GhostSpeed);
if (CharacterMovement(moveTimer, speed, pos, dir) || (dir[0] == 0 && dir[1] == 0))
{
GhostPathfinding(pos, dir, target, isFrightened);
if (isDead && pos[0] == GhostStartPos[0] && pos[1] == GhostStartPos[1])
{
isDead = false;
dir[0] = 0;
dir[1] = -1; //Ghosts turn left when leaving ghost house
}
}
}
At first, I was concerned about the Arduino's processing power to perform the ghost's pathfinding. But luckily, the orignal designers of Pac-Man had a similar issue, also running the game on relatively simple hardware, so the pathfinding algorithm is simple but effective. If a ghost is frightened, it takes all turns at random. But otherwise, it takes the turn that immediately brings it closest to its target, except that it can't turn 180 degrees, preventing it moving back and forth in a hallway. Because of the Pac-Man maze's layout, it is always able to find its way eventually, usually pretty efficiently.
void GhostPathfinding(int8_t pos[], int8_t dir[], int8_t target[], boolean frightened)
{
int8_t targetCopy[] = { target[0], target[1] };
if (frightened) {
targetCopy[0] = random(0, MapHeight);
targetCopy[1] = random(0, MapWidth);
}
int16_t currentShortest = 32767;
int8_t newDir[] = { dir[0], dir[1] };
for (int8_t y = -1; y < 2; y++) {
for (int8_t x = ((y) ? 0 : -1); x < 2; x += 2) //If y is 0, x will be -1 and then 1. Otherwise, x will just be 0. The result, is that we loop through all 4 directions: (0,-1), (-1,0), (1,0), (0,1)
{
if (!IsPositionValid(pos, y, x))
continue;
if (dir[0] == -y && dir[1] == -x) //You can't turn around 180 degrees
continue;
int16_t newDistance = DistanceFromTarget(pos, y, x, targetCopy);
if (newDistance < currentShortest) {
currentShortest = newDistance;
newDir[0] = y;
newDir[1] = x;
}
}
}
dir[0] = newDir[0];
dir[1] = newDir[1];
}
(Turn on JavaScript to see more images)
>==========<
>==========<
๐๏ธ portfolio
>==========<
Solar Sailors is an intense three-player party game, which can be played online. Together with two of your friends, you must cooperate to steer a ship through space to find a treasure, while fighting off hostile ships. But how will you fill the ship's six roles with only three players?
This ship is controlled via 6 differents tasks:
- A rudder, to control the ship
- Cannons, to fire at enemy ships
- Lookout Post, to see the surrounding terrain
- A Map, used to navigate to the treasure
- Sails, used to adjust the ship's movement- and rotation speed
- Fire, that needs to be put out to keep the ship afloat
>==========<
Created by:
wanieru,
Sebastian Hyberts,
Mathias Birk, Simon Andersen, Mikkel Mikkelsen, Rasmus Kristensen, H.C. Leth, Kasper Leiszner, Frederik Andersen, Mark Striegler
Music: Mattashi - All Aboards Lad!, Steadd - Shanty Town!, Lacifer - Pirate Adventure, EagleGuard - Captain's March, Pandaguru - Quest for Tortuga, EagleGuard - Fighting the Storm, Deadlyfishes - Blackmoor Tides, Dragonteenager - Duel on the Carribean, RealFaction - To the Ropes!
>==========<
๐ฎ๏ธ games โญ๏ธ featured
>==========<
Conquer the world in this simple dice-based strategy game. This is a recreation of GameDesign's Taro Ito's Dicewars. This more advanced version includes a level editor to create scenarios.
Comes with the maps:
- 1942
- Westeros
- Three Countries
- Seven Islands
>==========<
Game Design: Taro Ito
Dice Model: Wyrmtale Games
Sounds: RCPTones
>==========<
๐ฎ๏ธ games
>==========<
When my C-level programming class tasked me with making a clone of Flappy Birds, I took it a bit too far.
Flappy Moogle was the result. It starts out as what you'd expect - a regular Final Fantasy-themed Flappy Birds clone. But suddenly, the pipes disappear, and fireballs start hurling at you. Soon enough, even a boss fight starts...
>==========<
>==========<
๐ฎ๏ธ games
Japanese Song Translations may 2013 # >==========<
As part of my Japanese studies, I ocassionally translate some of my favorite indie songs and post the translations here. What's an indie song, you ask? In general, it refers to doujin works, CDs released by indepedent artists at conventions, usually. My only general requirement is that I can't find an existing translation, though.
(Turn on JavaScript to see more images)
>==========<
๐๏ธ websites โญ๏ธ featured
>==========<
Trapped inside the computer whom he loves, the protagonist must make it to the heart-core to turn on the computer's feelings.
This game was made in 24 hours for a local game jam, and won the first place and a prize of a combined 5000 DKK sponsored by Kiloo.
>==========<
Art: Nikolaj K. Christensen
Music: Help The Poor - Pursuit of Courage
>==========<
๐งช๏ธ game-jams ๐๏ธ portfolio