Skip to content

Quick Start

Your First Program

Create a file called player.morph:

entity Player {
  has hp: 100
  has name: "Hero"
  event init {
    emit log("Player created!")
    emit damage(25)  # Trigger damage event from init
  }
  event damage(amount) {
    hp - amount -> hp
    emit log("HP remaining:", hp)
    check hp <= 0: emit die
  }
  event die {
    emit log("Game Over")
  }
}

Running Morphyn Programs

Run your program:

morphyn player.morph
Output:
Player created!
HP remaining: 75


How Events Work

Events in Morphyn are reactive, not automatic. They only run when: 1. Triggered from init or tick:

entity Game {
  event init {
    emit player.damage(50)  # Triggers player's damage event
  }
  event tick(dt) {
    emit enemy.update(dt)   # Triggers enemy's update event
  }
}
2. Triggered externally (from C# in Unity):
MorphynController.Instance.Emit("Player", "damage", 50);
3. Chained from other events:
event damage(amount) {
  hp - amount -> hp
  check hp <= 0: emit die  # damage triggers die
}

Important

Custom events like damage, heal, attack will not run unless explicitly triggered. Only init and tick run automatically.


Runtime Features

Hot Reload

The runtime automatically watches for file changes and reloads entity logic without restarting. Example: 1. Run morphyn player.morph 2. Edit the file: change emit damage(25) to emit damage(75) 3. Save 4. Logic updates instantly without restarting

Tick System

Entities with a tick event receive frame updates:

entity Timer {
  has elapsed: 0
  event tick(dt) {
    # dt = milliseconds since last frame
    elapsed + dt -> elapsed
    emit log("Time:", elapsed)
  }
}

Init Event

Runs once when entity is created:

entity Player {
  has hp: 100
  event init {
    emit log("Player spawned with", hp, "HP")
  }
}