Skip to content

Latest commit

 

History

History
1038 lines (789 loc) · 47.9 KB

DESIGN.md

File metadata and controls

1038 lines (789 loc) · 47.9 KB

Tanks of Freedom 3-D Design Document

Project Description

This document describes the details for a classic, turn-baset strategy game, that is a successor to Tanks of Freedom. It is meant to play very similarly to it's predecessor, while introducing 3D graphics, new story, new characters, and deepening the game mechanics it introduced.

Certain level of backwards compatibility is meant to be preserved. This new game should be able to import ToF online shared maps. It is not expected to be able to share maps, that original ToF could use. Online cross-play between ToF and this game is considered, but is not a part of core requirements.

Working title for the game is Tanks of Freedom 3-D, it is a subject to change, most likely based on it's story.

Final title of the game is Tanks of Freedom II

Proposed titles:

  • Tanks of Freedom - Liberum Gentem
  • Tanks of Freedom 2 (chosen title)
  • Tanks of Freedom 2: Grim War
  • Tanks of Freedom 2: Heroes

World

A fictional world of Libre populated by humans. It houses a big landmass called Dike Continent. Amber Noon is situated in a central place suitable for trade routes and with a lot of resources. It borders with Sapphire Dawn, Jade Twilight and Ruby Dusk.

It is possible, there are other continents in this world, that are not part of the story, and could be used in the future.

Sapphire Dawn (Team Blue)

A democratic, capitalist nation that values business, ambition and freedom. In rivalry with Ruby Dusk.

Style: Modern Biome: Desert Capital: Sapphire City Theme: All star champion sheep by Reduz (soundtrack_3)

Ruby Dusk (Team Red)

An industrial nation, that values hard work and ingeniuity. In rivalry with Sapphire Dawn.

Style: Steampunk Biome: Snowy mountains Capital: Rubyport Theme: Like a whale by Reduz (soundtrack_4)

Jade Twilight (Team Green)

A peacful and prosperous nation, consisting of a federation of smaller cultures. Values science and diplomacy. In good relations with everyone.

Style: Futuristic Biome: Tropical Capital: Jade Oasis Theme: Capybara love by Reduz (soundtrack_6)

Amber Noon (Team Yellow)

A feudal nation, that values honor and courage. Led by a royal family. In reserved relations with other nations.

Style: Feudal/Knights Biome: Temperate Capital: Amber Fortress Theme: The sorrows of a crab by Reduz (soundtrack_5)

Obsidian Night (Team Black)

A rebel group splintered from Amber Noon, led by Warlord Grim.

Style: Feudal/Knights Biome: N/A Capital: None Theme: Grand Beats 110 (soundtrack_2)

Characters

For ToF3D we intend to have four sides to the conflict, with each having an npc leader and two playable heroes.

Sapphire Dawn (Team Blue)

  • The President - Gideon
    • opportunistic
    • businessman
  • The General - Cyrus
    • good leader
    • old fashioned
  • The Commando - Sergeant Blake
    • resourceful
    • reckless
    • gullible

Ruby Dusk (Team Red)

  • The Lord - Dawson
    • stylish
    • an inventor
  • The Gentleman - Archibald
    • classy
    • trustworthy
  • The Noble - Sidney
    • independent
    • petty

Jade Twilight (Team Green)

  • The Chancellor - Irene
    • compassionate
    • diplomatic
  • The Admiral - Torsten
    • experienced
    • tactical genius
  • The Captain - Claude
    • competetive
    • cocky

Amber Noon (Team Yellow)

  • The King - Ludwig
    • caring
    • naive
  • The Prince - Tybalt
    • honourable
    • inspiring
  • The Warlord - Grim
    • ambitous
    • intimidating

Obsidian Night (Team Black)

  • The Warlord - Grim
    • vengeful
    • intimidating

Story

Yellow warlord has secretly imprisoned the King, and tricked the Prince into following his orders. He starts war on other nations. Eventually, Yellow is defeated and King returned as a ruler.

Theme

The game is about rivalry and silly political plots. None of the factions are purely good or bad. It focuses on interactions between characters from all nations.

Story has to decieve the player into thinking, that certain factions and characters are bad, and then subvert their expectations.

Story Progression

Amber Noon Warlord Grim has imprisoned the King and started a war with Ruby Dusk. Betting on their rivalry, he asks Sapphire Dawn for help, telling them, that Ruby Dusk attacked first.

Ruby Dusk responds to provocation, and invades Amber Noon. Sapphire Dawn comes to help and attacks Ruby Dusk.

Outline

Tutorial

Sapphire Dawn General Cyrus is training new recruits on how to operate on the battlefield. This includes The Commando, named Blake.

Prologue

During a border inspection by Prince Tybalt, Ruby Dusk starts an offensive. Warlord Grim contacts Prince Tybalt and tells him, that Ruby Dusk started a war, and King Ludwig ordered him to repel the invaders.

Ruby Dusk Campaign

Ruby Dusk Noble Sidney disregards Lord Dawson orders and captures several provinces of Team Yellow. They approach Amber Noon capital and prepare to occupy it, but their offensive is halted when they get news of Sapphire Dawn joining the fight. Ruby Dusk Gentleman Archibald goes to defend their own lands, encountering Sapphire Dawn.

Sapphire Dawn Campaign

Driven by their rivalry agains Ruby Dusk and potential gains, Sapphire Dawn President Gideon agrees to help Amber Noon in their war. General Cyrus is sent to attack Ruby Dusk lands, and fight to help free the Amber Noon capital, but then encounter Jade Twilight and Amber Noon forces led by Prince Tybalt in their way. Warlord Grim declares Prince Tybalt a traitor, who wants to overthrow King Ludwig, and asks Sapphire Dawn Commando Blake to deal with them.

Jade Twilight Campaign

Amber Noon Prince Tybalt visits Jade Twilight Chancellor Irene to ask for help, as his country is being attacked. Jade Twilight sends Admiral Torsten as a diplomatic envoy to Amber Noon capital, but he gets attacked by Amber Noon forces instead, as Warlord Grim fears he would discover the truth. He fights Amber Noon troops, as well as Ruby Dusk forces ocuppying the country. Near the capital, He encounters Sapphire Dawn forces allied with Warlord Grim, and fights them to gain a foothold, while Captain Claude is dispatched to return to Chancellor Irene with the news. On his way he is harrased by Commando Blake, and must defeat him.

Amber Noon Campaign

Amber Noon Prince Tybalt with a handful of loyal forces trains against Jade Twilight Captain Claude, until he is strong enough.

Prince Tybalt leads his forces against Obsidian Night, who allied themselves with Warlord Grim. On his way he allies himself with Sapphire Dawn and Ruby Dusk. He arrives with both his and allied Jade Twilight Forces at the outskirts of Amber Noon capital. It is being defended by ex-Amber Noon troops loyal to Warlord Grim, who are now Obsidian Night. Ruby Dusk led by Noble Sidney, Jade Twilight led by Admiral Torsten as well as Sapphire Dawn led by Genral Cyrus help Prince Tybalt free King Ludwig. Not able to hold capital, Warlord Grim escapes to his castle, but allies pursue and capture him there, ending the war.

Epilogue

Warlord Grim is imprisoned in the Amber Castle. A handful of his loyal knights frees him from his cell. He gathers his forces and fights through Amber Noon forces stationed nearby to escape. He dissapears into the mountains to plot his revenge.

Missions

Each of the main campaigns should be about 10 mission long.

Tutorial

  1. Gameplay basics

    • moving units
    • claiming buildings
    • action points
    • buying units
    • combat
    • winning
  2. Units and buildings

    • basic units
    • advanced units
    • buildings
  3. Unit levels and abilities

    • level ups
    • unit abilities
  4. Hero units

    • passive abilities
    • active abilities
    • deploying heroes
    • npcs

Prologue

  1. Just Another Excercise
    • Warlord Grim orders recruits to attack Ruby Dusk facility as na excercise
    • Ruby Dusk reacts with confusion
    • Grim orders further attacks
  2. Border inspection
    • Prince Tybalt visits a border outpost for inspection
    • Ruby Dusk attacks the outpost (sent by Sidney)
    • Grim Informs Tybalt, that Ruby Dusk started a war
    • Prince Tybalt holds off the attack for a while
    • Prince Tybalt runs away, goes to capital to talk with King Ludwig

Ruby Dusk Campaign - Noble Intentions

  1. Sudden Strike

    • Noble Sidney recieves a report
      • Outpost unprepared, taken, losses bigger than expected
      • Prince Tybalt seen fleeing
      • Can't count for reinforcements for now
    • Noble Sidney attacks second outpost
    • Only Infantry available
    • Outpost has single tank guarding it.
    • Noble Sidney explains his Active ability
    • Noble Sidney explains Infantry ability
    • Noble Sidney captures second outpost
    • Gentleman Archibald comes with message from Lord Dawson to stop
    • Noble Sidney disregards orders, calls Lord Dawson soft
    • Noble Sidney plots to gain more power by conquering Amber Noon
  2. Securing the lines

    • Reinforcements lagging due to supply difficulties
    • Noble Sidney helps secure supply lines to get Tanks
    • Noble Sidney recieves a couple of Tanks
    • Enemy base has Tank factory as well
    • Explain passive
    • Explain Tank ability
    • Noble Sidney takes over the enemy base
  3. Taking flight

    • Amber Noon mobilised a lot of Tanks
    • Noble Sidney had an Airfield built, but is not ready yet
    • Hold out long enough to get Attack Helicopters
    • After a couple of turns, Airfield is ready
    • Airfield deploys two Attack Helicopters for free
    • Noble Sidney takes over the enemy base
  4. Gateway

    • Noble Sidney arrives at a river, needs to cross a bridge
    • There is a small enemy outpost on the same side, and a big base on the other side
    • Noble Sidney explains Attack Helicopter ability
    • Noble Sidney has to take over a military bases guarding the bridge
  5. Amber Fortress

    • Prince Tybalt talks to guards
    • Noble Sidney arrives at Amber Noon capital city
    • Need to take out guard forces, city itself is inaccesible
    • Prince Tybalt helps defend the outpost
    • Noble Sidney captures a base on a strategic spot good for siege
    • Gentleman Archibald arrives with orders from Lord Dawson to return home
  6. Stranded

    • Ruby Dusk forces can't return home, cut off by Sapphire Dawn
    • Lord Dawson orders Gentleman Archibald to get back ASAP
    • Gentleman Archibald has to leave the bulk of Ruby Dusk forces with Sidney in current position
    • Mobile Infantry available for faster movement
    • Explain passive
    • Gentleman Archibald goes through with small detachment
  7. Uinvited guests

    • Gentleman Archibald reaches Ruby Dusk border
    • Need to re-take border base
    • Scout Helicopters available
    • If Scout abilities are used, small outpost can be saved
  8. Research and development

    • Gentleman Archibald arrives at research facility
    • Enemy uses a lot of fliers
    • Gentleman Archibald has very limited access to Infantry
    • Facility provides Rocket Artillery and Tanks
    • Explain Hero active and Artillery ability
    • Capture airfields
  9. Hold the line

    • Sapphire Dawn is attacking defensive line, led by Commando Blake
    • Add some nice battle cutscene here
    • Commando Blake taunts Gentleman Archibald for attacking Amber Noon
    • Gentleman Archibald explains, but Commando Blake does not listen
    • Sapphire Dawn drops troops regularly
    • Gentleman Archibald needs to capture and hold line of towers

Sapphire Dawn Campaign - Business as usual

  1. Lucrative offer

    • General Cyrus arrives at a Sapphire Dawn border garrison to take command
    • President Gideon contacts General Cyrus and briefs him in on a deal with Warlord Grim
    • Commando Blake has been already dispatched to help, but failed and needs reinforcements
    • General Cyrus recruits more forces and gathers them at a staging area
    • Sapphire Dawn forces approach the border and discover Amber Noon base taken over by Ruby Dusk
    • Sapphire Dawn forces secure a road leading into Amber Noon territory
  2. Consolidation

    • General Cyrus encounters some Sapphire Dawn units left from the initial wave led by Commando Blake
    • More advanced units are dispersed and need to be rescued
    • General Cyrus has no base and can only reinforce by rescuing on-field units
    • General Cyrus has to recapture a Sapphire Dawn encampment
  3. Capital offence

    • Substantial Ruby Dusk forces are still stationed right outside the Amber Fortress
    • General Cyrus is tasked with cutting off their supply line
    • Sapphire Dawn needs to capture all towers along a highway
    • Ruby Dusk might deploy waves of units from an inaccesible base.
  4. Noble cause

    • Ruby Dusk forces are pressured by Sapphire Dawn
    • Ruby Dusk forces are in need of a commander, so Noble Sidney is released
    • General Cyrus needs to hold the line agains waves of enemy units while he captures Ruby Dusk HQ
    • Noble Sidney taunts General Cyrus about being mercenaries for Warlord Grim
    • Noble Sidney tells General Cyrus that it was Amber Noon who attacked first, which Cyrus finds disturbing
  5. A glimmer of Jade

    • Scouting party reports that Prince Tybalt has been spotted heading east
    • General Cyrus follows and encountersa group of Jade Twilight soldiers
    • Surprised by this, Cyrus reports the encounter to Warlord Grim
    • Warlord Grim informs Cyrus, that Jade Twilight must have made an alliance with Ruby Dusk, orders to attack
    • Small Amber Noon detachment engages Jade Twilight forces
    • General Cyrus moves in to assist
    • Just as General Cyrus captures Jade Twilight camp, Prince Tybalt arrives
    • General Cyrus leaves with Prince Tybalt to his camp
  6. Hostile takeover

    • Prince Tybalt suspects that Warlord Grim holds King Ludwig as prisoner
    • Warlord Grim says Prince Tybalt is a traitor and orders General Cyrus to arrest him
    • General Cyrus refuses
    • Commando Blake appears, relieves General Cyrus of command
    • General Cyrus is sent away
    • Commando Blake attacks Jade Twilight forces in the camp
    • Prince Tybalt escapes south
  7. In pursuit of greatness

    • Commando Blake chases Prince Tybalt
    • Prince Tybalt takes refuge in a large Jade Twilight base
    • Commando Blake has to attack the base from the front to lure away guards
    • Commando Blake has to sneak past defences and capture Prince Tybalt
    • Commando Blake must not loose base
    • When Commando Blake reaches Prince Tybalt, a trap is revealed, and he is captured

Jade Twilight Campaign - Hard Diplomacy

  1. The Envoy

    • Prince Tybalt meets Chancellor Irene and asks for help
    • Admiral Torsten is tasked with going to Amber Fortress to talk with King Ludwig
    • Admiral Torsten, accompanied by Captain Claude, goes to the border
    • Amber Noon forces at the border are ordered by Warlord Grim to attack
    • Admiral Torsten and Captain Claude must defend themselves
    • Admiral Torsten rapidly expands his airforce
  2. Delegation

    • Admiral Torsten is troubled with Amber Noon aggresivness
    • Chancellor Irene orders Admiral Torsten to find King Ludwig
    • Admiral Torsten must fight his way through Amber forces
  3. Exchange of arguments

    • Amber Noon set up a defensive line to stop Torsten
    • As Torsten assaults the line with his air force, Commando Blake shows up
    • Commando Blake is further deceived by Warlord Grim about Jade Twilight
    • Commando Blake brings in a lot of Rocket Artillery and infantry
    • Admiral Torsten must defeat two enemy bases
  4. Lost in translation

    • Admiral Torsten encounters a contingent of Ruby Dusk soldiers
    • These soldiers are cut off from their commander
    • Admiral Torsten tries to negotiate a safe passage
    • Ruby Dusk commander sticks to his orders
    • Admiral Torsten must capture towers along the road to secure passage
    • Admiral Torsten must not capture any buildings in the Ruby Dusk base
  5. Hard Diplomacy

    • Admiral Torsten arrives at outskirts of Amber Fortress
    • Noble Sidney is kept as a prisoner in the Sapphire Dawn base
    • Amber Noon defends all entrances to the city
    • Admiral Torsten is not able to enter the city, must set up camp.
    • Admiral Torsten must fight Amber Noon and Sapphire Dawn for space
    • Admiral Torsten frees Noble Sidney
  6. Marathon

    • Admiral Torsten is unsure if he should assault Amber Fortress
    • Captain Claude is dispatched to go back to Jade Oasis to consult Chancellor Irene
    • He must fight his way through Sapphire Dawn with limited units
    • Can only recruit Infantry, need to heal with Claude and Mobile Infantry
  7. Building Bridges

    • Captain Claude reaches a river on the Jade-Amber border
    • There is no way to cross, but engineering corps on the Jade side is building a bridge
    • Captain Claude must hold his ground until bridge is repaired
    • As the bridge is finished, Commando Blake arrives
    • Captain Claude must defeat Commando Blake

Amber Noon Campaign - Royal Blood

  1. A King in the making

    • Captain Claude is back in Jade Oasis and training Prince Tybalt
    • Chancellor Irene deems Prince Tybalt the only one capable of ending the conflict by defeating Grim
    • Tybalt commands small forces of Amber Noon Infantry and Jade Twilight vehicles
    • Tybalt must defeat Claude in a mock battle
    • Focus on highlighting Tybalts abilities
  2. Obsidian shadow

    • Prince Tybalt leads a small group of Amber Noon Infantry back to his kingdom
    • Captain Claude accompanies him with a small group of Jade Twilight forces
    • A loyalist Amber Noon are fighting against Obsidian Night rebels
    • Prince Tybalt must rescue loyalist forces
    • Loyalist forces join Prince Tybalt to help him reach Amber Fortress
  3. Cracked Sapphire

    • General Cyrus leads a detachment of soldiers against Sapphire Dawn soldiers in Obsidian Night colours led by Commando Blake
    • General Cyrus orders Blake to surrender
    • Blake switched sides because Grim promised him to lead his army
    • Prince Tybalt reunitse with General Cyrus
    • Prince Tybalt teams up with General Cyrus to beat Blake
    • Commando Blake escapes back to Amber Fortress
  4. Noble redemption

    • Tybalt hopes to move around Amber Fortress undetected
    • No mechanised units due to difficult terrain
    • Tybalt encounters Obsidian Night blocking the valley
    • A large group of Obsidian Night units flanks him
    • Noble Sidney arrives with Ruby Dusk forces to assist him
    • Noble Sidney apologises and vows to help set things right
    • Noble Sidney provides Tanks
  5. Mission complete

    • Admiral Torsten is holding out near the Amber Fortress
    • He is being attacked from multiple sides
    • King Ludwig is in the city as a symbolic NPC
    • Captain Claude arrives with reinforcements to save him
    • Prince Tybalt moves in to defeat Obsidian Night
    • Kind is freed and Warlord Grim flees to the north
  6. In the name of the King

    • Warlord Grim returns to his castle in the mountains
    • Castle is held by Obsidian Night led by Warlord Grim himself
    • Commando Blake is helping him
    • Castle is surrounded, with all nations having small bases around it
    • Prince Tybalt, Admiral Torsten, Captain Claude, Noble Sidney, Gentleman Archibald and General Cyrus all fight together
    • All Obsidian Night forces present in the castle must be defeated

Epilogue

  1. Obsidian cloud
    • Warlord Grim and Commando Blake are held in a prison under Amber Noon guard
    • Some of the guards turn to Obsidian Night colours and set Grim free
    • Grim has to get to Blake's cell and free him
    • A spot where Blake's ability can be used for additional units
    • Part of the base only accessible to Blake, need to clear to open a gate
    • Grim fights his way out of the prison base
    • Grim vows to get his revenge on Tybalt and the others
    • Resources are limited, need to focus on combination of Grim's and Blake's abilities

Gameplay

Goals

Overall goal of the game is to get through all of the campaign missions, and witness the story of the four warring nations.

In a single mission, goals are determined by the story. A win might be considered by reaching one of the many possible objectives (alternative paths) or require multiple to be achieved within single mission. A list of possible win conditions:

  • Capturing enemy HQ
  • Surviving set amount of turns
  • Capturing designated building(s)
  • Destroying designated unit(s)
  • Reaching designated area with (optionally specific) units
  • Building up set amount of resources

User Skills

  • Click and drag with a mouse
  • Use WSAD keyboard
  • (OR) Use XBox-style gamepad
  • Manage resources
  • Strategize according to objectives
  • Make tactical combat decisions
  • Assess usefulness of different units
  • Assess value of buildings
  • Read on-screen messages

Game Mechanics

This game is a turn-based strategy, where one player commands his/her forces fully, and the turn ends when all posible actions are exhausted, or player decides to pass the turn. Up to 4 players can play in a single match.

Game is played on a board consisting of square tiles, populated with terrain, units, buildings and obstacles. Player is awarded a resource at the beggining of the turn, which can be spent on new units or active skills. Each unit can be moved, attack enemy units, activate special abilities or defend a position. All actions need to be contextual and easy to execute with two buttons. Unit actions are limited by the amount of it's own action points and other attributes. Buildings can be neutral, or belong to one of the players. Player can ocuppy a building, that does not belong to them in order to capture it. Buildings can fulfill one or more of roles: provide resources, enable deployment of new units, or be a strategic objective.

There will be no Fog of War, that was present in the previous game. There will be no dedicated battle screen, with combat taking place direclty on the main board.

Combat may cause collateral damage to the buildings and terrain around them. Damage is cosmetic only.

Resources gained from buildings will be taxed according to the amount of units deployed, to prevent unit spam.

Progression and challange

Campaign will offer progression in form of gradual unlocking of new buildings and abilities. This will also be true for the AI opponents, to match the challange. In custom games, map creator will be able to decide which units, buildings and abilities are available. Story progresses by in-game dialog, in-game on-board cutscenes.

In a match, progression will be possible by capturing more buildings, gathering more resources and recruiting more units. Units will be able to gain XP and level up, which will result in them gaining minor stat boosts and unlocking abilities.

Difficulty can be adjusted by the player by choosing one of three possible difficulty levels. These will affect how many resources AI has. Difficulty can be selected on per-AI basis. In PvP matches, there is no difficulty setting.

Losing

There is no way of loosing a campaign, as each of the missions can be re-played as many times as player wishes (or needs). A loss might be considered by failing to fullfill one of the many possible objectives (alternative paths) or require multiple to fail within single mission. A list of possible loss conditions:

  • Loosing player HQ
  • Failing to complete objectives within set amount of turns
  • Loosing designated building(s)
  • Loosing designated unit(s)
  • Enemy reaching designated area with (optionally specific) units

Units

Each side will use the same units, with different assets that reflect their own style.

Infantry

Most basic unit in ToF, infantry is a cheap and slow unit with low damage, but capable of capturing buildings. Crucial in achieving victory when capturing enemy HQ is your goal.

Strengths:

  • cheap
  • can attack flying units
  • can capture buildings

Weaknesses:

  • low health
  • low damage
  • short range

Special: Heavy Weapon - can deal high damage to a neighbouring unit

Tank

Frontline units with a lot of bulk and powerful canons. Mainly used to push front lines.

Strengths:

  • high health
  • high damage
  • strong against infantry units

Weaknesses:

  • expensive
  • can't attack flying units

Special: Long-range shell - can deal damage to a unit up to two fields away in a straight line

Attack Helicopter

Offensive air unit, often deployed to gain advantage on the battlefield.

Strengths:

  • good mobility
  • strong against tank units

Weaknesses:

  • very expensive

Special: Troop transport - can pick up single Infantry unit and drop it off

Advanced units

Some units are available only when certain conditions are met. These conditions could be:

  • story progression
  • special building captured
  • production building upgraded

Mobile infantry

Motorized infantry squad, capable of limited field repairs and medical assistance.

Strengths:

  • cheap
  • can capture buildings
  • better mobility

Weaknesses:

  • low health
  • low damage
  • can't attack flying units

Special: Medkit/Repair Kit - can restore up to 5 HP to any unit

Mobile rocket artillery

Specialized vehicle carrying ground-to-ground and ground-to-air missiles.

Strengths:

  • strong against infantry
  • strong against flying units
  • powerful special

Weaknesses:

  • no armour
  • very expensive
  • can not fight directly
  • can't attack on cooldown

Special: Missile - can damage a unit within 4 squares, both air and ground

Scout Helicopter

Lightweight, flying machine capable of covering a lot of ground very quickly.

Strengths:

  • very good mobility
  • tactical strikes

Weaknesses:

  • expensive
  • low damage
  • low health

Special: Rapid response - restores all action points and attacks

Leveling up

Units can level up when they destroy enemies. Each level grants bonuses:

  1. Access to active ability
  2. Increased armor
  3. Increased mobility

Heroes

In addition to regular units, each side has access to two hero units. A hero unit is more powerful, and more expensive, than a regular unit. These units can be deployed from HQ for a significant cost. In battle, there can be only one hero on each side, with additional ones available for cutscenes, but not in gameplay.

Hero units

  • The General
    • Passive: Recruitment: Barracks units cost 10 AP less to deploy.
    • Active: Deep Strike: Drop an Infantry unit with no MP within 2 tiles.
  • The Commando
    • Passive: Trained Specialist: All unit skill CDs are reduced by 1
    • Active: Infiltration: Hero teleports in range up to 2 tiles with 1 MP left
  • The Gentleman
    • Passive: Optimise: Each Tower gives additional 5AP per turn
    • Active: Targeting Automaton: up to 4 neighbouring Tanks can now attack air units until next turn. Non-Tank units get +1 Damage instead.
  • The Noble
    • Passive: Efficient: Factory units cost 10 AP less to deploy
    • Active: Hardened Armour: Units within 2 tiles get +1 Armour until next turn
  • The Admiral
    • Passive: Air superiority: Airfield units cost 10 AP less to deploy
    • Active: Precision Strike: Target field and it's neighbours are hit for 5 HP bypassing armour
  • The Captain
    • Passive: Mentor: All Infantry and Mobile Infantry units start at level 1
    • Active: Supply: Heal up to four neighbouring units for up to 5HP
  • The Prince
    • Passive: High Morale: Infantry and Mobile Infantry units get +1 Damage and +1 Armour
    • Active: Inspire - replenish movement and attack points of a unit within 2 tiles, reset CD on active skill
  • The Warlord
    • Passive: Intimidate: Claiming buildings now uses all MP instead of consuming a unit
    • Active: Promote: Upgrade a neighbouring unit by 1 level

Powers

Each hero has access to two abilities: one passive and one active.

  • Passive ability works as long as the hero is on the field. It could work globally, or be limited to a certain range.
  • Active ability could either have to be loaded, or have a cooldown. It could also cost Action Points to use.

Each hero and their powers are in TBD state for now.

An example of possible powers:

  • Nearby units can retaliate twice
  • Tanks can retaliate on flying units, for greatly reduced damage.
  • Units can retaliate even without AP
  • Units have +X movement
  • Units deal +X damage
  • Units have +X armour
  • Call an airstrike within X tiles
  • Drop a paratrooper (Infantry unit) nearby
  • Replenish movement and attack points of a unit
  • Units cost -X AP

Buildings

Each side will use the same buildings to gain resources and deploy units. Buildings have different styles that reflect the style of nation that built it. Buildings will not change style depending on controlling nation, being fixed for a particular map instead. Buildings can heal units that are produced in them.

Headquarters

Main building, that need to be defended. When HQ is captured, the game is over.

Units deployed: Infantry AP gain per round: 20

Barracks

Army training center, used to train foot soldiers.

Units deployed: Infantry, Mobile Infantry AP gain per round: 5

Factory

Industrial facility capable of rapid assembly of vehicles

Units deployed: Tank, Mobile Rocket Artillery AP gain per round: 5

Airfield

Military hangar supporting air units.

Units deployed: Attack Helicopter, Scout Helicopter AP gain per round: 5

Comms tower

Standard wireless communication tower. Helps support more units in the field.

Units deployed: N/A AP gain per round: 15

Civilian buildings

Regular buildings, that can be garrisoned with Infantry for additional armor. Can be damaged.

Units deployed: N/A AP gain per round: 0

Online features

Map sharing

Once a custom map is created and verified (player won on it) it can be shared online via ToF Server. Server is a separate application in a different repository.

Map preparation

Once the map is done in the editor, it will be marked as unverified. Any verified map will be marked as unverified when it is modified. Player needs to win a skirmish match on this map in order for this map to be viable for upload. When map is saved, it's version iterator is incremented.

Map upload

In order to upload a map, an appropriate option from the Online menu must be selected. Then, a map from the list is picked. If a map has already been uploaded, it will not be uploaded again. This is verified by checking if the map metadata contains an online map id.

Once a map is selected, it will be uploaded to a server endpoint, and it will return a new map id, that will be stored with the map. The map is then also added to the list of online enabled maps.

Online map id will consistent of a randomly generated code and the maps iterator. If a map with pre-existing id is uploaded, it's code will be re-used with new iterator value. This will help with map continuity

Map download

In order to download a map, an appropriate option from the Online menu must be selected. Then, a list of latest or most downloaded maps can be seen and paged. Game client should download more pages as the player goes futher down the list. Once map is selected, it can be downloaded.

Map can also be downloaded by manually inputting a map id.

If that particular map already exists, it is not downloaded.

Art Style

Reference images

This section shows some images gathered from the internet, that are meant to serve as an inspiration for the ToF3D art style. These were not created by P1X team and belong to their rightful authors. These assets must not be used in the project without explicit license, and only serve as reference and discussion points.

General inspiration

Parrot Helicopter Airplane Spaceship Submarine Mech Train Tank and house Paper tank Low poly tanks Mini Guns game Mini Guns game Kingdoms and Castles game Some cars

Voxel art inspiration

Inception city Blocky Farm city Desert tank 1 Desert tank 2 Desert multicannon tank Green tank Modern tank Windmill scene

Pintokyo Games Twitter

VoxelMade games page

Music and Sounds

Music should have chiptune style (though other styles are acceptable) with military march-style regular tempo.

Performing actions, such as unit movement and combat, should be accompanied by simple sound effects.

Initially, sounds from original ToF will be re-used, with possibility of new tracks being added.

Reduz has some interesting tracks on Soundcloud - he migth be willing to share them under a CC license.

Technical Description

Game will be made in an open-source GodotEngine in 3D. It should consider future upgrade to Godot 4.0 and Vulkan renderer.

Godot provides easy export for Windows and Linux platforms. OSX is still available out of the box, but is not initially onsidered due to Apple's anti-consumer policies and possible difficulties in distribution and maintenance. Android is not considered due to potential low performance and not suitable controls.

Switch port could happen in the future, if the project reaches sufficient quality.

Project will be managed using Trello board: https://trello.com/b/RQOwyCwm/tanks-of-freedom-3-d Trello might be swapped for an open-source alternative if it's transition into more commercialized product interferes with the project.

Github repository will be used to store code and assets publicly.

Storyteller

Storyteller is a module, that allows for in-game scripting of missions. It consists of triggers and actions.

Triggers

  • start of turn X
  • unit (player X) enters one of listed regions
  • unit X enters one of listed regions
  • player X has Y units (of type Z)
  • player X controls Y of listed buildings
  • all units for player X are destroyed
  • unit X is destroyed
  • unit X is being attacked
  • player X has Y AP points

Considerations:

  • one-off triggers are properly saved/loaded
  • make stories play in cpu turn without breaking stuff

Actions

  • message is displayed
  • lock/unlock hud
  • move/zoom camera
  • move unit
  • player X wins
  • terrain element is added
  • terrain element is removed
  • unit is spawned
  • unit is attacked
  • building is claimed
  • unit X is destroyed
  • unit X is despawned
  • building is damaged
  • trigger is enabled/disabled
  • give X AP
  • take X AP

ToF 1 scripting examples

