Arvutiteaduse instituut
  1. Kursused
  2. 2025/26 sügis
  3. Arvutigraafika projekt (MTAT.03.328)
EN
Logi sisse

Arvutigraafika projekt 2025/26 sügis

  • Main
  • Projects
  • Topics
  • Results and Schedule
  • Formatting Hints
  • Links

Ink & Echoes

Autor: Fedir Kyrychenko

Game for: The Healthy Gamer Game Jam


Theme: Your game is about fictional HG community member, Morgan (with apologies to anyone actually named Morgan). Morgan can be your main character, the one playing the game, or it could be something that reflects their experiences. You can include them literally as a named character, or use this loosely as a guideline and not include the name – up to you!

  • Time moves strangely for Morgan – hours can feel like minutes, and deadlines appear suddenly (time dilation)
  • Morgan has a collection of half-finished projects that each felt like the most important thing in the world when they started (project hopping)
  • Morgan connects dots others don't see, creating insights through unconventional mental paths (nonlinear thought)

My interpretation: Morgana is a scientist with ADHD who accidentally falls into the world of her work diary. Here, time flows unpredictably: hours compress into minutes, and deadlines appear out of nowhere. The world is drawn like living sketches of her past ideas – unfinished projects and chaotic visions forming a labyrinth of puzzles she must navigate to find her way back to herself.

Genre: Puzzle, Pixel Art, Top-Down

Already implemented in Godot:

  • Tile-based top-down grid system
  • Grid-based character movement
  • Box pushing mechanics
  • One type of trap
  • Basic enemy with pathfinding AI

To do examples:

  • Create proper sprites (currently using quick test placeholders)
  • Complete core mechanics: time stop, slime attack on the player, rope hook
  • Add main menu
  • Add sound design and UI elements (e.g. death screen)

Milestone 1 (23.09)

  • Time freeze player interaction(1 hour) Done by my partner, so I added its cooldown on 3 steps and indicator (1 hour).
  • Slime full set of animations and new interaction with player – attack action (2 hours)
  • Level selection UI: research and writing code base, no design yet (1.5 hours). Here is the idea I followed:
  • New mechanics: key that can be picked up and used to open the lock (2 hours)

Milestone 2 (23.09)

  • New electric line trap: shader research, shader writing and full logic. Stops by walls and boxes (4 hours)
  • Slime and player death from electric line (1 hours)
  • Wobbling shader to emulate ink consistency on the screen (1 hour)

drive.google with game

The most challenging part of this milestone was developing the electric plasma line that reliably blocks player movement. The initial iteration was based on a pixel lightning sprite with an animation of roughly six frames. However, it quickly became clear that this approach was not suitable: the lightning periodically disappeared, creating a misleading impression of a “safe” moment when the player could pass through. In addition, it was strictly limited by the sprite’s length (about five tiles) which prevented the trap from being scaled flexibly. This contradicted my original idea, so I abandoned the sprite-based approach early on.

During this experiment, however, I made progress toward my final concept. In particular, I wrote a shader that allowed the lightning animation to be “cut off” in places where it was partially blocked by crates. However, this method had a significant drawback: the occlusion only worked in multiples of the tile size. In other words, the lightning could only be correctly hidden for an integer number of segments (one, two, three, etc.), which severely limited the system’s flexibility.

After another brainstorming session, I decided to develop a fully custom shader that would display the electric current continuously and maintain visual dynamics without any “dead” frames. I came up with a simple but effective mechanic that solved most of the visual problems in complex environment configurations.

Instead of using a sprite, I decided to use a line with two control points stretching from the starting position to the collision point with any obstacle such as a wall or an irregularly shaped object like a crate. Collision detection was implemented using colliders, specifically a raycast, which made it possible to accurately determine where the lightning should stop.

The line itself worked perfectly, and I was very pleased with the result. The final major challenge was applying the shader to it. The main issue was that the shader had to render pixels along the line at the exact same size as the screen’s rendered pixels. This problem was solved by using screen coordinates and pixelization in the shader calculations.

As a finishing touch, I added a transparency gradient toward the end of the line, so that the player can clearly see where the lightning originates.

Milestone 3 (07.10)

  • New mechanics: rope hook to deal with boxes and slimes (2 hours)
  • Player death animation and death screen (1.5 hours)
  • sound effects: trap sounds, electric plasma sounds, slime sounds, door opening sounds (2-3 hours)


The most challenging part of this milestone was developing a dynamic sound volume system that adjusts based on the player’s distance from the electric plasma. I implemented it using the following approach:

Used Resources

  • Energy Beams
  • Noise Offset (Wiggle)
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused