Tanklike is a top-down shooter rogue-like tank game developed in Unity using C#. The game is inspired by Battle City, it expands on strategic tank combat with procedural mechanics and more advanced gameplay.
- Gameplay Engineer – Developed movement, aiming, shooting, and combat mechanics.
- Tools Engineer – Built custom in-editor tools to speed up level design.
- Systems Designer – Designed modular mechanics for scalable gameplay.
- Tech Artist – Implemented shaders and visual effects.
- Game Designer – Co-designed progression and player experience.
- Game Engine: Unity
- Programming Language: C#
- Tools & Software:
- Adobe Photoshop – UI and texture work
- Blender – 3D modeling
- GitHub – Version control
- Visual Studio – Development environment
- Audacity – Audio editing
- Notion & Trello – Project management
This project follows a structured coding standard for better maintainability and clarity across all team members. For detailed guidelines, see the Coding Standards document.
This repository only contains scripts. No assets, prefabs, or scenes are included.
SHOW REPO STRUCTURE
Scripts/
|--- Combat
| |--- Abilities
| |--- Ammunition
| |--- Destructibles
| |--- Editor
| |--- Elements
| |--- ShotsConfigurations
| |--- Tools
|--- Editor
| |--- CustomSearcher
| |--- GameEditor
| |--- Inspector
| |--- RoomPainter
|--- EditorTools
|--- Environment
| |--- Collectables
| |--- Editor
| |--- Interactables
| |--- Items
| |--- LevelGenerator
| | |--- LevelPainter
| | |--- MapMaker
| |--- Props
| |--- Rooms
| |--- Shops
|--- Global
| |--- Attributes
| |--- Bosses
| |--- Camera
| |--- Cheats
| |--- Editor
| |--- Enemies
| |--- Input
| |--- Interfaces
| |--- LoadingScreen
| |--- MainMenu
| |--- Others
| |--- Players
| |--- PoolingSystem
| |--- Reports
| |--- SceneControllers
| |--- Screen
|--- Misc
|--- PlayTest
|--- Snippets
|--- Sound
|--- Testing
| |--- LevelDesign
| |--- Navigation
| |--- Playground
|--- UI
| |--- _Common
| |--- AbilitySelection
| |--- HealthBars
| |--- HUD
| | |--- DamageScreen
| | |--- HealthBar
| | |--- Notifications
| | |--- OffScreenIndicators
| |--- InGame
| | |--- DamagePopUp
| | |--- Crosshair
| |--- Inputs
| |--- Inventory
| |--- MiniMap
| |--- PauseMenu
| |--- Shop
| |--- SkillTree
| |--- Tutorial
|--- UnitControllers
| |--- BaseClasses
| | |--- TankParts
| | |--- SpecialPartsAnimations
| |--- Bosses
| |--- Core
| |--- Editor
| |--- Enemies
| |--- MiniPlayers
| |--- Players
| | |--- Crosshair
| | |--- Indicators
| | |--- MiniTankPlayer
| | |--- PlayerModifiableStats
| | |--- Vanguard
| |--- Summons
|--- Utils- Unit Controller – A component that governs all the components needed to control a unit in the game. It handles the unit's shooting, movement, visuals, stats, controls, constraints, and more.
- Enemy AI – Implemented using a custom Behavior Tree Framework that I developed. It's a decoupled system from the game's systems, which makes it easy to implement and change enemy behavior in run-time.
- Ammunition – Handles projectile, rocket, and laser movement, collision, and damage calculations. These ammunition types have different modifiers in the form of
scriptable objectsthat makes it easy to change their behaviors. For example, projectiles have anOnImpactmodifier which can aOneTargetModifier,AOEModifier,PiercingModifer,SpawnProjectileModifier, andMultipleImpactModifierwhich can hold multiple modifier references. - Health System – Manages health and damage interactions. Every method in the system that modifies an entity's health, calls
OnHealthChanged(current, previous, max)event, which triggers UI changes, visual effects on the entity, and any other listeners to the event.
- Room Painters – A system that filters a room's tiles based on provided rules, such as identifying corners for crates or strategic placement for enemies where obstacles, other enemies placement and the players' positioning is taken into account.
- Level Generator – While specific rooms layouts are premade, the build of the overall map is procedural. The system is given a
Level Datawhich holds the following:
| Data | Description |
|---|---|
String LevelName |
The name of the level. |
MapTileStyler Styler |
Holds data related to how the level generated should be styled. It determines the assets and textures to be used in the level generation process. |
MapTiles_SO BossRoom |
The map asset for the boss room, as different bosses will have different room layouts. |
BossRoomGate BossGate |
A reference to the prefab of the boss room gate. |
BossData BossData |
A Scriptable Object that holds data about the boss of the level, including the prefab and stats of the boss. |
Audio LevelMusic |
The background music to play in the level. |
List<MapTiles_SO> MapsPool |
A list of premade map assets that should be generated. The map asset holds an array of enum values representing the type of tile, and x, y coordinates to represent the tile's position on the room's map. |
Vector2Int DroppersRange |
The number of dropper instances that should be spawned in a room (such as crates or rocks). |
float CratesToRockChance |
The ratio between spawning a crate vs a rock for a dropper, with the crate being more valuable than the rock. |
Vector2Int ExplosivesRange |
The number of explosive props that should be placed in a room. Explosives are props that expode upon impact by either the players or enemies -- they deal damage to both parties. |
Vector2Int DestructibleWallsRange |
The number of destructible walls in a room room. |
List<WaveData> Waves |
Enemy waves that should be spawned in the level. |
ParticleSystem WeatherVFX |
The weather particle effects that should play in the level. |
- Skill Tree – Handles the players' in-run upgrades and progression. Unlike most of the Rogue-likes where players are given random options for upgrades or loot, in Tanklike, the player is given more agency over the type of upgrades they want to go for. The specific upgrade, of course, will be the player's choice from a random set of two options. For that, the UI representation of the skill tree has to be procedural and built and updated based on the player character at run-time which is what this system handles.

- Map Maker – A custom in-editor level design tool for quick iteration.
- Game Editor – Provides debugging utilities for performance monitoring.
- Behavior Tree Editor -
- Custom Attributes - A set of attributes to save time and help prevent null reference errors:
| Attribute | Description |
|---|---|
[AllowCreationIfNull(string path)] |
Allows the creation of an asset of the specified type at the provided path if the field is null. This only works for asset data types (e.g., ScriptableObjects). |
[EditorName(string displayName] |
Assigns a custom name to the variable for display in the Unity Inspector. |
[HasInterface(Type interfaceType)] |
Highlights the field in red if the assigned reference does not implement the specified interface type. |
[OnChildren(bool forceReference)] |
Automatically assigns a reference to a component of the required type from the children of the GameObject. If forceReference is true, a new child GameObject with the required component is created if none exists. |
[OnSelf(bool forceReference)] |
Automatically assigns a reference to a component of the required type from the GameObject itself. If forceReference is true, the component is added to the GameObject if it doesn't already exist. |
[Required] |
Highlights the field in red in the Inspector if the value is null. |
[ReadOnly] |
Makes the field non-editable in the Inspector. |
- This repository contains code documentation, not a public source code repository.
- For more details and some gameplay footage, visit my Portfolio or view the showcase video on Youtube.
- If you're interested in playing the game, download the latest release from Releases.