var stories = {
    'tower_tip' : [
        {'action' : 'lock', 'details' : {}, 'delay' : 2},
        {'action' : 'camera', 'details' : {'where' : Vector2(6, 11), 'zoom' : 1}, 'delay' : 2},
        {'action' : 'message', 'details': {'text' : 'CAMPAIGN_MISSION_1_TOWER_TIP', 'portrait' : 'soldier_blue', 'name' : 'NAME_FREEDOM_FIGHTER', 'side' : 'left'}},

        {'action' : 'camera', 'details' : {'where' : Vector2(6, 4), 'zoom' : 1}, 'delay' : 1},
        {'action' : 'claim', 'details' : {'what' : Vector2(6, 4), 'side' : 1}, 'delay' : 2},


        {'action' : 'camera', 'details' : {'where' : Vector2(9, 4), 'zoom' : 2}, 'delay' : 2},
        {'action' : 'message', 'details': {'text' : 'CAMPAIGN_MISSION_1_ENEMY_HQ', 'portrait' : 'soldier_blue', 'name' : 'NAME_FREEDOM_FIGHTER', 'side' : 'right'}},

        {'action' : 'spawn', 'details' : {'where' : Vector2(8, 3), 'unit' : 'soldier', 'side' : 'red'}, 'delay' : 1},

        {'action' : 'move', 'details' : {'who' : Vector2(9, 7), 'where' : Vector2(9, 6)}, 'delay' : 1},

        {'action' : 'move', 'details' : {'who' : Vector2(8, 4), 'where' : Vector2(8, 5)}},
        {'action' : 'move', 'details' : {'who' : Vector2(9, 4), 'where' : Vector2(9, 5)}, 'delay' : 1},

        {'action' : 'attack', 'details' : {'who' : Vector2(9, 5), 'whom' : Vector2(9, 6)}, 'delay' : 1},

        {'action' : 'die', 'details' : {'who' : Vector2(9, 6)}, 'delay' : 2},

        {'action' : 'camera', 'details' : {'where' : Vector2(8, 12), 'zoom' : 3}, 'delay' : 2},


        {'action' : 'camera', 'details' : {'where' : Vector2(7, 6), 'zoom' : 1}, 'delay' : 1},
        {'action' : 'terrain_add', 'details' : {'where' : Vector2(7, 6), 'type' : 'city_small'}},
        {'action' : 'terrain_add', 'details' : {'where' : Vector2(7, 7), 'type' : 'city_big'}},
        {'action' : 'terrain_add', 'details' : {'where' : Vector2(7, 8), 'type' : 'forest'}},
        {'action' : 'terrain_add', 'details' : {'where' : Vector2(6, 6), 'type' : 'mountain'}},
        {'action' : 'terrain_add', 'details' : {'where' : Vector2(6, 7), 'type' : 'wall', 'frame' : 1}},

        {'action' : 'terrain_remove', 'details' : {'where'  : Vector2(6, 7), 'explosion' : true}, 'delay' : 0.5},
        {'action' : 'terrain_remove', 'details' : {'where'  : Vector2(6, 6), 'explosion' : false}},

        {'action' : 'terrain_damage', 'details' : {'where' : Vector2(8, 7)}, 'delay' : 1},

        {'action' : 'camera', 'details' : {'where' : Vector2(9, 4), 'zoom' : 2}, 'delay' : 2},
        {'action' : 'despawn', 'details' : {'who' : Vector2(8, 3)}, 'delay' : 1},

        {'action' : 'unlock', 'details' : {}},
        #{'action' : 'win', 'details' : {'player' : 0}}

    ],

    'turn_end' : [
        {'action' : 'lock', 'details' : {}, 'delay' : 2},
        {'action' : 'message', 'details': {'text' : 'CAMPAIGN_MISSION_1_ENEMY_HQ', 'portrait' : 'soldier_blue', 'name' : 'NAME_FREEDOM_FIGHTER', 'side' : 'right'}},
        {'action' : 'unlock', 'details' : {}},
    ],

    'moved' : [
        {'action' : 'lock', 'details' : {}, 'delay' : 2},
        {'action' : 'message', 'details': {'text' : 'CAMPAIGN_MISSION_1_ENEMY_HQ', 'portrait' : 'soldier_blue', 'name' : 'NAME_FREEDOM_FIGHTER', 'side' : 'right'}},
        {'action' : 'unlock', 'details' : {}},
    ]
}

var triggers = {
    'first_turn' : {'type' : 'turn', 'story' : 'tower_tip', 'details' : { 'turn' : 1 }},
    'first_turn_end' : {'type' : 'turn_end', 'story' : 'turn_end', 'details' : { 'turn' : 1 }},
    'moved' : {'type' : 'move', 'story' : 'moved', 'details' : { 'fields' : [Vector2(9, 6)], 'player' : 0 }, 'one_off' : true},
    'moved_vip' : {'type' : 'move', 'story' : 'moved', 'details' : { 'fields' : [Vector2(9, 9)], 'vip' : Vector2(9, 8) }, 'one_off' : true},
    'reinforce' : {'type' : 'deploy', 'story' : 'moved', 'details' : { 'amount' : 2, 'player' : 0 }, 'one_off' : true},
    'claim' : {'type' : 'domination', 'story' : 'moved', 'details' : { 'amount' : 2, 'list' : [Vector2(6, 4), Vector2(6, 11)], 'player' : 0 }, 'one_off' : true},
    'assasin' : {'type' : 'assassination', 'story' : 'moved', 'details' : { 'vip' : Vector2(9, 8) }, 'one_off' : true},
    'reinforce_enemy' : {'type' : 'deploy', 'story' : 'moved', 'details' : { 'amount' : 1, 'player' : 1 }, 'one_off' : true},
}

