Stråy is an explorative top-down survival game, where you take the role of a wolf stranded on a lonely island. You
will have to hold your ground against predators, environmental conditions and other obstacles the island is facing
you with. But don't let yourself be fooled: The permanent threat of starvation, thirst and hostile encounters won't
be the only thing you have to worry about … - Immerse yourself in a beautiful low-poly world with many things to
explore and learn.
I worked in a group of seven for an entire semester on developing the concept and the game. We presented the Game in
a fair at the end of the semester, called Showtime: Visitors and Professors could play the game and look at the
development process. We recived the highest mark out of all 10 projects that were presented there.
My responsibilities included implementing Save-Games, Player life state and a remote console for development and
debugging.
Stray
Survival Game build with Unity
Teamspeak StatusPage
Simple TS3 Server Status Page
I operate a Teamspeak 3 Server for myself and some friends, which we use when we play video games together. I wanted
to have a simple & easy solution to see who is online right now, which is why I build a simple status page. It
connects to the Teamspeak Server in a Docker container via ServerQuery Login at startup and every time someone
visits the site, or every 5 seconds, it refreshes the view and displays the users in a list. On hover, the channel
they are in is shown.
I wanted this page to be reusable and easy to configure, which is why I chose to make every parameter an environment
variable and decided to make the repository open-source under MIT license. This way, anyone could use it for their
own Teamspeak servers.
You can see the status page for my own Teamspeak Server here:
I deploy my websites and services using the Plesk interface on a Linux server. I use nginx- proxy mode to forward the
ports of my services to the HTTP and HTTPS ports. Every connection is secured by SSL, HTTP requests are
automatically redirected to HTTPS. The Status Page is build using a node.js/express backend and ejs for rendering the view. I provided detailed documentation in the repository so that anyone could deploy the status page with ease.
Teamspeak StatusPage
Simple TS3 Server Status Page
CS:GO Demo Analysis
Deep analysis of CS:GO Matches
Thesis: Developing a Machine Learning Application for identifying tactics in CS:GO matches
By Jan Schelhaas and Felix Lausch, HTW Berlin
This page provides an overview of the contents of the thesis to give you a general understanding of the project as
well as the findings.
Hypothesis
We believe, that for most rounds that are played on a professional level in Counter-Strike: Global Offensive,
have an underlying strategy. A strategy is the approach a team has decided to take for a specific round and most
visible at the beginning of a round. Mid round events influence the course of action taken and could lead to a
deviation from the original strategy.
The movement and utility usage of each player is an indication of strategy. We believe that from the movement of
players alone, an underlying strategy can be determined and are confident, that an unsupervised learning
algorithm will be able to differentiate rounds based on strategy.
Demo processing
The demo is processed in a browser- based parser, using the demofile library. The file will be read and transformed into a Match, which is the
common data structure defined for data transmission and storage.
The following properties are being captured from each demo:
Each player’s position once a second, which includes coordinates and location name
Each player's equipment value once a second
Every kill, death and assist, as well as bomb plants
Origin point of grenade throws
Additional metadata, like round outcome
Graphs
Graphs are the data structure that we chose to transform a Match into something an unsupervised learning
algorithm could understand.
A Graph is made up of Nodes and Edges, which connect the nodes. Each node stands for a named location on the
map. The named locations are part of the navmesh and defined by the map creator. Usually, each distinct
location has its own name. For some maps, more refinement was necessary.
Each Edge has a weight, which is translates into thickness on the visualization. The weight represents the
importance of a path. All rounds that are played on a specific map are transformed into a Graph, with
offense and defense being separated. The weight of each path depends on a number of factors:
The number of players traversing the path (more players = higher weight)
The time spent traversing the path (longer = higher weight, capped at 5 seconds)
The time in the round progression (early in the round = higher weight)
The man-disadvantage of a team (advantage or equal number of players = high weight)
Utility usage and objective events (e.g. bomb plant)
The weighting of the Graph serves the purpose of figuring out the importance of paths for the tactic that is
being used by the team during that round.
A Graph representing a cluster of rounds with a heavy focus on A-Long on DE_DUST2
Cluster Analysis
All Graphs for a specific side and map are used for one cluster analysis. The weights of the edges are exported
and serve as the input data. On DE_DUST2, there are 38 edges with weights for each round. A hierarchical
clustering algorithm is then used to group the rounds into clusters. The goal is for each cluster to only hold
only similar rounds. The number of clusters equals the number of strategies and can be set manually. For
DE_DUST2, we have named 7 or 8 strategies that we would like to distinguish:
Straight A Long
Straight B
B with tunnels control
Mid to B
A short via Mid
A short via Tunnels
A split
In most cases there are two clusters for A Long, one being more forceful than the other. A distinction could be
made between a rush or a fast execute and delayed action.
Results
The following table shows the Match Astralis vs Fnatic at Dreamhack Open Fall 2020 with a Graph for each
round.
There is a visualization of the Graph for each side and round, as well as information on the round outcome (blue
number = win, orange = loss) and the team economy, with a 25% full bar being an eco-round and a full bar a full
buy. The number is the label that was given to that round by the algorithm. Rounds that have the same label were
deemed to have a similar strategy by the algorithm.
round
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
offense
Astralis
0
2
5
6
0
4
0
6
7
6
7
7
3
5
1
FNATIC
6
3
1
2
1
1
5
2
defense
FNATIC
3
4
1
4
4
4
2
4
4
4
4
3
4
4
3
Astralis
1
1
4
0
0
1
4
4
Each cluster can be visualized by calculating the average of all the rounds that belong to it. The table below
shows statistics for each offensive strategy for Astralis. The table is built from data of 311 rounds played by
Astralis on DE_DUST2 in 2020, while the cluster analysis that created the labels is using data from over 1500
rounds that were played by professional teams in 2020.
label
possible description
rounds (distribution)
win %
economy (win %)
7
Direct B
58 (18%)
55%
eco: 2 (0%)
full buy: 45 (66%)
semi buy: 4 (50%)
semi eco: 7 (0%)
0
Direct A Long
27 (8%)
81%
eco: 4 (100%)
full buy: 18 (77%)
semi buy: 5 (80%)
4
A Short
24 (7%)
58%
eco: 1 (0%)
full buy: 19 (68%)
semi buy: 2 (50%)
semi eco: 2 (0%)
The possible description in this table is a comment by the authors, an actual analyst might be able to find
better ones.
Evaluation
We need to acknowledge that not every round in CS can be put into a cluster and be a perfect fit. The game is
just too complex to reduce it down to eight tactics and call it a day. Each round is unique but the attempt of
figuring out what the similarities between rounds are on a meta level, figuring out which rounds share a similar
strategy, was largely successful. While there are rounds that end up in the wrong cluster, one needs to keep in
mind that the algorithm has no idea of the Game and its mechanics. It only has 38 floating point numbers per
round, that’s all. These 38 numbers therefore need to represent the uniqueness of a round while being similar
enough for rounds that transpired in a similar fashion. An algorithm won’t replace the human analysts, but it
could support them.
Think of the following scenario: A team wants to practice countering another team’s A-Long push. A good place to
start would be watching the demos where the other team is pushing A-Long but going through the demos to find
good rounds to watch takes time. The algorithm would be able to just give out a list of rounds that could be
worth looking at in more detail. A more general use case would be figuring out your own teams or your next
opponents’ weak strategies. It could also be interesting to know if some strategies are occurring in patterns
more often. For example, a team might follow up a failed A-Long go with a B rush at a higher rate. Such
information could be of value when preparing for an opponent.
Copyright by Felix Lausch and Jan Schelhaas, 2020
CS:GO Demo Analysis
Deep analysis of CS:GO Matches
University Coursework
Several small projects
On this page I list a few notable projects I completed as University coursework throughout my studies.
Pathfinding
[Java] An implementation of a Graph with algorithms to find the shortest and cheapest path.
Chatterbox
[Java] A working multi- client command line chat application. This was my first experience with networking and it turned out pretty good.
Cryptography
[Python] Implemetation of several problems in cryptography using Python and the PyCryptodome library. Includes solutions for:
Greatest common divisor
Chinese remainder theorem
AES encryption
Discrete Logarithm
Diffie Hellman Key Exchange with man-in-the-middle demonstration
Elliptic Curves
I did a lot more in several courses on Algorithms, Open GL Graphics and Image Analysis, but the projects listed above are some of the ones I had a lot of fun working on.
University Coursework
Several small projects
Research
Smartcard Cracking
Paper on the Security of Smartcards
This paper was written for my Cryptography course together with a mate.
In this paper we analysed differnet smart cards, looked at where they are used and evaluated how secure the cards are. We looked at the Mifare Classic and several usages of that product years after the crypto1 algorithm used on those cards had been broken. We provided a deep array of sources that form the basis of our verdict.
Smartcard Cracking Research Paper
What are Smartcards?
Mifare Classic
OV Chipkaart & Oyster Card are broken
Crypto1
Consequences
Mifare Classic is still in use
Clone a Mifare Classic
Mifare DESFire
Conclusion – How safe are smartcards?
The paper was written by Felix Lausch and Jan Schelhaas
Smartcard Cracking
Paper on the Security of Smartcards
Cheating in Games
Essay on anti-cheat approaches in video games
Video games and especially online games have a big problem: Cheaters! Prople are trying to game the system to gat a competitive advantage while the developers explore different ways on how it might be possible to prevent this. I go into detail on two approaches, the one chosen by Riot Games and the one from Valve and discuss which ways are better to deal with cheating and how the punishment should work. I am suggesting ways on how to deal with cheating and evaluating the approaches the developers took.
I wrote the essay for my English class in University and have since recived positive feedback about the thoghts I presented, including from somone at Kamu (Easy Anti Cheat, now part of Epic Games)
The essay was written in 2018
Cheating in Games
Essay on anti-cheat approaches in video games
Gaming
Cities: Skylines
Complex & beautiful city designs
I enjoy building and designing complex infrastructure in Cities: Skylines. On this page you can find a few examples on that work:
Cities: Skylines is an awesome game for creating complex infrastructure and unnecessarily detailed cities. My creations rely on public transit over cars and rail over trucks.
Cities: Skylines
Complex & beautiful city designs
de_subway
CS:GO Map
de_subway is a CS:GO Map I built. It is pretty basic in terms of finsh and textures, but it features a fun and
complex layout. The Map was my first attempt at building a map for CS and it turned out pretty well. The map was
downloaded by 2,678 users and has 87% positive ratings.
The map was made 100% in the Hammer Editor and the Source SDK for CS:GO
Terrorists seek a way to destroy the subway station and meet in a service room in the tunnel. They have to decide if
they want to plant the bomb in the main hall or at the skatepark directly above the station. They have to be fast,
because the SWAT is already there, willing to defend the station and kill the terrorists.
de_subway
CS:GO Map
de_creek
WIP CS:GO Map
de_creek is an in-development 5v5 defusal map for CS:GO.
you can see the status of development on GitHub an in my devblog: