Welcome to the new Sinister Design forums!

Main Menu

Developer's Log

Started by CraigStern, February 11, 2013, 07:19:44 PM

Previous topic - Next topic


Items already support adding or ending multiple status effects by delimiting the different status effects with a forward slash. (endsStatus="Burning/Frozen", for example, would end both Burning and Frozen status effects.)

However, I had forgotten to add this same feature to the grantsAttack attribute. No longer! An item can now grant multiple attacks at once; just separate the attacks with a forward slash.

I've also created a new enemy type for the demo, the Bandit Sniper. Snipers are basically bowmen that use a long-range arched shot. 

The arched shot is meant to behave like artillery fire: it can hit up to 5 squares away (6 if the attacker is on the high ground), and is not constrained to the four cardinal directions. This creates zones of danger for an attacking player, to force him or her to deal with enemy snipers quickly rather than just hanging back.

The disadvantages to arched shot: it costs energy, it ends the turn after use, it cannot deal backstab damage, it has a built-in 40% chance to miss, and it can't hit anything within two squares of the attacker.

In short: it's purely for putting pressure on a player that refuses to advance quickly. It is no replacement for normal bow attacks.


I've launched the Kickstarter, and updated the public alpha demo! :D


I've added in some new battle conditions I'd been itching to put in the game:

  • New Army - player name, human/CPU, color name. Creates a new player with the assigned name and color, designating it either human-controlled or CPU-controlled. The values for the human/CPU parameter are Human and CPU; any other entry will cause the game to treat the player as CPU-controlled by default.
  • Set Player Alliance - player number, alliance name. Assigns the player with the designated number to the named alliance. CPU players belonging to the same alliance will not attack one another; CPU players which do not belong to the same alliance will attack one another.
  • Set Player Name - player number, new name. Assigns the player with the designated number the new name.
  • Set Player Color - player number, color name. Assigns the player with the designated number the named color. Color names allowed: Red, Blue, Green, Yellow, Violet, Pink, Orange, White, Black


I took some time over the past few days to add in some new things!

  • I filled in the part of the manual talking about battle conditions.
  • I added a new script action, ChangeCondition, which allows you to edit battle conditions on the fly in the middle of a battle. Want to turn fog of war on, change the level's lighting, or add new win / loss conditions in the middle of battle? Just use ChangeCondition!
  • I added Delete Column / Delete Row functionality to the map editor so you can now trim the edges off of maps, not just expand them.
  • I fixed a few bugs and made some small improvements to useability in the map editor, including adding a field to define the music that each single player map loads with.

More to come!


Just added: you can now create tiles that heal or restore energy to characters who stand on them. ;)


When creating a new attack, if it isn't of the element Create, the game now takes whatever you put in the creates attribute as a sign of what you'd like to replace the attack's target with if it dies.

For instance: if you create an attack called Petrify and stick "Boulder" as the value for the creates attribute and "Objects" for the createdOnTeam attribute, any enemy killed with that attack will be replaced with a Boulder.

Another example: if you create an attack called Zombify and stick "Walking/Dead" as the value for the creates attribute and "MyTeam" for the createdOnTeam attribute, any enemy killed with that attack will be replaced with an instance of the enemy type named Walking/Dead, under the command of the attacking character's team. ;)

Note: you cannot have attacks that turn objects into things other than objects. If you destroy an object with the Zombify ability, for instance, it will not spawn Walking Dead. But you can Petrify a chair.

Note: if you put anything in createdOnTeam other than Objects or MyTeam, the game will spawn the replacement on the same team as the target that was just killed.


A quick extension to the "create on death" feature above: rather than typing a particular class or character name for the creates attribute, you can now type "-CLONE-" to have the game instead create a a new copy of whatever the character originally was. (If you want that particular character to come under your command, for instance.)

Example: say that for Zombify, instead of sticking "Walking/Dead" in for the creates attribute, you put "-CLONE-"; any character that died from Zombify would respawn as the same character, but under your control (because createdOnTeam is set to "MyTeam".)


Took some time this evening to add a feature that's been requested a few times: scoring player performance over the course of a battle.

Now, we all know that the previous Telepath titles kept track of casualties, and that this would impact the player's gold bonus after battle. I've decided to create something a little more sophisticated this time around, however. During each battle, the game now tracks all of the following for each player:

  • Enemies killed
  • Characters lost
  • Damage dealt
  • Damage taken
  • Items grabbed
  • Items dropped
  • Turns taken

At the end of battle, it will assign you a score as follows:

  • Base score (100 if you won, 0 if you lost); plus
  • Enemies killed times 20; minus
  • Characters lost times 40; plus
  • Total points of damage dealt; minus
  • Total points of damage taken; plus
  • Items grabbed times 10; minus
  • Items dropped times 10; minus
  • Turns taken times 9.

So! Let's say you win a battle in 7 turns, kill 10 enemies, lose 1 character, grab 2 items, drop 3 items, and deal exactly as much damage as you take. That's 100 + 200 - 40 + 20 -30 - 63, for a final score of 187.

The computer opponent will get its own score as well for the battle. Assuming that its characters did not grab or drop any items, it ends up with 0 + 40 - 200 -63, for a final score of -223.


I have added four new dialog actions to the game, two to supplement SetVal and two to supplement SetStat. Both SetVal and SetStat require you to specify both an operation and a specific number to use in the operation. The following actions allow you to specify either a custom variable value or a character stat value to use for the "amount" parameter instead:

  • SetValByVal -- (1) name of custom variable to modify, (2) operation, (3) name of custom variable whose value you want to use for the operation
  • SetValByStat -- (1) name of custom variable to modify, (2) operation, (3) name of a character, (4) name of the character's stat whose value you want to use for the operation
  • SetStatByVal -- (1) name of character, (2) name of stat to modify, (3) operation, (4) name of custom variable whose value you want to use for the operation
  • SetStatByStat -- (1) name of character, (2) name of stat to modify, (3) operation, (4) name of second character, (5) name of second character's stat whose value you want to use for the operation


New script action: AddObjectiveReticle! This will stick a reticle onto a battlefield space that you specify for purposes of letting the player know where important location-related objectives are on the battlefield.

AddObjectiveReticle -- y coordinate , x coordinate , reticle color (in hexidecimal format)


As I have some downtime waiting for Amazon Payments to finish doing its thing, I'm adding a new feature to Telepath Tactics: equipment! Equipment wasn't a necessary feature in multiplayer, but I have a hunch that folks are going to want it in single player.

Supported equipment slots: weapon hand, off hand, head, neck, torso, back (for cloaks /capes), feet, and one miscellaneous "accessory" slot.

You create equipment the same way you create ordinary items, but instead of making its useability type "triggered" you will instead use one of the following: "Weapon Hand" , "Off Hand" , "Head" , "Neck" , "Torso" , "Back" , "Feet" , "Accessory". When giving equipment to a character using the GiveItem script action, you can have the game auto-equip it by adding a third parameter, equip. For instance, this will give Emma Strider an Iron Sword and auto-equip it:

<Action>GiveItem/Emma Strider,Iron Sword,equip</Action>


Within any given map, you can now use the -E- notation to have a character spawn with the associated item in its inventory equipped.

This is the ordinary map notation for spawning an enemy with an Iron Sword and Bandages in its inventory:

<Unit>0,1,Sabrina/Strider,1,6,Down,Iron Sword/Bandages</Unit>

And this is how you can now tell the game to have that character spawn with the Iron Sword already equipped:

<Unit>0,1,Sabrina/Strider,1,6,Down,Iron Sword-E-/Bandages</Unit>


The game now remembers which items each character has equipped at the end of each battle, and auto-equips it at the start of the next battle.

When an item is unequipped, the game now automatically removes any attacks dependent on that item.

Attacks now have a new attribute called dependsUpon; this keeps characters from using weapon-dependent special moves when they don't have the appropriate weapon equipped. It works by telling the game when an advanced physical attack relies upon the character being able to execute the basic version of the attack first.

So, for instance: if a character knows Double Strike (an advanced sword attack with dependsUpon set to "Sword"), the game won't actually make Double Strike available to use unless the character is able to use Sword as well.

For attack dependency to work in this way, the character must not have the basic attack as a natural attack! Otherwise, the character will simply be able to execute (for example) Sword and all of its dependent attacks regardless of whether the character has the appropriate weapon equipped. If you want to make types of attacks dependent on equipment, make sure each of the basic physical attacks (Sword, Spear, Mace, Bow, etc.) is available only through the grantsAttack attribute of equippable items of the appropriate type.


Items now have a new attribute: requirements. This tells the game which characters can use (or equip) this item. There are three requirement types: race, class, and level. An item may use any combination of the three.

To create race requirements, type r:RaceName1,RaceName2,etc.; this will tell the game that any of the named races (and only those races) may use the item. So, to create armor that may only be equipped by Humans and Lissit, you'd type the following in for the requirements attribute:


Class requirements work exactly like race requirements, but they use a 'c' instead of an 'r.' This will tell the game that only the Swordsman, Spearman and Warrior classes may use the item:


Finally, you can impose level requirements on an item using 'l'--if the character is below the level named, the item won't be useable. For example:


To bring all of this together: say you want to create a sword useable only by Humans and Spriggats belonging to the Swordsman class, and only those of level 6 or higher. This is how you'd define the requirements:


Only characters meeting every requirement would be able to equip the weapon.


The past few days have been spent primarily on fixing bugs that had crept their way into the game; I've got them all worked out now, I believe, except for one particularly insidious one that seems to manifest when AI units are shoved onto a wall tile and fall. I'll try to figure that out by sometime tomorrow.

Also, a small thing: the "M" hotkey will now work to toggle between swimming and the actions menu if a character is in "swimming mode." (Previously, it only toggled between normal movement and the actions menu.)