Posted by & filed under Project, pyTactics.

Over the last month or so, I’ve been learning and tinkering around with Python. From there, I’ve also played with Pygame for general drawing of sprites and input. I think I’ve reached a level of understanding that would allow me to create a decent project. My inspiration for this is Jay Barnson’s article on Building a Game From Scratch With No Budget. He allocated only a week, or a full 40 hours for the whole development.

I’ll be doing something similar. The 40 hour time limit will be used to create a tech demo of a python implementation of a Final Fantasy Tactics esque game. Using Python + Pygame with either free to use resources or my horible programmer art. As I have no skills whatsoever with music, I’ll be relying on CC Liscence music and for sound effects.

The goal is to have a playable battle engine by weeks end (or 40 Hours).

  • 2D Isometric map with heighmap.
  • Unit turns based on stats (units can be stunned thus delaying them).
  • Technique system.
  • Area effect techniques.

Focus on gameplay not sprites, and priotize the actual chunk of gametime (battles vs story). The following are secondary for completion in the tech demo.

  • Attack animations. Use a simple damage count.
  • Item sprites.
  • Storyboard scenes.

Skimping on Music and sound effects can turn even the most fun games into boring facebook games. So don’t forget it!

40 Hours Schedule

No more than 8 hours can be used in a particular day. Forcing a fresh look at the problem.

Planning (Hour 1)

The first hour will be done away from the IDE, either designing the layout with pen and paper or problem solving tasks. Any extra time at this point can be used researching for game art/resources.

Working Scene (Hour 2-10)

The following is the big list to be achieved by hour 40. The first stretch should try to outline as many areas as possible, but mainly focus on getting a running output.

  1. Isometric Scene with Character entities with placeholder artwork.
  2. Movement and Path-Finding.
  3. HUD (Heads Up Display) with current unit.
  4. Timeline and Turn management (Begin unit stats: unit speed).
  5. Unit stats, equipment, inventory.
  6. Items. Accessible from in-battle turn menu for potions.
  7. Attack types. Attack range and Area of effect. Hook onto weapon type items. Dump the rest in technique menu.
  8. Factions. Battle endgame conditions.

Evaluate Progress (Hour 11)

How far is the engine along, do I need to add more tasks or remove features? Should at least have a working scene with a movable character (manually).

Pathfinding (Hour 11-13)

I already have some practice on recursion, but not much when related to pathfinding. Giving myself a nice chunk to actually understand and play around with algorithms. Should also include movement animations from cell to cell (no teleporting).

Turn Base (Hour 14-18)

Making the sandbox into an actual game, starting with completely outlining unit stats.

RPG (Hour 21)

Only spend an hour on item diversity. Big teams will always have more content than you.

Battle (Hour 23-30)

Playtest a working battle between units. There won’t be any options for friendly fire yet.

Factions (Hour 31-32)

Evaluate Progress (Hour 33)

Finish Engine or Work on Artwork/Music (Hour 34-36)

Improvements (Hour 37-40)

2 Responses to “pyTactics”

    • Reply Shade

      Pretty bad as I didn’t make any clipping or efficiency with rendering. Drawing maps larger than 10×10 lagged terribly. I didn’t get past the simple pathfinding to make it an actual game.

      I took plenty of screenshots, so I should probably upload some.

      I’ve been working on drawing the grid in 3D in Java with LWJGL.

Leave a Reply


To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    Markdown is turned off in code blocks:
     [This is not a link](

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see