My name is Diogo Silva and I am a Master's graduate in Computer Science and Engineering (Engenharia Informática e de Computadores) by Instituto Superior Técnico (University of Lisbon) specializing in Artificial Intelligence and Game Development.
I've been pursuing a job in the Video Games' industry ever since I was a child. For as long as I can remember, the medium's always been a deep passion of mine. That passion soon grew to curiosity as I wanted to learn and figure out how those expansive worlds, those gripping stories, those enginous gameplay mechanics were crafted and how they all came together, synergizing to form something so marvelous. I first learned about programming after a friend lent me a book with Python programming exercises. I found the whole activity fun and cathartic. The merge of these two passions - game making and programming - were what led me down the path of pursuing a higher education degree in Engineering. I hoped that one day this would be the doorway into the job and industry that I had been dreaming about for so long.
Throughout my years at University, I've also cultivated an interest in Artificial Intelligence, Machine Learning and Computer Graphics, having worked on several projects encompassing a multitude of topics related to these areas, from Cooperative Agents, to Data Analysis ML models and full-blown Graphical Engines.
LinkedIn:
https://www.linkedin.com/in/diogosilvads/
Business Email:
diogo0408@gmail.com
September 2020 - November 2022
Achieved a Master's Degree in Computer Science and Engineering (Engenharia Informática e de Computadores) at Instituto Superior Técnico (Lisbon University). Specialized in Intelligent Systems (Machine Learning and Artificial Intelligence) and Video Games with complementary courses in Computer Graphics.
September 2017 - June 2020
Pursued a Bachelor's Degree in Computer Science and Engineering (Engenharia Informática) at Aveiro's University. Finished the course with the highest GPA in the course and one of the highest in the entire university at the year of graduation.
Semptember 2014 - June 2017
Completed High School with a specialization in Sciences and Technology.
April 2021 - September 2021
Worked with Instituto Superior Técnico's Pedagogical Council
to create a web page promoting the usage of Active Learning
methodologies in education.
A letter of recommendation written by this work's
coordinators can be found
here.
April 2020 - September 2020
Received an Undergraduate Student Researcher position at IEETA
- Institute of Electronics and Informatics Engineering of
Aveiro. Tasked with working on a web-based data management and
analysis tool.
A letter of recommendation written by this work's
coordinators can be found
here.
December 2022
Thesis Article published at the IEEE International Symposium on Multimedia 2022 conference.
May 2022
Distinguished with Instituto Superior Técnico's Academic Excellence Diploma for the academic year of 2020/2021 due to the excellent performance showcased in the Master's in Computer Science and Engineering.
May 2022
Chosen to represent GameDev Técnico at the international game jam "Nordic Game Jam" in Coppenhagen, Denmark.
April 2022
Felicitá received GJL GameParade's 2022 GameJam Award for Best Art Direction. The game was also nominated for a slew of other categories and was nomiated as one of the best games in the jam by the public.
March 2020
Achieved first place at IEEE Aveiro's Student Branch's yearly national hackathon - ThinkTwice
November 2016
Scored a 205/210 equating to a C2-CEFR (Common European Framework of Reference) level of English.
June 2015
Scored a 186/190 equating to a to a C1-CEFR (Common European Framework of Reference) level of English.
May 2018
Awarded by Espinho's Rotary Club as recognition for being one of the city's best students entering University.
May 2016
Placed in 15th at the V Portuguese National Philosophy Olympics with an essay on free will. Chosen as a school representative at the nationals after getting first place in the school's elimination stage.
2011-2017
Enrolled in the National Honor Roll from 6th to 12th grade.
March 2021 - Present
GDT is an IST organization that is all about the promotion of game development. Its members participate in game jams, sponsored projects, full-blown releases and everything that involves developing games. It counts with the sponsor of several well known Video Game companies such as Miniclip and Funcom, alongside mentors belonging to indsutry powerhouses such as Guerrilla Games.
December 2020 - December 2021
Instituto Superior Técnico's in-house association focused on managing all of the university's Game-related courses, aiding both teachers and students and organizing several activities throughout the year, namely the Global Game Jam, Alumni Meetings, Talk N' Play (a monthly stream about a wide range of video game topics) and MOJO (a showcase of games made during the Game Development Methodologies course).
October 2019 - September 2020
Invited to join the ranks of the Computer Science and Engineering's student's council. Assisted in a variety of activities such as student gatherings and dinners and cooperated in the integration of my notes and study materials into their main web platform.
December 2019 - September 2020
Offered a position at AETTUA's board of directors after spending a year as a general member. Managed and oversaw several teams and played a major part in the organization's biggest event to date - Deti4Devs 2019 - notably in the Image and Logistics departments.
December 2018 - December 2019
Joined AETTUA - a student association responsible for organizing a plethora of events at University of Aveiro's Faculty of Computer, Telecommunications and Software Engineering. Worked as an active member of the Image Department and integrated into several multi-department teams responsible for events such as DetiHub and Deti4Devs.
November 2018
Volunteered at Web Summit 2018 - one of the largest tech conferences in Europe held in Lisbon, Portugal.
October 2016
Volunteered as a referee at the National Boccia Tournament 2016.
SocceReach is a website/mobile app capable of displaying
information retreived from a FIFA Football database through a
premade API. The website was developed using HTML/CSS, jQuery,
Knockout and JSON/AJAX. The app was made by converting the website
into an APK using Adobe's PhoneGap.
This was my first large-scale University Project and first
website/mobile app.
GoNutri is a proof-of-concept website about a fictional "start-up" company offering an easy connection between customers and local, healthy restaurants. Aside from the technical aspects of the project - the website - we also had to flesh out our business idea, goals and reliability in order to impress and satisfy our companie's stakeholders. We had to create detailed reports and work in an AGILE manner with weekly SCRUMs. A fun detail about this project is that, at the time, I had no knowledge of Databases. As such, in order to allow for users to login and make purchases within the platform I used the browser's cache in order to store all necessary data and implement all of our proposed functionalities.
TECH: jQuery, HTML5, CSS, Bootstrap4 COURSE: Systems Analysis and Modeling Website, Business Start-Up, SCRUM, AGILEThis program uses a combination of probabilistic methods such as Jaccard Distance and Simmilarity, minHash, LSH, Shingles, Sotchastic Counters and Bloom Filters in order to find Spambots in reviews left by users in the online storefront GoodOldGames. After going through the available dataset of reviews we present a list of users the program thinks could be spambots or troll reviewers by finding user pairings with very similarly worded reviews.
TEAM: Vasco Ramos TECH: Java, MatLab/Octave COURSE: Probabilistic Methods for Computer Science and Engineering Software, SimilaritiesThis project consisted in a couple of BASH scripts that allow a user (in Linux) to find files in their system and parse several options such as getting only the biggest file and it's size, ignoring files accessed after a certain date, and so on and so forth.
TEAM: Vasco Ramos TECH: Bash, Linux COURSE: Operating Systems ScriptThe second project we had to make for the "Operating Systems" subject. On the second half of the semestre we started using the C language to develop some lesser scripts, being taught about matters such as Message Queues, MultiThreading, Deadlocks and other Process Scheduling concepts. On this project we had to, using pre-existing code given to us by our teacher, develop a "Semaphore Restaurant" where we had to control the access to the Critical Region and the management of resources between several entities running in seperate threads with the use of semaphores.
TEAM: Vasco Ramos TECH: C COURSE: Operating Systems Software, Semaphores, MultithreadingOn our course we had a subject named "Algorithms and Data Structures" that was all about data structures, optimization and algorithmic techniques (as the name implies). On our first project we had to solve the Traveling Salesperson Problem using Brute Force and Dynamic Programming, both for us to train the 2 methods and to make us experience the difference in running time between the two techniques when applied to a problem of big dimensions. Besides those 2 we also developed a Random Permutation Algorithm. Code-wise the program was developed in C and we were working with pre-made code given to us by our teacher (we pretty much just had to develop the actual algorithm to solve the problem, and not the code to actually construct it, i.e creating the cities, their distances and such). We also had to develop some Matlab/Octave scripts to both craft the graphs and help with the data (time taken to solve the problem for each technique) analysis.
TEAM: Vasco Ramos TECH:C, Matlab/Octave COURSE: Algorithms and Data Structures Software, Dynamic ProgrammingAnother project we had to develop for the Algorithms and Data Structures Subject was about the analysis of the speed to perform certain operations on binary trees. We had to implement the tree's main methods (inserting a node, searching for a non-existent node and calculating it's search time, etc) alongside some Matlab/Octave scripts to help us with graphing and data analysis.
TEAM: Vasco Ramos TECH: C, Matlab/Octave COURSE: Algorithms and Data Structures Software, Binary TreesMy first game, first time using Unity and first time participating in a GameJam. As a team we made Nomadic in 48 hours for the Global Game Jam 2019. None of us had any knowledge of Unity or C#, yet we still had a blast learning by trial and error (mostly error on this one). Nomadic is quite the technical mess and was pretty poorly made, but as a concept I still believe it to be rather endearing and it served as a launch pad for actually learning the Unity interface and being motivated to use the engine for other personal projects.
TEAM: Pedro Oliveira , Pedro Escaleira , Mariana Graça , Tomé Azevedo TECH: Unity, C# Game, Global Game JamI tried learning the p5 framework following the tutorials and coding challenges on "The Coding Train"'s youtube channel. Most of these are challenges from those videos but there's a couple of original ones that I created to try and see where my skill with the framework was at after about a week or so.
TECH: p5 Framework, JavaScript GamesI decided to get into digital drawing during the summer of 2018 just for fun and as an extra hobby. You can check out my drawings over at my reddit!
Digital ArtMuch like the p5 games I've also made, these were created with the help of "The Coding Train"'s youtube videos. As challenges they were pretty fun to make and I did enjoy the outcome and the experience I got from making them.
TECH: p5 Framework, JavaScript SoftwareThis project was the first time we were tasked with constructing a database from scratch. We were first taught about Entity Relationship diagrams, then Relational Models, Relational Algebra and only finally did we learn about SQL. We were told to develop a database and an interface (using Visual Studio's C# Forms Application). We make something in the vein of IMdb and myAnimeList but targeted twoards videogames. As such, myGameStack consists of a desktop app connected to our own self-made database containing info on several games, eSports tournments, developers, publishers, and that allows for the creation of user accounts and the publishing of reviews/scores.
TEAM: Vasco Ramos TECH: SQL, C#, VisualBasic COURSE: Databases Software, DatabaseOn the second semester of my second year of University we had a course called "Distributed Computation" (aka Distributed Systems). On it we approached, studied and deeply followed all concepts in the book "Distributed Systems" by Andrew S. Tanenbaum and Marteen van Steen. As a first project we were told to create a "P2P Drive-Thru": A collection of several entities each running as it's own project and connected to each other in a Ring Overlay formation. All entities interacted with each other and, to manage the P2P communication/allow a process to take control and request some work/access critical resources (i.e resources that can only be used by one process at a time) we had to construct a "Token-Ring" - Using a token that continously circulates through the ring, a process gets the token, checks if the tokens empty, if so, checks if it has something to request or a message to send, puts it in the token (if it does) and passes it on to the next entity in the ring ; if the token isn't empty, the entity checks if the request on it is for itself, if so it gets the request, processes it and passes the token on, else, it simply fordwards the token.
TEAM: Vasco Ramos TECH: Python COURSE: Distributed Systems Software, Distributed Systems, P2P Communication, Token RingThis project consists on a program that gets a text (or a book) and counts how many instences of each word there were through multithreading. The core of the project was centered around managing several processes counting different chunks of the text and having them synergize with each other. We used a single Coordinator, who would break the text into several partitions and distribute the work accordingly, and several Workers who would actually count the words in the chunk they were given by the coordinator using a Map Reduce Algorithm. Communication was handled using Asyncio. A vital portion of the project came from the fact that each process should be able to crash/fail (either the Coordinator or the Workers) without that affecting the final result, which we achieved through a backup coordinator and Asyncio's capabilities to detect connection breaks. As such the program is highly robust and Fault Tolerant.
TEAM: Vasco Ramos TECH: Python, Asyncio COURSE: Distributed Systems Software, Distributed Systems, P2P Communication, Map-ReduceOne subject we had was called "Human-Computer Interactions" and it dealt with interfaces and good design practices to make a usable program/application. As a project we were simply told to think up a concept and create an app. The idea we ended up going with was a "virtual wallet" app targeted at towards day-to-day incomes/expenses and the extra functionality of managing money borrowed and lent, allowances and subscriptions. All we had to do was craft the interface using Android Studio and make it a "proof of concept", since the class wasn't really about coding, they just wanted us to make something that respected Nielson's Heuristics and was usable. However, we wanted something that we could use on a daily basis, and so we went above that and crafted a fully fledged app that is completely functional.
TEAM: Vasco Ramos TECH: Java, Android Studio COURSE: Human-Computer Interaction Software, Mobile App, Nielson's HeuristicsWe had a subject called "Compilers" during our 2nd year of Uni which was all about the development and conceptualization of Programming Languages, the concepts behind formal languages and how a compiler does it's work. Our final project involved creating a language using ANTLR4 to define it (i.e a Lexer) and Java to add logic (i.e a Parser) through the use of Listeners and Visitors to walk the Syntax Tree. Our language was all about the ability the define Physical Quantities and Dimensions in order to allow for their computation (for example, a person would be able to compute the value of 10 meters divided by 2 seconds, which would output 5 m/s ; however summing 10 meters and 2 seconds would output an error). Our language would get converted to Java code, which would then be automatically compiled with the normal Java Compiler.
TEAM: Vasco Ramos , Jõao Vasconcelos , Tiago Mendes , Alina Yanchuk TECH: Java, ANTLR4 COURSE: Human-Computer Interaction Programming Language Lexer, Parser, CompilerThis website functioned as both a compendium of all my notes, summaries and exercie resolutions and as a way to help newcomers to my course. Usually our teachers would give us work papers, tests, exercises, etc, but very rarely (or never) would they give us their resolutions or how to solve them. So I decided it'd be benefitial to give my course's (and any other who share the same subjects) freshmen my work so they'd have an easier time and wouldn't pull out as much hair as we did. I did, however, try to be careful enough as to not give them enough that would allow them to just copy over the solutions and skip doing any work (my purpose was to help and not to incentivize lazy behaviour)
TECH: HTML5, CSS, Bootstrap4, JavaScript WebsiteThis was probably the biggest project I did for AETTUA (or at least at the time it was). Deti4Devs consists in an event spanning 2 days of workshops, talks and student-company interaction taking place over at our University Department (DETI). I was both part of the Platform Team, developing a fully fledged website using Django (which I was using for the first time) to both build a REST API, File API and Interface and the Image Team for which I was tasked with creating several elements for facebook posts, posters, etc.
TEAM: AETTUA TECH: Django, Python, HTML5, CSS, Bootstrap5, JavaScript Web Platform, REST APIFor our AI class we had to develop a Smart Agent capable of controlling Bomberman which would be moving around inside a recreation of Bomberman for the Nintendo Entertainment System, made in PyGame by our teacher. We were asked to use a Pathfinding algorithm (A* to be more exact) in order for our agent to be able to move around the level, kill all enemies on the screen, catch powerups and move on to the exit (which was hidden behind one of the destructable walls scattered about and could only be entered after all enemies had been killed). Levels ran from 1 to 15, with each level getting more and more varied enemies, funnily enough, however, our biggest struggle came from the starting levels where the only enemy types consisted of enemies that hugged a wall and followed it, and enemies that directly moved away from the agent (these struggles stemed from the fact that our initial bomb range without any powerups was rather limiting). Overall, pretty fun.
TECH: Python, PyGame COURSE: Artificial Intelligence AI, Pathfinding, A*, GameA small project me and my friend did to pass the time. Basically, he approached me to ask if I wanted to collaborate on making a machine learning AI able to play Flappy Bird: He'd be in charge of creating the ML Algorithm, while all I had to do was make the actual game. I accepted, and we decided it'd be best if the game was made in PyGame due to Python's extensive mathematical modules which would make it easier for him to actually implement the algorithm.
TEAM: Pedro Escaleira TECH: Python, PyGame Machine Learning AI, GameIntrusion Tracker consists of a web platform for the monitoring of accesses to rooms within a building. The aim was to allow admins and security staff to manage everyone who went in and out of each room, alongside allowing users to reserve rooms for meetings and such. Encompassing a backend made in Spring, a frontend made in React and a mobile app this platform was made in about 1 month.
TEAM: Vasco Ramos , Jõao Vasconcelos , Tiago Mendes TECH: Spring Framework, React JS, React Native COURSE: Introduction to Software Engineering Website, REST API, FrontendThe goal of this project was to implement a client-server architecture with secure communication used to send files from clients to a server. Communication security was achieved through the usage of Symmetric Keys, Diffie-Hellman Key Exchange and Key Renegotiation.
TEAM: Vasco Ramos TECH: Python COURSE: Cybersecurity Software, Encryption, CybersecurityThis project was a further iteration over the previous "Secure Communication in a Client-Server Architecture" project. The goal was to improve the security of the previous implementation by adding an Authentication and Access Control step to the communication tunnel. The implementation uses a combination of Asymmetric Kyes, X.509 Certificates for server authentication, either Challenge-Response or ID Authentication for clients.
TEAM: Vasco Ramos TECH: Python COURSE: Cybersecurity Software, Encryption, CybersecurityThis project consists in a program written in C that allows users to input images and process them in a variety of ways such as converting the image to and from grayscale, applying filters like sharpen and blur, adding watermarks and resizing.
TEAM: Pedro Oliveira TECH: C COURSE: Complements of Programming Languages Software, Image Processing, Data StructuresThis project consisted in a program capable of compressing and encoding text or video data in order to reduce their file size without losing information. The program was implemented per the course's specifications both in Python and C++.
TEAM: Pedro Oliveira TECH: Python, C++ COURSE: Complements of Programming Languages Software, Data Compression, Video Encoding, Golomb, OpenCVAether API is a fully fledged web platform consisting of both a back and frontend capable of retreiving and showcasing air quality information to users. The goal of the course was to teach us about the importance of testing every single functionality of our programs. As such this platform was developed following a Test-Driven Development methodology where tests are written prior to actually implementing the corresponding functionalities. Both the API and frontend were tested thoroughly.
TECH: Spring Framework, SpringBoot, Java, JUnit5, Hamcrest, Mockito, Sellenium Web Driver, Awaitility, H2 Database, HTML5, CSS, Bootstrap4, JavaScript COURSE: Software Testing and Quality Control Web Platform, REST API, Unit Testing, Integration Testing, Test-Driven Development, CI/CDGrid Marketplace is a web platform and mobile app for buying, selling and auctioning video games. This online storefront was the second project of the Software Testing and Quality Control and had us work following an AGILE methodology with weekly SCRUMs. The web platform was built using the Spring Framework and the mobile app using React Native. The project also implemented a robust CI/CD pipeline the steps of which were shown using a complementary Python script running in a remote Raspberry PI which would inform viewers of the current deployment stage.
TEAM: Pedro Oliveira Pedro Escaleira Rafael Simões TECH: Spring Framework, SpringBoot, Java, JUnit5, Hamcrest, Mockito, Jest, Sellenium Web Driver, React Native, React JS, Raspberry Pi, PyGame COURSE: Software Testing and Quality Control Web Platform, Mobile App, REST API, Unit Testing, Integration Testing, SCRUM, AGILE, Test-Driven DevelopmentMinerva was the final project of my Bachelor's degree. This project consisted in a set of bots built using machine learning with the intent of infiltrating social networks (Twitter), generate controversy and insert themselves into other users. The bots mimicked human behavior, replying and creating posts in order to gather more followers. Their main goal was to get as many followers and following as many people according to a set of keywords (e.g Politics, Football, and so on). The bots would then report back with a network of connection between users which could then be showcased through our Web Platform's frontend.
TEAM: Pedro Oliveira Pedro Escaleira Rafael Simões TECH: Python, Django, React JS, PostgreSQL, Redis, Neo4J, MongoDB, ParlAI, Keras, RabbitMQ, ZeroMQ COURSE: Computer Science and Engineering Project Web Platform, REST API, Machine LearningThis project was my first attempt at building and training a Machine Learning algorithm. The project itself consisted in the usage of a slew of Machine Learning methodologies for distinguishing between different Traffic Signs (GTSB). To solve this problem we used a set of Deep Neural Networks and Image Processing steps.
TEAM: Pedro Oliveira TECH: Python, Jupyter Notebook, Anaconda3, Scikit-Image, TensorFlow, Scikit-Learn, Pandas, Seaborn, Matplotlib COURSE: Machine Learning Topics Machine Learning AI, Neural Networks, LeNet, Image Processing, Computer VisionThe second Machine Learning Topics project consisted in solving the task of Face Detection in images. To tackle this issue we tested and compared several types of classifiers namely State Vector Machines, HOG Windows and Multi-Task Cascaded Convolutional Neural Networks.
TEAM: Pedro Oliveira TECH: Python, Jupyter Notebook, Anaconda3, Scikit-Image, TensorFlow, Scikit-Learn, Pandas, Seaborn, Matplotlib COURSE: Machine Learning Topics Machine Learning AI, Image Processing, Cascade Classifiers, HOG Windows w/ SVM Classifiers, MTCNN, PaperFor this projcet we were given two distinct dataset. We were asked to analyze them through Deta Analysis steps and, according to our findings, perform Data Preparation and apply the appropriate Machine Learning Models. We were also asked to analyze the achieved results, hypothesize causes for the outputs and identify possible data mining improvements.
TEAM: Tiago Melo Pedro Pires TECH: Python, Jupyter Notebook, Anaconda3, Scikit-Image, TensorFlow, Scikit-Learn, Pandas, Seaborn, Matplotlib COURSE: Data Science Machine Learning, Data Science Analysis, Classification Algorithms, Unsupervised Learning Techniques, Data MiningThe "Rose Engine" was our final project for the Computer Graphics course. Throughout the semester we had been building a slew of C++ methods for matrix computation, vector operations and Quaternion transformations. For the final project we had to use this "library" we had been building to create a propper graphical engine centered around one main scene. Our idea was to try and replicate the "Enchanted Rose" from the classic Disney movie "Beauty and the Beast". We implemented concepts such as Blinn-Phong Real Time Lighting, Shadow Mapping, Particle System, Glass Materials, Procedural Texture Generation and so on.
TEAM: Daniel Gonçalves, Henrique Gaspar, Guilherme Menezes TECH: C++, OpenGL, GLSL, GLFW COURSE: Computer Graphics Graphical EngineThis project consisted in the implementation of several widely popular Collision Avoidance Algorithms. Namely I had to implement collision avoidance with both dynamic and static obstacles with either Priority or Blending movement. I also had to implement Collision Avoidance using the Reciprocal Velocity Obstacles algorithm.
TECH: Unity, C# COURSE: Artificial Intelligence for Games Game, AI, Collision Avoidance, Reciprocal Velocity Obstacle, Static Obstical Avoidance, Priority Movement, Blending MovementThe goal of this project was to implement and compare different common Pathfinding algorithms. The algorithms included Traditional A*, NodeArray A* and JPS+. Additionally these algorithms were then integrated with Pathfollowing algorithms with Collision Avoidance.
TECH: Unity, C# COURSE: Artificial Intelligence for Games Game, AI, Pathfinding, A*, Heuristics, NodeArray A*, JPS+, PathfollowingFor this project I had to implement different Decision Making algorithms. Namely Depth-Limited Goal Oriented Action Planning, Monte-Carlo Tree Search with a Limited and Unlimited Biased Playout and Rapid Action Value Estimation optimization. I also implemented an additional optimization algorithm called Child Culling which stemmed from the idea of adding world knowledge to the agent in order to more quickly discard certain branches of the decision tree. Furthermore I also created a World State representation similar to the one used in the videogame F.E.A.R. using a fixed size array with all world state data rather than the default recursive one.
TECH: Unity, C# COURSE: Artificial Intelligence for Games Game, AI, Decision Making, Depth-Limited GOAP, Monte-Carlo Tree Search, Biased Playout, Limited Biased Playout, RAVE, Child Culling, FEAR World ModelThe concept for this project was the usage of Unity's ML-Agents framework in order to train an agent to play the classic game "Asteroids". As such, the elaboration of this work consisted in the creation of the game itself, mimicking the original's mechanics as best as possible, adapting it in order to allow for the integration with the ML-Agents framework and training agents to play the game through Reinforcement Learning. Training was done in several ways, including through the usage of Curriculum Learning with incremental stages of difficulty.
TECH: Unity, C#, Unity's MLAgents COURSE: Artificial Intelligence for Games Game, Machine Learning AI, Reinforcement Learning, PPO, Curriculum LearningFor this course's project we were tasked with create a set of agents who would cooperate in order to achieve a common goal. For this, we chose to create sets of bots capable of playing the videogame Rocket League. As we were a 3-person team we decided to create 3 different bots. The one I ended up being in charge of was named Primus and it implemented a decision tree in order to analyze both its environment, teammates and enemies in order to decide what to do next. Rather than communicate directly with its teammates, this bot observes what they are doing and reacts accordingly. I also helped in the creation of the second group of bots - Capitão/Marujo. These bots implemented a Hive-Mind structure where two of the bots - Marujos - simply followed whatever the main bot - Capitão - told them to do. The results of either of these sets of bots was astounding as they managed to compete at a fairly high level (higher than me at least).
TEAM: Tiago Melo Jorge Brown TECH: Python, RLBot COURSE: Autonomous Agents and Multi-Agent Systems AI, Cooperative Agents, Reactive Agents, Game, Rocket LeagueThis project consists in an implementation of a fully fledged Ray Tracer capable of rendering a multitude of scenes. Aside from ray tracing we also implemented all of the Ray-Geometry intersection methodologies, Depth of Field, Soft Shadows, Fuzzy Reflections, Motion Blur, Anti Aliasing and optimization "acceleration" structures in the form of Bounding Volume Hierarchy and Uniform Grid.
TEAM: Daniel Gonçalves, Henrique Gaspar, TECH: C++ COURSE: 3D Programming Whitted RayTracer, Fresnel Equations, Schlick's Approximation, Blinn-Phong, Ray-Geometry Intersection Detection, Ray Distribution, Antialiasing, Soft Shadows, Depth Of Field, Fuzzy Reflections, Motion Blur, Acceleration Structures, Bounding Volume Hierarchy, Uniform GridThe GLSL RayTracer was a continuation of the Whitted RayTracer project, now taking advantage of the GPU's rendering capabilities using GLSL. We also implemented additional features such as Fuzzy Reflections and Refractions, Depth of Field, Motion Blur, Direct and Scatter Lighting and Russian Roulette Optimization.
TEAM: Daniel Gonçalves, Henrique Gaspar, TECH: C++, OpenGL, GLSL COURSE: 3D Programming Progressive RayTracer, Ray-Geometry Intersection Detection, Direct and Scatter Lighting, Fuzzy Reflections, Fuzzy Refractions, Depth Of Field, Motion Blur, Russian Roulette Optimization, Oribtal CameraThe final project of the 3D Programming course had us build a game using the Unity3D Engine in order to showcase several of its graphical capabilities. We decided to use the Universal Rendering Pipeline and made Tub Wars - An arena shooter where the player controls a rubber duck trying to survive for as long as possible in a draining bath tub. The player has to dodge and kill enemy ducks and avoid being shot by water balloons. We created particle systems, applied post processing, ambient occlusion, built a dynamic depth of field system, implemented both static and dynamic reflections, billboarding and made a water shader from the ground up. In order to fully showcase the game's graphics we also added a "freecam" mode which allows the user to fully fly around the environment and take screenshots.
TEAM: Daniel Gonçalves, Henrique Gaspar, TECH: Unity, C# COURSE: 3D Programming Game, AI, Graphics Showcase, Universal Rendering Pipeline, Global Illumination, Ambient Occlusion, Post Processing, Particle Systems, Bump Mapping, Billboarding, Reflections, Shaders, Dynamic Depth Of FieldMoirai's Trial is an online 8-player free-for-all battle royale with a mix of cooperative challenges, PVP phases and powerups. The game was built for the Game Development Methodologies course and as such, throughout development we had to iterate over a core design principle, perform user tests, create prototypes and write a whole slew of feedback and design documents.
TEAM: Daniel Gonçalves, Diogo Sá, Martim Norte TECH: Unity, C# COURSE: Game Development Methodologies Multiplayer GameMaster Clock is a time-warping metroidvania built for the Time Game Jam 2021. The core gimmick of the game is that every 15 minutes, or whenver the player dies, the game rewinds back to the start. All enemies respawn and the entire level resets, but the player keeps all powerups they've gathered so far, allowing them to progress deeper in the dungeon. A fun touch is that, at the end of the game, the player has to fight against clones of themselves empowered with every possible powerup. The more loops the player has gone through the more clones will spawn, encouraging them to beat the game in as little deaths as possible.
TEAM: Carlos Marques, Julia Pinheiro, Tiago Martins TECH: Unity, C# Game, Time GameJamPlataforma Ensino Ativo or "PEA" was the website I solo-developed while working under IST's pedagogical council. The aim of the platform is to provide several learning resources for portuguese-speaking teachers in order to educate them on how to implement "Active Learning" in their classrooms.
TECH: HTML5, CSS, Bootstrap5 WebsiteNeon Rush is a very simple endless runner built in a week as part of the GameDev Técnico Recruitment Process.
TECH: GameMaker Studio 2 GameThe base idea behind this project consisted in the development of a tool that could be used in a pedagogical fashion to instruct users about the functioning of the PageRank algorithm and its many nuances. Our efforts boiled down to the construction of an appealing graphical environment that would allow anyone, no matter the level of knowledge on the subject, to explore and observe how the PageRank algorithm works and shifts in accordance to changes made to a network. Furthermore, it was also asked that an additional algorithm was also implemented - a modification to the baseline PageRank algorithm that would take into consideration the influence of the quality of a page's quality on its score, inspired by similar principles of market adoption evolution overtime when considering the available products' quality and initial market share.
TECH: React JS, MathJS Website, PageRank, Quality PageRank, Pedagogical ToolHexRoutes is a new variant of the classic tabletop game Hex introducing new mechanics, random events and story context.
COURSE: Game Design Tabletop GameClipping Mask was a game developed in about 2 weeks for the Game Design course. The game's main mechanic and namesake "Clipping Mask" allows players to alter properties of obstacles in the environment by copying and pasting from others. Using this power, which is limited to a certain number of uses for each level, the player must navigate their surroundings by platforming and solving puzzles to complete each level.
TECH: Unity; C#; Aseprite COURSE: Game Design GameBotParty VR was the final project of the Virtual Reality course. The main goal was to implement and compare the performance of several VR Interaction techniques to check which ones users preferred in aspects like immersion, comfort and so on. In total 20 different techniques were implemented, including Controller Buttons, Hand Gestures, Head Nodding, Gaze and other combinations of input methodologies.
TECH: Unity; C#; Oculus SDK COURSE: Game Design Game, Virtual RealityFeedback Mentor is a pedagogical website with several resources teaching its users about all different aspects of Feedback, from Feedback Sandwich to giving/receiving Feedback.
TECH: HTML; Bootstrap5; Javascript COURSE: Communication Skills in Computer Science and Engineering WebsiteComplainer Trainer is a pedagogical website with several resources and exercises teaching its users about different topics of Complaints in the Workplace. From Positive/Negative Word of Mouth, to handling complaints and even the differences between complaint management across different work cultures.
TECH: HTML; Bootstrap5; Javascript COURSE: Communication Skills in Computer Science and Engineering WebsiteMy Master Thesis project involved the creation of a program capable of both identifying a virtual character's emotion and changing it in real time during the course of its locomotion animation. To do this I used a set of Gradient Tree Boosting Regressors and AutoEncoders in order to map the character's extracted movement features (Laban Movement Analysis features extracted over keyframes) into Pleasure, Arousal and Dominance emotional coordinates, and vice versa. Algorithms and Inverse Kinematics were then used to convert the computed features into actual movement changes, to great success. An article written about this thesis was published in the conference IEEE International Symposium on Multimedia 2022.
TECH: Python; PyBullet; Jupyter Notebook; Scikit-Image; Scikit-Learn; Keras; Pandas; Seaborn; Matplotlib; COURSE: Master Thesis Software; Machine Learning; Algorithms; Computer Animation; Emotion Synthesis; Emotion Identification: AutoEncoders; Gradient Tree Boosting Regression; Inverse Kinematics; Laban Movement Analysis; PAD Emotional ModelThe Night of the Living Worm was developed in a week for the Scream Jam 2021 alongside two other members of GameDev Técnico. As the sole programmer on the project I was tasked with implementing all game mechanics, interactions and logic, alongside importing all art assets into the project and contribute to the design. The most important feature I worked on is the monster's A.I which uses a state machine to swap between different states of chase, pursuit and wander.
TEAM: Patrícia Pinheiro, Tiago Martins TECH: Unity; C# GameThis project was developed in 2 days during the Nordic Game Jam 2022 in Coppenhagen Denmark. We had the opportunity to collaborate with LEGO on this project and use their in-house development kit. I was tasked with implementing, alongside other aspects of gameplay, the control scheme using controllers of LEGO.
TEAM: André Antunes, João Lopes, Liza Yurkovich, Nuno Ramos TECH: Unity; C#; LEGO SDK GameFelicitá was a game developed for the GJL GameParade Gamejam 2022 alongside other members of GameDev Técnico. The game received very favorable reviews by the audience, being voted as one of the best games in the jam. It was also nominated for several judge awards and managed to get Best Art Direction from amongst over 45 other entries.
TEAM: Alexandre Duarte, André Antunes, Guilherme Pereira, Liza Yurkevich TECH: Unity; C# GameCulto is a cult management game made in about 3 weeks. This was a solo project I made for fun and to hone and showcase my game making skills. From art, to design and code, everything was custom made from scratch for this game.
TECH: Unity; C#; Aseprite GameIncidence is an online multiplayer First Person Shooter made in Unreal Engine 5. This game was made as a first attempt at learning and using Unreal Engine at a larger scale. I chose to make a multiplayer game due to their industry popularity and to showcase my own capabilities.
TECH: Unreal Engine 5; C++ Game