Independent editorial illustration about game development in Iran

Game Development in Iran: From Learning to a First Release

Start with a playable loop that ends and restarts. Connect programming, art and testing to the needs of that loop rather than collecting unrelated courses. For a local release, inspect the intended audience, device constraints and distribution path early. A small finished prototype is more useful evidence than a large unfinished feature list.

The Project Question and Its Limits

Keep state ownership explicit. The system that accepts an action should settle its result; animation, sound and interface layers describe that result. Review initialization and cleanup as well as the happy path. A component that works once can still fail after pooling, reloading or returning from a pause.

From an Idea to Reviewable Evidence

Choose a small representative case that answers the question in this article. Write the starting condition and the expected result before running it. Preserve the version and relevant settings so a second observation does not quietly become a different experiment. A demonstration is strongest when its limitations are visible alongside the part that works.

A Practical Experiment and an Observation Sheet

Use a small scene with a known initial state. The purpose is to isolate the rule under discussion; changing several systems at once makes the result harder to interpret. Keep the build, input configuration and display conditions beside the observation so the next attempt is genuinely comparable.

  1. complete one loop. First write the expected contract and record an ordinary attempt. If the baseline is ambiguous, a later boundary case will be difficult to interpret as well.
  2. test on the target device. Choose a case close to the rule boundary and another outside it. Compare the observed result with the expectation; a small visual difference can expose an incorrect state transition.
  3. write a release question list. Repeat the relevant path after a pause, restart or applicable change. Inspect whether anything survives from the previous attempt and which system is responsible for releasing it.

A Failure Case Worth Reproducing

Acceptance Criteria before Expansion

The team can explain the result, reproduce the relevant case and name the remaining limitation.

TestEvidence to retain
complete one loopKeep the build and starting state with the baseline outcome.
test on the target deviceRecord the boundary and its accepted or rejected result.
write a release question listCompare the repeated attempt with the previous ending state.

Keep state ownership explicit. The system that accepts an action should settle its result; animation, sound and interface layers describe that result. Review initialization and cleanup as well as the happy path. A component that works once can still fail after pooling, reloading or returning from a pause.

Frequently Asked Questions

When is the prototype ready to expand?

Expand after the stated question has a reproducible answer in the intended configuration. Keep boundary and relevant repetition evidence as well as the successful path.

Does one successful run prove every case?

No. The case “A result from one configuration is applied to a different version or audience without checking compatibility.” deserves its own check. Test it beside the ordinary condition and limit the conclusion to the configurations actually inspected.

Further Reading and Related Projects

Latest blog posts

Independent editorial illustration about Unity Godot Unreal comparison

Unity, Godot or Unreal: Comparing Engines for One Project

Compare engines against the same small project requirements. Rendering needs, export targets, available skills and maintenance matter more than a general.

Read article
Editorial illustration: Memory Budgets: Assets Have a Cost

Memory Budgets: Assets Have a Cost

Images, audio and runtime objects all occupy memory, even when their files look small on disk.

Read article
Editorial illustration: Object Pooling: Reuse with Clear Responsibilities

Object Pooling: Reuse with Clear Responsibilities

Pooling keeps objects available for reuse instead of creating and destroying them for every short appearance.

Read article
Dalo