Lecturer | Game Programmer

Patrick Fischer

Who am I? 😱

Hi, I'm Patrick! As a programmer with over 7 years of experience, my focus is clearly on network and tool development. I'm enthusiastic about the challenge of designing and implementing smart, practical solutions for this exciting field.

More about 👉🏼 ME! 👈🏼

Some of my work💡

Ready to see what I've been coding? I've laid out different types of my work for you here. You can explore my main 📁 Projects, dive into the world of 🕹️ Game Jams I've participated in, and check out the
🧪 Personal Projects I tinker with. Enjoy Browse!

Game Dev Tools🚀

My passion for building effective solutions extends to creating practical 🛠️ Game Development Tools. I initially developed many of these to solve challenges I encountered myself, and now I offer some of them for sale. Discover how they can enhance your development pipeline!

What I teach🧐

Through my work, I've had the chance to teach many aspiring developers and deliver numerous lectures covering all sorts of directions in programming and Game Development 🧭.
Want to see all my lectures and more examples? Find out 👉🏼MORE!👈🏼

Game Dev Wiki📄

I'm building this wiki to share valuable insights and lessons I've gathered over my years in the games industry. My goal is to create a helpful resource for fellow developers. Feel free to explore!

Enter the Wiki (Under Construction) 🚧

Get in Touch and say hi!👋🏼

Highlight Projects

Top Down Horde Shooter

Disco Gunner (WIP)

Multiplayer First Person Horde Shooter

Project CP

Professional Projects

Online Meet together for Gamescom 2020

Indie Arena Booth Online

GameJam Projects

SAE Game Jam - 2024

Wake Up

Global Game Jam - 2024

Bouncy Kingdom

SAE Game Jam - 2023

Travel Through Time

SAE Game Jam - 2022

Markus Movers

Global Game Jam - 2019

Catch your memories

Game Dev Tools

Dynamic Difficulty Adjustment Tool

Balance It (WIP)

Debug Logging Graphical Tool

Graph It (WIP)

Pooling Tool for Unity

Pool It

About me

Hey, I’m Patrick, an enthusiastic German game developer who loves to write clean and powerful code. Game programming is a huge adventure for me, where I’m constantly learning and taking on new challenges. This journey makes it exciting to see where the future of game development is headed.It is also important for me to help others get started in game development. That’s why I love teaching, organizing Game Jams, and sharing my knowledge in my wiki. It’s truly rewarding to support people in bringing their own projects to life.I also frequently attend events like gamescom, devcom, and the German Dev Days, as well as Game Dev Meetups. These events are great opportunities to network, exchange fresh ideas, and just be part of the community.

Skillset

over the years i learned alot and there is still so much to learn. But here are some skills, that i built up in the past:Languages:
C#, C++, Python, LUA
Version Control Software:
Unity Version Control (Plastic SCM), Github, SVN
Project Management Tools:
Trello, Jira, YouTrack
Software:
Jetbrains Rider, Visual Studio, FMOD Studio, TeamCity
Engine:
Unity, Unreal Engine 5

Badge

Working Experience

SAE Institute Frankfurt

Head Instructor Games Programming
Aug 2021 - today
Supervisior Games Programming
Nov. 2020 - Juli 2021
As Head Instructor for the Games Programming area, I lead the department, which is largely composed of organization, management, development of the program, teaching and technical support. A detailed list of duties is available below.Personal Highlights:
My first course, which I supervised from the beginning, won the first SAE Student Award in Frankfurt in 2022, for the best games programming project from all SAE sites.
Subject-related assignments with the student:
- Main lecturer for the practical classes at the Frankfurt campus.
- Lecturer for theoretical lessons GSA* wide
- Technical support for students
- Support on student projects
- Technical support for bachelor topics
- Performance evaluations of students
- Conducting workshops and seminars
- Technical support of project work
- Contact person for interested visitors at the Open Campus
Organization
- Planning of the course development of the department GSA* far
- Planning the schedule and content of practical classes
- Planning and organization of local events (Game Jam etc.)
Management
- Assignment of tasks to the departmental assistants
- Contact person for academic and subject-related questions
Administrative tasks
- Maintenance of student data
- Planning and expansion of social media activities
* (Germany, Switzerland, Austria)

SUPER CROWD ENTERTAINMENT GMBH

Unity Developer
Oct. 2020 - Sept. 2020
Products Working on:
👉🏼 Indie Arena Booth Online 2020 👈🏼
Course before the realease of the Indie Arena Booth 2020 for Gamescom, Supercrowd has been looking for support to get the project ready in time for Gamescom.

Responsibilies include:- Bug Fixing and Troubleshooting: Identified and resolved issues on the platform to ensure smooth event operations.- Functionality Testing: Conducted tests to verify that all features were functioning as intended.- Documentation: Provided detailed documentation of identified bugs, tests performed, and solutions implemented.