ToF 3D scripting examples

    "scripts":{
        "stories":{
            "tower_tip" : [
                {"action" : "lock"},
                {"action" : "message", "details": {"text" : "Sample text", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "message", "details": {"text" : "Sample text 2", "portrait" : "soldier_blue", "name" : "Andrew", "side" : "left"}},
                {"action" : "camera", "details": {"where" : [20, 23], "zoom" : 0.5}},
                {"action" : "spawn", "details" : {"where" : [20, 23], "template" : "blue_infantry", "side" : "red", "rotation" : 90}},
                {"action" : "spawn", "details" : {"where" : [20, 22], "template" : "red_infantry", "side" : "red", "rotation" : 90}, "delay" : 1},
                {"action" : "move", "details" : {"who" : [20, 23], "where" : [22, 23], "path" : ["e", "e", "n"]}},
                {"action" : "move", "details" : {"who" : [20, 22], "where" : [22, 21], "path" : ["e", "n", "e", "s"]}, "delay" : 1},
                {"action" : "camera", "details": {"where" : [24, 22], "zoom" : 0.1}},
                {"action" : "terrain_add", "details" : {"where" : [24, 22], "type" : "decoration", "template" : "deco_flower1"}, "delay" : 1},
                {"action" : "terrain_add", "details" : {"where" : [24, 22], "type" : "frame", "template" : "frame_fence"}, "delay" : 1},
                {"action" : "terrain_add", "details" : {"where" : [24, 22], "type" : "terrain", "template" : "city_building_big1"}, "delay" : 1},
                {"action" : "terrain_remove", "details" : {"where" : [24, 22], "type" : "terrain", "explosion" : true}, "delay" : 1},

                {"action" : "camera", "details": {"where" : [22, 22], "zoom" : 0.1}},
                {"action" : "attack", "details" : {"who" : [22, 23], "whom" : [22, 21], "damage" : 1}, "delay" : 1},
                {"action" : "claim", "details" : {"what" : [22, 22], "side" : "red"}, "delay" : 1},
                {"action" : "die", "details" : {"who" : [22, 23]}, "delay" : 1},
                {"action" : "despawn", "details" : {"who" : [22, 21]}, "delay" : 1},
                {"action" : "trigger", "details" : {"name" : "other_player", "suspended" : true}},
                {"action" : "ap", "details" : {"amount" : -100, "side" : "red"}, "delay" : 1},
                {"action" : "ap", "details" : {"amount" : 500, "side" : "blue"}, "delay" : 1},
                {"action" : "level_up", "details" : {"who" : [20, 20]}},
                {"action" : "unlock"},
            ],
            "capture" : [
                {"action" : "lock"},
                {"action" : "message", "details": {"text" : "Sir! We've got a report about potential targets.", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "camera", "details": {"where" : [20, 29], "zoom" : 0.0}},
                {"action" : "message", "details": {"text" : "This tower provides comms for our base, and is crucial for more AP", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "camera", "details": {"where" : [20, 25], "zoom" : 0.0}},
                {"action" : "message", "details": {"text" : "This vehicle factory can provide us with more powerful units", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "camera", "details": {"where" : [23, 27], "zoom" : 0.0}},
                {"action" : "message", "details": {"text" : "Don't forget about infantry barracks, soldiers are crucial for any mission.", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "unlock"},
            ],
            "moved" : [
                {"action" : "lock"},
                {"action" : "message", "details": {"text" : "Unit moved", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
                {"action" : "unlock"},
            ],
            "reinforced" : [
                {"action" : "message", "details": {"text" : "Units produced", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
            "claimed" : [
                {"action" : "message", "details": {"text" : "Buildings claimed", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
            "decimated" : [
                {"action" : "message", "details": {"text" : "Units decimated", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
            "assassination" : [
                {"action" : "message", "details": {"text" : "Unit killed", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
            "attacked" : [
                {"action" : "message", "details": {"text" : "Unit attacked", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
            "resources" : [
                {"action" : "message", "details": {"text" : "Got AP", "portrait" : "soldier_blue", "name" : "Peter", "side" : "left"}},
            ],
        },
        "triggers":{
            "first_turn" : {"type" : "turn", "story" : "tower_tip", "details" : {"turn" : 1, "player" : 0}, "one_off" : true},
            "other_player" : {"type" : "turn", "story" : "capture", "details" : {"turn" : 1, "player" : 1}, "one_off" : true},
            "moved" : {"type" : "move", "story" : "moved", "details" : { "fields" : [
                    {"x1": 25, "x2": 26, "y1": 21, "y2": 22},
                ], "player_side" : "blue" }, "one_off" : true},
            "moved2" : {"type" : "move", "story" : "moved", "details" : { "fields" : [
                    {"x1": 25, "x2": 26, "y1": 21, "y2": 22},
                ], "unit": [27,22] }, "one_off" : true},
            "reinforce" : {"type" : "deploy", "story" : "reinforced", "details" : { "amount" : 3, "player_side" : "red", "type": "red_infantry" }, "one_off" : true},
            "domination" : {"type" : "claim", "story" : "claimed", "details" : { "amount" : 2, "list" : [[23, 27], [20, 29], [20, 25]], "player_side" : "blue" }, "one_off" : true},
            "decimated" : {"type" : "decimate", "story" : "decimated", "details" : { "player_side" : "red" }, "one_off" : true},
            "assassination" : {"type" : "assassination", "story" : "assassination", "details" : { "vip" : [27, 22] }, "one_off" : true},
            "attacked" : {"type" : "attacked", "story" : "attacked", "details" : { "vip" : [27, 22] }, "one_off" : true},
            "resources" : {"type" : "resources", "story" : "resources", "details" : { "amount" : 100, "player_side" : "blue" }, "one_off" : true}
        }
    },

Marketing

Make the project visible in GodotEngine community. Original ToF used to be quite popular, so maybe some of that popularity can be restored.

Game will be officially distributed on itch.io.

Once the project is properly bootstrapped, so there is some more flashy things to show, a development vlog could be a good option.

Demographics

Game is primarly targeted at fans of turn-based strategies, so most likely male players around 30 year old. Colorful and cartoony graphics might attract younger crowd, but there are no simplifications planned to make the game kid-friendly.

Platforms

ToF is targeting Windows and Linux, with posibility of OSX, Android and Switch being added. Being an open source project, game can be picked up and ported to many platforms by third-parties.

Monetization

None

Localization

Game will be provided in English and Polish, with possibility of more languages being contributed by community. Considering the genre popularity in Japan, a translation might be worthwile.

Licensing

ToF3D is a MIT-licensed software. Separate licenses for other software used in development may apply. Separate licenses for assets may apply. Please see LICENSE file for details.

Other Features

Following original ToF release, a custom level editor, online map sharing and online multiplayer will be added as optional milestones. Partial compatibility with original ToF might help, allowing to use the wealth of already existing maps.