cd ../portfolio
Phase 1 // Godot Engine

COLORWAR

A 2D top-down action RPG built in Godot Engine. Six enemy factions fight for territory across a neon-drenched arena. Your first game. The one that started everything.

Created May 9, 2025 Size 56 MB Lang GDScript 100% Engine Godot 4.x

Project Overview

COLORWAR is a 2D top-down action RPG where six color-coded enemy factions battle for territorial dominance. Built entirely in Godot Engine with GDScript, it features a weapon inventory system, health mechanics, and a distinctive neon tileset aesthetic. This was the project that proved game development was possible without a CS degree -- just curiosity and documentation.

6
Enemy Types with Territory AI
3
Weapons in Inventory System
56 MB
Total Project Size
100%
GDScript

Technology

Pure Godot. No plugins, no external libraries. Everything from scratch using the engine's built-in tools and GDScript.

GDScript Godot 4.x Scene Tree TileMap Area2D CharacterBody2D AnimationPlayer Signals

Scene Tree Architecture

Godot's node-based composition model. Each enemy type is a scene that inherits from a base enemy, with behavior defined by attached scripts and exported variables.

COLORWAR/ scenes/ player/ Player.tscn # CharacterBody2D + weapon mount PlayerController.gd # Input handling + state machine enemies/ BaseEnemy.tscn # Shared enemy template RedFaction.tscn # Aggressive melee BlueFaction.tscn # Ranged support GreenFaction.tscn # Territorial patrol weapons/ Pistol.tscn Shotgun.tscn Rifle.tscn world/ Arena.tscn # TileMap + spawn zones NeonTileset.tres # Custom tileset resource scripts/ territory_ai.gd # Faction zone control health_system.gd # Shared HP component inventory.gd # Weapon switching

Key Features

6 Enemy Factions
Color-coded factions with distinct AI behaviors: aggressive melee, ranged support, territorial patrol, and more.
Territory AI
Enemies claim and defend zones on the map. Faction boundaries shift dynamically based on combat outcomes.
🔫
Weapon Inventory
Three guns with distinct fire rates, spreads, and damage profiles. Quick-swap system with visual feedback.
Neon Tileset
Custom-designed glowing tile system that defines the game's aesthetic. Bright faction colors against dark backgrounds.
Health System
Reusable HP component attached to any entity. Visual damage feedback, knockback on hit, and death particles.
🎮
Node Composition
Built on Godot's scene tree model -- every system is a composable node that can be mixed into any entity.

Code Snapshot

The territory AI system -- each faction checks nearby zones and decides whether to advance, retreat, or hold position.

territory_ai.gd
extends Node2D

@export var faction_color: Color
@export var aggression: float = 0.6
@export var territory_radius: float = 200.0

var controlled_zones: Array = []
var enemies_in_range: Array = []

func _physics_process(delta):
    scan_territory()
    if enemies_in_range.size() > 0:
        if aggression > 0.5:
            advance_toward(enemies_in_range[0])
        else:
            hold_position()
    else:
        patrol_zone()

func scan_territory():
    # Check overlapping Area2D zones
    var areas = $DetectionZone.get_overlapping_areas()
    for area in areas:
        if area.is_in_group("territory"):
            claim_zone(area)

Development Timeline

May 9, 2025
Project Created
First Godot project. Set up scene tree, learned basic node types.
Week 1
Player Movement & Basic Combat
CharacterBody2D with input handling. First weapon fires bullets.
Week 2
Enemy AI & Faction System
Six enemy types with color-coded factions. Territory zones implemented.
Week 3
Neon Tileset & Polish
Custom TileMap with glowing tiles. Health bars, weapon inventory, particles.

What This Project Taught

01

The Scene Tree Changes Everything

Godot's node composition model was the mental breakthrough. Instead of inheritance hierarchies, you compose behavior by attaching child nodes. A health bar is just a child of any entity that needs HP.

02

Start Simple, Add Complexity

The first enemy was a red square that moved toward the player. By the end, there were six factions with territory logic. Each layer built on the last. Never start with the complex version.

03

Signals Over Direct References

Early code was spaghetti -- everything referenced everything else. Learning Godot's signal system was the first step toward decoupled architecture. When an enemy dies, it emits a signal. Whoever cares, connects.

04

A Finished Game Beats a Perfect One

COLORWAR is rough. The AI is simple. The art is programmer art. But it runs, it plays, and it shipped. That matters more than any feature that never got built.