Schenker Deutschland AG

Unity Developer
Oct. 2019 - Sept. 2020
Products Working on:
- VR Kleinpack
- VR Großpack
- VR Casino
Responsibilies include:- Developing New Game Features: Implement and integrate new features into the game to enhance the overall player experience.- Collaborating with Game Artists: Work closely with Game Artists to ensure a seamless integration of visual and gameplay elements.- Expanding Internal Editor Tools (Kite): Enhance and optimize internal editor tools, particularly "Kite," to improve game flow and development efficiency.- Debugging and Problem Solving: Independently debug and fix issues to ensure smooth gameplay.- Creating and Documenting Bug Tickets: Identify bugs, create detailed bug tickets, and document the issues and their resolutions.- Level Content Creation: Design and populate game levels with engaging content to provide diverse and exciting player experiences.

Lectures

Durch meine berufliche Tätigkeit hatte ich bereits das Vergnügen, viele angehende Entwickler auf ihrem Weg zu begleiten und unzählige Unterrichtseinheiten zu den verschiedensten Facetten der Programmierung und Spieleentwicklung zu gestalten und zu halten 🧭. Diese umfassende Praxiserfahrung und die Leidenschaft für Wissensvermittlung bilden das Fundament meines aktuellen Lehrangebots.Ich decke dabei ein breites Spektrum an Themen ab, um sowohl Grundlagen zu schaffen als auch tiefere Einblicke in spezialisierte Bereiche zu ermöglichen.Möchtest du genau wissen, welche Themen das sind und dir detaillierte Beschreibungen sowie passende Beispiele oder Sample-Projekte dazu ansehen?:

Programmiergrundlagen & Kernkonzepte

Programmieren Grundlagen (C# & C++)

In diesem fundamentalen Modul lege ich den Grundstein für deine Reise in die Spieleprogrammierung. Wir konzentrieren uns auf die essenziellen Konzepte und Techniken, die du benötigst, um mit C# (oft im Kontext von Unity) und C++ (relevant für Engines wie Unreal oder eigene Projekte) erfolgreich durchzustarten. Ziel ist es, ein solides Verständnis für Logik, Struktur und sauberen Code zu entwickeln.

Kerninhalte:

  • Zahlensysteme

  • Variablen, Datentypen und Operatoren

  • Kontrollstrukturen (Schleifen, if/else-Bedingungen)

  • Funktionen, Methoden und Parameterübergabe

  • Einführung ins Debugging und Fehlerbehebung

  • Value & Reference Types

  • Pointer Arithmetic

  • Memory Management

  • Lambda Expression

  • Reflections

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Objektorientierte Programmierung (OOP)

Die Objektorientierung ist ein mächtiges Paradigma in der modernen Software- und insbesondere der Spieleentwicklung. In diesem Kurs lernst du die Kernprinzipien der OOP – wie Klassen, Objekte, Vererbung und Polymorphie – kennen und wie du sie in C# und C++ praktisch anwendest, um modularen, wiederverwendbaren und gut wartbaren Code für deine Spiele zu erstellen.

Kerninhalte:

  • Das Konzept von Klassen und Objekten

  • Vererbung und die Gestaltung von Klassenhierarchien

  • Polymorphie und virtuelle Methoden

  • Kapselung, Abstraktion und Interfaces

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Algorithmen & Datenstrukturen

xxx

Kerninhalte:

  • Arrays

  • Listen

  • Linked Lists

  • Stacks

  • Queues

  • Baum Strukturen (Binary Tree, AVL Baum)

  • Hash-Datenstrukturen

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Design Patterns

xxx

Kerninhalte:

  • MVVM & MVC

  • Pooling

  • Command Pattern

  • Stratergy Pattern

  • ...

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Version Control

xxx

Kerninhalte:

  • Commit

  • Push

  • Branching

  • Merging

  • Rebase

  • Git Flow / Github Flow / Trunk Based

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Game Engine & Spielentwicklungspraxis

Game Engine Basics (Unity & Unreal)

xxx

Kerninhalte:

  • Coding & Scripting

  • Collider & Kollision

  • UI

  • Sound

  • Post Processing

  • Engine Debugging

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Event Based Programming

xxx

Kerninhalte:

  • Events

  • Event Listener

  • Callbacks

  • Entkopplung von Klassen & Kopenenten

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Game Feedback

xxx

Kerninhalte:

  • User Experience

  • Camera Shakes

  • Sound Feedback

  • Tweening

  • Haptisches Feedback (Controller)

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Balancing

xxx

Kerninhalte:

  • Fairness & Chancen

  • Dynamic Difficulty Adjustment

  • Flow Theorie

  • Types of Balancing

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Game Audio (FMOD)

xxx

Kerninhalte:

  • Middleware-Integration

  • Sound Events

  • Sound Banks

  • Parameterbasierter Sound

  • Adaptive Musiksysteme

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Tool Programming

xxx

Kerninhalte:

  • Unity Engine Erweiterung (Window, Properties, Inspector etc.)

  • Data Serialization & File Formats: Json, XML, CSV, Ini

  • Databinding

  • Registry

  • WPF, Windows Forms, XAML, MVC, MVVM

  • Benutzerfreundliches Design Usability

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Fortgeschrittene Programmierung & Spezialgebiete:

AI Programming

xxx

Kerninhalte:

  • Alpha Beta Pruning

  • FSM

  • BT

  • Flocking

  • Steering Behaviour

  • Utility Based Desition Making

  • GOAP

  • Influence Maps

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Procedual Generation

xxx

Kerninhalte:

  • Perlin Noise Generation

  • Ocaves

  • UV Mapping

  • Texturing

  • Dungeon Generation

  • BSP

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Komplexe Algorithmen

xxx

Kerninhalte:

  • Bezier Curve

  • Splines

  • Cellular Automata

  • Conways Game Of Life

  • Cave Generation

  • Vector Fields

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Multithreading

xxx

Kerninhalte:

  • Threadpools

  • Thread vs Task

  • Thread vs Async

  • Race Conditions

  • Lock statement

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Procedual Animation

xxx

Kerninhalte:

  • Inverse Kinematik

  • Rig Structure

  • Unity Animations Rigging Package

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Netzwerk Programmierung

xxx

Kerninhalte:

  • Netzwerk Theorie (Hardware, Protokolle, DNS, ISO/OSI, IP, Adressen)

  • Game Spezifisches Netzwerk (Matchmaking, Lag Compensation)

  • Unity Photon (Pun, Fusion)

  • Unreal Networking Theorie

  • Eigenen Chat mit Sockets programmieren

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Physiks Programming

xxx

Kerninhalte:

  • Vector

  • Collison AABB

  • Complex Collision

  • Sphere Collision

  • Raycast

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Projektmanagement & Prozess:

Software Planung

xxx

Kerninhalte:

  • UML Diagram

  • Flow Charts

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Project Management

xxx

Kerninhalte:

  • Trello

  • Jira

  • Backlog

  • CI/CD Theorie

  • Sprint Modell

  • Agile Development vs Wasserfallmodell

Ausführliche Materialien & Code-Beispiele auf GitHub ➔

Project CP



Project Type: University

Role: Project Manager | Programmer

Teamsize: 2 Programmer | 1 Artist | 2 Audio

Duration: 6 month

Tools: FMOD, Jira

About

Project CP was developed in the third semester at SAE Institute. As the Project Manager, I was responsible for organizational tasks such as meetings, sprint planning, and maintaining tools like Jira. Additionally, I developed the core functionalities of the project, handled AI development, and managed network functionality. The project began with two programmers, and later, an audio creator and an artist for level design joined the team. Through this project, I gained extensive knowledge in network programming and cross-disciplinary communication.

01.

Project Management

In this project, I was responsible for project management. It was a unique experience, as it was my first time using Jira as a tool. In the past, I had primarily worked with Trello or similar applications.Engaging with Jira was very interesting, as I was able to discover its strengths. Although it took some time to understand and properly apply the essential and fundamental features, Jira ultimately helped me gain a clear overview of all departments, track the process, and implement agile project management more effectively. This included sprint planning, regular meetings, and sprint reviews.

02.

Gameplay

The game starts in a lobby, where you can assemble your equipment. When you're ready to start a round, you can either create your own lobby or join a random lobby via Quickplay.Once the game begins, your goal is to protect the Hangar Console. Enemies will spawn in waves and attempt to capture the console.If you are defeated by an enemy, your teammate can revive you. If your teammate defeats the wave, you will be automatically revived.There are two types of enemies: Soldiers and Drone Bombs. When you defeat these enemies, they drop their weapons, which you can pick up. They may also drop Healthpacks that you can collect.The game is won when all waves are defeated!

03.

Networking

The game should naturally include network functionality, as projects like these are incredibly beneficial for learning. In the past, I have already gained experience in developing network applications. For instance, I created a small network chat program using sockets and developed a small multiplayer shooter (authoritative) with Photon Bolt. However, we also wanted to explore the non-authoritative model, which is perfectly suitable for a coop shooter. Consequently, we delved into Photon Pun 2.

04.

AI Behaviour

For the Artificial Intelligence (AI), I decided to go with a simple Finite State Machine (FSM). Before starting the implementation, I planned the AI using Draw.io to visually represent the states and transitions. The resulting diagram shows how the FSM is structured and how it functions.One particularly interesting aspect was synchronizing the FSM in a multiplayer environment. The FSM itself runs only on the host machine, but the positions and animations of the AI characters are synchronized to ensure smooth gameplay on all clients.Challenges and Solutions in Synchronization
One challenge was keeping the AI running when a player leaves the game. One might think it's enough to sync the AI information once when someone exits, but with a sudden disconnect, it's not that simple.
In the event of an unexpected disconnect, no code can be executed to save or sync the current state. Therefore, it's crucial to ensure that the AI information is always up-to-date. This means the relevant data must be continuously and reliably transmitted throughout the game.

05.

Inventory System

The inventory system is very simple. The basic idea is that players can scroll through their inventory using the scroll wheel. This allows a player to hold a primary weapon (e.g., AK, Scar) as well as a secondary weapon, such as a pistol.For network synchronization, only the ID of the weapon currently held by the player needs to be synchronized. This means that whenever a player scrolls through their inventory or picks up a new weapon, a network synchronization must occur.Additionally, we do not destroy weapons when they are switched or picked up; instead, we simply deactivate them. The reason behind this is that instantiating and destroying objects is a resource-intensive process in Unity. By keeping the objects in memory and not deleting them, we can avoid this overhead.This approach applies to both the first-person and third-person models. The weapon held by Player 1 is created in their first-person model, not in the third-person model. However, for all other players, the weapon is created in the third-person model.It is also crucial that when a player joins the game later, the weapon ID of each player is synchronized to the new player so that they are also up-to-date.

06.

Recoil Pattern Tool

For our weapons, I developed a Recoil Pattern. To make this pattern more comprehensible, I created a tool that allows for precise visualization of how the weapons behave in a recoil pattern. I intentionally chose not to use a procedural spray pattern for this project, enabling quick and easy adjustments to the recoil pattern.UsageWith my tool, I can easily add new points, adjust tangents, or delete points. Each point can be moved afterward, except for the "Root" point. However, the tangents of each point can be individually adjusted.Technical DetailsThe tool is built on a custom spline system that allows me to move points via drag-and-drop. Tangents can be displayed to fine-tune the curve. The spline curve is then used to generate points necessary for the recoil during runtime.A key feature is the proper placement of tangent points when creating new points. To ensure consistent results, I align the tangent in the direction of the second tangent of the previous point.

07.

FMOD

Goals
The primary objective was to craft an immersive and reactive soundscape that fully immerses players in the game world. Repetitive and monotonous sounds can make a game feel very dull, so we implemented the following strategies:
Variety in sound effects: To avoid monotony and create a more dynamic and engaging audio environment, we used different sounds for the same effects.
Dynamic soundtrack creation: To enhance emotional impact, we developed a music system that adapts to the in-game situation, changing dynamically with the gameplay.
Randomized sound adjustments: To ensure that sounds do not become repetitive, we varied parameters such as pitch, volume, and filters each time a sound effect was played. This introduced a natural variation and made the audio experience feel more lifelike.
Results
By implementing FMOD, we were able to utilize its robust core functionalities without the need for extensive custom coding. This greatly simplified the workflow between audio production, FMOD integration, and development. The end result was a significantly more immersive and engaging player experience.

Impressum

Angaben gemäß § 5 DDGPatrick Fischer
Samlandweg 3
63069 Offenbach
Vertreten durch:
Patrick Fischer
Kontakt:
E-Mail: [email protected]
Haftungsausschluss:Haftung für InhalteDie Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.Haftung für LinksUnser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.UrheberrechtDie durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.DatenschutzDie Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.
Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.
Google AnalyticsDiese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. (''Google''). Google Analytics verwendet sog. ''Cookies'', Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglicht. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website (einschließlich Ihrer IP-Adresse) wird an einen Server von Google in den USA übertragen und dort gespeichert. Google wird diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten für die Websitebetreiber zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen zu erbringen. Auch wird Google diese Informationen gegebenenfalls an Dritte übertragen, sofern dies gesetzlich vorgeschrieben oder soweit Dritte diese Daten im Auftrag von Google verarbeiten. Google wird in keinem Fall Ihre IP-Adresse mit anderen Daten der Google in Verbindung bringen. Sie können die Installation der Cookies durch eine entsprechende Einstellung Ihrer Browser Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website voll umfänglich nutzen können. Durch die Nutzung dieser Website erklären Sie sich mit der Bearbeitung der über Sie erhobenen Daten durch Google in der zuvor beschriebenen Art und Weise und zu dem zuvor benannten Zweck einverstanden.Website Impressum erstellt durch impressum-generator.de von der Kanzlei Hasselbach