The Sinister Design Forums

Games => Together in Battle => Topic started by: CraigStern on June 05, 2016, 05:39:11 PM

Title: A new engine!
Post by: CraigStern on June 05, 2016, 05:39:11 PM
Hm! :)
Title: Re: What's this?
Post by: Ertxiem on June 05, 2016, 05:57:38 PM
It seems that a new game is being woven...
It's sparkling my curiosity.
Title: Re: What's this?
Post by: CraigStern on June 06, 2016, 02:36:55 PM
Quote from: Ertxiem on June 05, 2016, 05:57:38 PM
It seems that a new game is being woven...

Sure does look that way, doesn't it? ;)
Title: Re: What's this?
Post by: CraigStern on June 06, 2016, 04:54:10 PM
Hmmmmm.
Title: Re: What's this?
Post by: ArtDrake on June 07, 2016, 12:12:14 AM
Almost certainly something Telepath, then, given those abilities. A procedural character generator, though -- a tabletop Telepath game?
Title: Re: What's this?
Post by: CraigStern on June 07, 2016, 11:25:37 AM
Well, it'll be displayed on a flat surface. :)
Title: Re: What's this?
Post by: bugfartboy on June 07, 2016, 02:19:51 PM
Text-based adventure game, like those of old?
Title: Re: What's this?
Post by: CraigStern on June 07, 2016, 03:14:21 PM
Huh! I hadn't given any real consideration to the thought of making a text adventure; what an interesting idea. There's not much of a market for those, unfortunately.
Title: Re: What's this?
Post by: CraigStern on June 09, 2016, 01:15:53 PM
:)
Title: Re: What's this?
Post by: CraigStern on June 10, 2016, 11:43:04 AM
And one more, just for fun.
Title: Re: What's this?
Post by: bugfartboy on June 10, 2016, 05:27:53 PM
Quote
Tags: Allergy,random:Weakened:Damage|None|6
Yes! Finally! A game that implements immersive allergy mechanics! Now everyone will understand the misery hayfever causes!
Title: Re: What's this?
Post by: CraigStern on June 13, 2016, 09:19:20 AM
Not everyone; just characters with the Allergy trait. And only to one specific food. ;)
Title: Re: What's this?
Post by: Ertxiem on June 16, 2016, 06:13:43 PM
Is it allergy to...[spoiler]humans[/spoiler]?
Title: Re: What's this?
Post by: CraigStern on June 17, 2016, 08:46:02 AM
Heh! That would be pretty funny. :)
Title: Re: What's this?
Post by: CraigStern on June 17, 2016, 08:46:21 AM
So this is new...
Title: Re: What's this?
Post by: ArtDrake on June 17, 2016, 08:44:11 PM
Oh. Reading the backgrounds, it seems that whatever these are a part of takes place in the same setting as TT. If it weren't for the remarks about it seeming to be a whole new game, I'd guess it was some sort of official expansion pack.
Title: Re: What's this?
Post by: CraigStern on July 04, 2016, 12:28:49 PM
Currently trying to decide between perspective projection and orthographic projection. What do we think?
Title: Re: What's this?
Post by: bugfartboy on July 05, 2016, 05:56:30 PM
If you're going for visibility of depth, perspective really seems to do the trick. Orthographic seems to leave a lot of visual information out.
Title: Re: What's this?
Post by: ArtDrake on July 05, 2016, 11:14:24 PM
Perspective is definitely nicer! It really accomodates the natural desire to simultaneously see a wide area and have plenty of ability to see what's closest to you (i.e., what's front and center is nice and big). Granted, it's subtle for small maps, but I also happen to feel like it's aesthetically nicer.
Title: Re: What's this?
Post by: Ertxiem on July 09, 2016, 05:36:18 PM
I agree that perspective seems nicer.
However, it seems that if you zoom out a bit in the orthographic projection you'll get almost the same thing.
Title: Re: What's this?
Post by: CraigStern on August 29, 2016, 11:20:36 AM
As mentalists had just a wee bit too many distinct things going on in Telepath Tactics, I've decided to break the mentalist class into two: the mentalist and the kineticist, each with a clear tactical focus.

Here's concept art for the new kineticist class!

Title: Re: What's this?
Post by: CraigStern on September 09, 2016, 04:46:33 PM
Another one! ;)
Title: Re: What's this?
Post by: CraigStern on September 09, 2016, 04:50:04 PM
...and one more, for good measure.
Title: Re: What's this?
Post by: CraigStern on October 25, 2016, 11:41:57 AM
Attack targeting is now working! (Shown: Shadow Blast.)
Title: Re: What's this?
Post by: CraigStern on October 27, 2016, 02:42:02 PM
Showing off nonverbal tics in dialogue, plus the addition of a unique "healing" bark. ;)
Title: Re: What's this?
Post by: bugfartboy on October 27, 2016, 07:36:11 PM
Quote from: Spivak
Blood... really isn't the fluid I was hoping to spill today.
Quote from: Spivak
It was good for me.
Quote from: Spivak
Hold still, darling.
Oh geez   ;D
Title: Re: What's this?
Post by: CraigStern on November 26, 2016, 08:35:14 AM
I've made some good progress on the UI this past month, as well as on other crucial systems. :)
Title: Re: What's this?
Post by: CraigStern on November 29, 2016, 01:53:14 PM
Equipment can now be procedurally generated with different attributes, from quality to balance to durability...to more exotic things (like "poisoned").
Title: Re: What's this?
Post by: bugfartboy on November 29, 2016, 07:16:46 PM
This is starting to feel like a procedurally generated dungeon crawler of sorts!
Title: Re: What's this?
Post by: CraigStern on December 08, 2016, 10:38:41 AM
New: I've got the character screen in-progress; attacks now carry their associated status effects; counterattacks are now part of character generation and leveling, and are working properly in combat.

Quote from: bugfartboy on November 29, 2016, 07:16:46 PM
This is starting to feel like a procedurally generated dungeon crawler of sorts!

Well, there's certainly procedural generation at work... :)
Title: Re: What's this?
Post by: CraigStern on December 09, 2016, 12:53:56 PM
Now in the game and working: the undo stack! You can now undo an unlimited number of moves (so long as you don't attack anything).
Title: Re: What's this?
Post by: CraigStern on December 10, 2016, 09:17:32 AM
I've got the basics of procedural character portrait generation in and working! (With humans, anyway.)
Title: Re: What's this?
Post by: CraigStern on December 12, 2016, 04:21:43 PM
I've improved portrait generation, and added support for lissit characters as well. :)
Title: Re: What's this?
Post by: CraigStern on December 14, 2016, 10:21:50 AM
The new character screen is really coming together! As you can see, I splurged and spent a few hundred bucks on some nice new stat icons to make the screen easier to read at a glance. :)
Title: Re: What's this?
Post by: bugfartboy on December 14, 2016, 10:39:28 AM
There seems to be a very noticeable difference in style and quality between the character portrait and the rest of the stat screen.
Title: Re: What's this?
Post by: CraigStern on December 14, 2016, 11:33:40 AM
The new stat icons go okay with the portraits, I think--but I agree that the item icons and the UI background will likely need to be reworked at some point.
Title: Re: What's this?
Post by: CraigStern on December 14, 2016, 08:05:40 PM
Item tooltips are working! Also, selected characters now have their portrait appear over the actions window. :)
Title: Re: What's this?
Post by: CraigStern on December 15, 2016, 03:19:35 PM
Item tooltips have been improved; skill tooltips are now working.
Title: Re: What's this?
Post by: CraigStern on December 16, 2016, 09:46:40 AM
The Rotate button and associated hotkeys are now in-game and working.
Title: Re: What's this?
Post by: CraigStern on December 16, 2016, 12:44:30 PM
Character portraits now support differing facial expressions: angry, concerned, excited, happy, irritated, mean, nervous, pained, sad, and wink.

Characters now get a default facial expression for their portrait based on the personality trait that manifests most clearly in their dialogue.
Title: Re: What's this?
Post by: CraigStern on December 17, 2016, 10:36:04 PM
I've updated the combat engine to use a proper damage queue to account for deferred damage situations (as where characters are knocked back or thrown bodily by an attack). Speaking of which: I've got the basics of knockback abilities like Shove now in-game and working!

Also, fun bonus: there's now a little flash of light that appears when an attack hits, just before the sparks go flying out. :)
Title: Re: What's this?
Post by: CraigStern on December 18, 2016, 01:07:41 PM
Attacks can now impart status effects (and resistances factor in appropriately to whether those status effects "take").

Pop-up text can now be strung together in sequences. Damage pop-ups are now sandwiched between "Backstabbed!" and status effect pop-up messages (if any) during an attack.
Title: Re: What's this?
Post by: CraigStern on December 20, 2016, 01:25:15 PM
The reflexes stat is working properly in the battle engine! (A character with reflex points remaining during a round will turn to face an attacker that would otherwise backstab them, then lose a reflex point. Reflex points regenerate at the start of a character's turn.)

To produce more variation in human character portraits, nose size now varies by up to 20% between characters.
Title: Re: A new engine!
Post by: CraigStern on December 21, 2016, 05:11:20 PM
Status effect icons are now in the game! They're now displayed on the character screen when character are affected by varying status effects--they're smaller than the actual names of the status effects are in text, so this should help avoid the issue sometimes encountered in Telepath Tactics where characters got so loaded up with status effects that they couldn't be displayed anymore. :)

Below, poor Alan Miller is afflicted with both 'Immobilized' and 'Frozen' statuses.
Title: Re: A new engine!
Post by: bugfartboy on December 21, 2016, 06:49:48 PM
You've probably already thought of it, but a tool-tip on each of the status effect icons giving the name of the effect might be a good idea.  A step further than that might be indicating how many instances of that effect are active.  E.g. If there's only one instance of "Slowed", just that would work, but maybe "Slowed x3" if there are three instances in play?
Title: Re: A new engine!
Post by: CraigStern on December 24, 2016, 11:49:19 AM
Yup! That is planned for inclusion; just haven't gotten around to it yet. :)
Title: Re: A new engine!
Post by: CraigStern on December 27, 2016, 11:41:49 AM
I've reworked the character screen yet again to make better use of space and increase the size of the icons for easier comprehension at a glance.

Instead of just relying upon a stream of pop-up text, when a character levels up, there is now a proper level-up screen that lets you see how a character has improved in the context of their existing stats. (Improved stats show both their 'before' and 'after' values, and the icons for these stats throb to draw the player's eye directly to them.)

In both screens, stat icons now display what stat they represent upon mousing over.

Instead of just blinking into existence, both the character screen and the level-up screen now have a quick little 'zoom in' animation when they appear onscreen.

The game now queues up level-up information for those rare occasions where multiple characters level at the same time, then displays the level-up screens for each character in succession.

Oh, also: the game now does Dodged! and Blocked! pop-ups whenever a character, y'know...dodges or blocks an attack.
Title: Re: A new engine!
Post by: CraigStern on December 28, 2016, 03:10:32 PM
Created a couple of new golem skills to give them a greater variety of tactics: Backthrow (for stone golems--tosses the target behind the golem) and Rending Arc (for bronze golems--hits 270 degrees around the golem, deals slash damage, and causes Softened status).
Title: Re: A new engine!
Post by: CraigStern on December 28, 2016, 04:58:05 PM
Characters (okay: stone golems, specifically) can now throw units over other characters. ;)

Axefighters now get Overhead Chop, and Swordsmen get their own equivalent skill called Overhead Strike.
Title: Re: A new engine!
Post by: CraigStern on December 28, 2016, 05:22:36 PM
Bowmen and Spearmen now get access to Pinning Shot and Pinning Thrust, respectively, skills which have a 75% chance to cause Immobilized status when they hit their targets.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 09:37:38 AM
Units now move in proper parabolic arcs when thrown.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 12:01:31 PM
Characters that are thrown or shoved now send up a little cloud of dust when they land.

Characters can no longer move other, non-flying characters upwards by more than 1 unit of elevation between spaces unless moving them parabolically (i.e. throwing them).

Thrown characters now land on the first available space not blocked by other characters.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 12:26:47 PM
Got the pulling ability working properly.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 02:29:41 PM
Frozen, Stunned, and Immobilized statuses now prevent units from moving.

Clicking a character who is Frozen or Stunned now produces pop-up text informing you of their status instead of allowing you to select them.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 04:02:51 PM
New assassin skill: Hide. (Makes the AI a lot less likely to consider the unit a viable target.)

New spriggat skills: Deep Breath (ends the turn, but boosts the user's psy by 50% until the end of the following turn); and Dive (a powerful claw attack with 1 space of knockback).
Title: Re: A new engine!
Post by: CraigStern on December 29, 2016, 05:11:32 PM
A "grayed out" effect is now applied to characters after they use a turn-ending attack.
Title: Re: A new engine!
Post by: CraigStern on December 30, 2016, 10:16:53 AM
Created a clickable pop-up message box class; it's now used within the level-up screen to notify the player when a character gains a new attack, a new mastery, a new counterattack, or a bonus stat proficiency (i.e. anything at all other than your standard-issue stat increases).

The message box can queue up multiple messages, and will proceed through them as the player clicks; when no more messages remain and the player clicks, the message box will vanish.
Title: Re: A new engine!
Post by: CraigStern on December 30, 2016, 01:42:07 PM
The afterAtk attribute of a character skill ("End Turn", "Can Move", "Use Once" or "Unlimited") now gets applied to the user.

Characters will pop up text that says "Turn is over!" if you try to select them after they use an "End Turn" skill.

A "Use Once" skill that has already been used will become redded out in the Actions Menu, and no longer selectable.

After using a "Can Move" skill, all of that character's skills become redded out in the Actions Menu, and no longer selectable.
Title: Re: A new engine!
Post by: CraigStern on December 30, 2016, 04:12:59 PM
Mousing over a status effect icon in the character screen now produces a pop-up with the name of the status effect and a short description of what it does.
Title: Re: A new engine!
Post by: CraigStern on January 02, 2017, 06:19:32 PM
Equipped items now add their tags to the character.

Unequipping an item now removes the item's associated skills, tags, and stat modifications from the character.

Attack dependencies are now working (e.g. if skills use a weapon, characters can no longer use them without having the appropriate type of weapon equipped).

Characters no longer attempt to dodge or block skills originating from other characters on their team, provided those skills either deal no damage or have knockback (e.g. Shove, Pull, or Throw)
Title: Re: A new engine!
Post by: CraigStern on January 04, 2017, 03:41:19 PM
New item: Foreseeing Orb. When equipped, grants Reflexes +2 and Accuracy +20.

Reworked the way "CharClasses.xml and ObjClasses.xml" data is stored to permit quicker and easier loading of premade characters.

Reformatted all of the unit data from the "The Vengeance of Emma Strider" campaign to meet the new format.
Title: Re: A new engine!
Post by: bugfartboy on January 04, 2017, 09:24:21 PM
Will levels of accuracy above 100% provide a chance to land a critical hit of some sort?  i.e. will using an attack with a base accuracy of 100%, with character accuracy of 100% boosted to 120% with the Foreseeing Orb provide a 20% chance to deal increased damage?
Title: Re: A new engine!
Post by: CraigStern on January 04, 2017, 10:04:14 PM
Nope: Accuracy above 100 basically offsets Dodge (a character with accuracy of 120 will be able to always hit a character with Dodge of 20 or less using most attacks); it can also be used to compensate for the miss chance on certain inherently inaccurate attacks (like Overhead Chop, Throw Axe, or Arced Shot, which incur an accuracy penalty in exchange for greater range or damage). Along these lines, it also partially mitigates the effects of being Blinded.

Just in general, crits are really not something I'm planning to include in my games anytime soon.
Title: Re: A new engine!
Post by: CraigStern on January 05, 2017, 04:08:23 PM
The game engine now successfully loads premade characters from XML! :D
Title: Re: A new engine!
Post by: CraigStern on January 06, 2017, 01:49:47 PM
Got turns working in the battle engine; pressing End Turn (or the E hotkey) ends the current turn, moving to the next player. When all players have had a turn, the round ends and the first player goes once more. Ending a turn resets all characters appropriately.

Altered the formatting of special characters within character dialogue in XML so that I can include bracketed character actions within dialogue variants (see e.g. (http://answers.unity3d.com/questions/1293252/negating-specific-sequences-of-characters-in-a-reg.html))

Orange "dummy tiles" showing enemy movement range now no longer interact with the mouse.

Left-clicking a character who has move tiles (or dummy tiles) already visible onscreen will now toggle them off.

Saved game files now store the name of the campaign, the player's current money, a dictionary that can be used to track the player's current reputation with various different factions, and a common (reserve) inventory.
Title: Re: A new engine!
Post by: CraigStern on January 06, 2017, 04:40:41 PM
When loading data on the game's skills, items, and premade characters, the game now loads the skill, item, and premade character data specific to whatever the current campaign is. It then supplements that data with any non-duplicative entries it can find from the default data folder. If identically named entries appear in both places, the game will go with the current campaign's variant instead of the default version (i.e. if Bandages appear in both places but the campaign has them useable 3 times instead of 2 and healing 14 health instead of 12, the campaign version will govern).

Premade characters are now loaded with their starting inventory in place; any inventory items that are marked to start out equipped (with an [E] symbol), the characters spawn with those items equipped.
Title: Re: A new engine!
Post by: CraigStern on January 07, 2017, 12:51:23 PM
Destructible objects now load properly, and react correctly when moused over.
Title: Re: A new engine!
Post by: CraigStern on January 08, 2017, 10:14:30 AM
The game camera now pans over to the attacker and smoothly zooms in when an attack is launched, then pans over to the target, then zooms back out again a second or two after the attack hits. The zooming in effect will provide a much nicer view of the game's sprites and animations. :)
Title: Re: A new engine!
Post by: CraigStern on January 08, 2017, 12:49:22 PM
Got "Create" skills working.

The actions menu now disappears when targeting an attack, and reappears after the attack concludes (or when the attack is canceled).
Title: Re: A new engine!
Post by: CraigStern on January 09, 2017, 04:33:15 PM
Instead of first panning over to the attacker and then panning over to the target, the game camera now pans to a point equidistant between the attacker and target, then stays put for the remainder of the attack sequence.

The game can now import and parse tile data from XML. The game can now import XML level files and parse level objectives, conditions, and miscellaneous level info.
Title: Re: A new engine!
Post by: CraigStern on January 10, 2017, 04:26:32 PM
The game now successfully parses <Unit> tags in level files as well, and successfully loads TT levels from XML! (Below, you can see a shot of the battle at Adelbrae in the new engine.)
Title: Re: A new engine!
Post by: CraigStern on January 11, 2017, 01:32:31 PM
Generic units that carry specific items in a given battle (i.e. treasure chests or the occasional bandit) now spawn with those items in their inventory.

Reformatted XML dialogue to make it more human-readable and allow for easier, more accurate importing with less risk of errors.
Title: Re: A new engine!
Post by: CraigStern on January 12, 2017, 04:07:19 PM
The game now parses all associated scripts and dialogue from XML when a level loads, including replies and actions.

There is now a dialogue screen in the game that gets shown when the appropriate line of dialogue is triggered. (There is still a lot of work to do there, though: the only supported triggers at the moment are OnTurn and OnLoaded; the only supported replies are NextBranch, NewBranch, and EndConv; and no actions are supported quite yet.)
Title: Re: A new engine!
Post by: CraigStern on January 13, 2017, 01:50:42 PM
Dead units now drop an item sack containing their old inventory when they die.
Title: Re: A new engine!
Post by: CraigStern on January 16, 2017, 03:02:23 PM
Began the long, tedious process of cropping all the frames on all of the old character animations so that they can all be packed tightly into power-of-2-sized sprite sheets for more optimal memory usage.

Completed thus far: walk animations for all genders of every class from the original game--Arbalist, Assassin, Axefighter, Barudit, Bowman, Bowmaster, Bronze Golem, Caduceus, Cavalier, Crossbowman, Cryokineticist, Cryokurios, Drake, Engineer, Fencer, Gasul, Greater Spriggats (Dark, Frost, Golden and Red), Machinist, Mantis Knight, Marauder, Megalith, Mentalist, Photokineticist, Photokurios, Psy Healer, Puppetmaster, Pyrokineticist, Pyrokurios, Sentinel, Shadowheart, Shadowling, Skiakineticist, Skiakurios, Spearman, Specter, Spirit, Spriggats (Dark, Frost, Golden and Red), Stone Golem, Swordsman, Titan, and Whisper.
Title: Re: A new engine!
Post by: CraigStern on January 18, 2017, 04:16:47 PM
Spent yesterday cropping a bunch more animations when I suddenly realized that the sprite packing program I was using was going to scramble all of the frames of the different animation types together, making it nearly impossible to arrange them correctly in-engine. I then discovered that the freeware program Alferd Spritesheet Unpacker will split spritesheets into cropped individual frames, so I basically wasted a bunch of time trying to shrink these things manually. (Oops.) Performed a bunch of research and determined that unpacking spritesheets into individual cropped frames kept in subfolders, then processed through TexturePacker is the way to go as far as generating optimized spritesheets with the frames attached to their respective animations. Thus far, I've split every last female swordsman animation into cropped frames, but that's it.

On the non-animation front:

- began implementing dialogue script actions. So far I have GoTo, GoToLastBranch, EndConvImmediately, ShakeScreen, SpawnParticlesAt, HomePage, AddPortrait and ClearPortraits working.
Title: Re: A new engine!
Post by: CraigStern on January 19, 2017, 11:10:31 AM
The game engine now converts procedurally generated character combat barks into useable dialogue in battle. Death barks and victory barks are now triggered at the appropriate moment during an attack sequence.
Title: Re: A new engine!
Post by: CraigStern on January 19, 2017, 01:01:48 PM
Added the smash, slash, and pierce visual effects into the engine and got them animating correctly.
Title: Re: A new engine!
Post by: CraigStern on January 19, 2017, 03:23:42 PM
At the start of a player's turn, the game now finds the average of all coordinates for characters on that player's army, finds all such characters within 6 spaces of there, and then pans to the coordinates closest to the average of those characters' coordinates. (In short, it pans to a group of characters that are close to the average point of all characters in the army.) If the game can't find such a group (i.e. because the units are spread out exclusively in various far-flung corners of the map), it just picks the first character in that player's roster and pans over to him or her.
Title: Re: A new engine!
Post by: CraigStern on January 19, 2017, 04:25:05 PM
Implemented LastBranch, LastLastBranch, and LastLastLastBranch reply types.
Title: Re: A new engine!
Post by: CraigStern on January 22, 2017, 10:26:54 PM
Premade, unique characters can now be assigned victory barks using the vicBarks attribute; the game will now successfully import the barks along with the character, and they will use the barks when they defeat enemies. (Here, for instance, are Emma's new victory barks as they appear in the XML file:

vicBarks="And stay down!/You deserved that./We're done here./That's enough out of you./Mess with my family, and you'll have to go through me."

Characters can walk over item sacks that have been dropped on the battlefield.
Title: Re: A new engine!
Post by: CraigStern on January 23, 2017, 10:58:36 PM
Character inventories are now capped at 12 items per character. Grabbing an item sack with enough items to exceed this limit will now result in the character taking as many items as he/she can before hitting the limit; all excess items will remain in the item sack.

If a character dies on a space with an existing item sack, that unit's inventory is now added to the existing sack instead of the game attempting to spawn a second sack.
Title: Re: A new engine!
Post by: CraigStern on January 29, 2017, 12:24:45 AM
Lost a few days to a bug in Unity that corrupted some files, but I'm back! Coded a few quick interface things:

-clicking anywhere onscreen now advances dialogue when there aren't multiple reply options onscreen
-the Escape key now advances dialogue when there aren't multiple reply options onscreen
-the Escape key now closes the character screen (if one is open)
Title: Re: A new engine!
Post by: CraigStern on January 29, 2017, 09:31:40 AM
-Dialogue text now animates! It now appears onscreen character by character, quickly, to mimic the progression of words being spoken by the speaker.
Title: Re: A new engine!
Post by: CraigStern on January 29, 2017, 03:46:33 PM
-got branches with multiple different replies working in dialogue.
-got the NamedBranch reply type working in dialogue.
Title: Re: A new engine!
Post by: CraigStern on January 29, 2017, 05:41:52 PM
-got Move skills working
-got undo working with Move skills
Title: Re: A new engine!
Post by: CraigStern on January 30, 2017, 04:53:07 PM
-Move skills with moveType Teleport now work correctly
-particles can now be assigned on a tile-by-tile basis in TileData.xml
-shoving or throwing a character onto a water or lava tile now sends up a spray of water or lava particles, respectively
Title: Re: A new engine!
Post by: CraigStern on February 01, 2017, 05:06:23 PM
-created a new icon for when characters are swimming (as opposed to walking or flying)
-characters that have been shoved into water or lava that aren't flying and aren't atop a bridge or other object are now automatically set to "swimming" movement type
-characters now take drowning/burning damage at the start of their turn if they're swimming in water/lava!
Title: Re: A new engine!
Post by: CraigStern on February 02, 2017, 12:10:31 PM
-characters with the "Swimming" movement type can now use the Swim skill to move one space per turn (and to emerge onto dry land). Characters with the "Swimming" movement type now cannot use any other skill.

-characters can now be assigned tags and/or triggers via the level they load in.

-updated the character screen for destructible objects so it no longer shows text regarding skills, masteries, class, level, or experience.
Title: Re: A new engine!
Post by: CraigStern on February 02, 2017, 04:37:58 PM
-Enthralled, Heavy, and Levitating status effects now work!

-Burning and Poisoned status effects now work as well, dealing damage once per round at the beginning of the affected unit's turn.

-status effects now last for a set number of turns, then wear off.
Title: Re: A new engine!
Post by: CraigStern on February 02, 2017, 05:09:03 PM
-added in the 5X damage multiplier for Explode attacks against destructible objects

-Create skills that target multiple spaces now create an instance of the thing on each separate space
Title: Re: A new engine!
Post by: CraigStern on February 03, 2017, 04:13:39 PM
-UI elements that appear over characters in the Canvas now track the characters' positions when the game camera zooms in and out / pans around.

-mousing over skill buttons now previews the skill's range directly on the battlefield.

-moved character portraits over to the left side of the actions menu to make them less obtrusive.
Title: Re: A new engine!
Post by: CraigStern on February 06, 2017, 01:23:43 PM
-the text overlay is now working. It automatically displays the name of the current attack when an attack is executed.

-the AddTextOverlay and RemoveTextOverlay script actions are now in-game and working.
Title: Re: A new engine!
Post by: CraigStern on February 06, 2017, 02:58:17 PM
-the text overlay now displays the current selected skill during targeting
Title: Re: A new engine!
Post by: CraigStern on February 06, 2017, 04:06:41 PM
-Falling skills that cause Heavy (like Gravity Spike and Gravity Well) now only damage flying characters
Title: Re: A new engine!
Post by: CraigStern on February 06, 2017, 04:43:12 PM
-skills can now directly affect stats other than Health. (See e.g. Drain, Terror, and Static Shield)
Title: Re: A new engine!
Post by: CraigStern on February 07, 2017, 11:55:52 AM
-buffing status effects like Lucid and Strengthened are now working correctly
Title: Re: A new engine!
Post by: CraigStern on February 07, 2017, 01:49:09 PM
-fixed formatting on various tags so that skill modifier tags (modifying cost and range, for instance) now work correctly in the new engine

-the engine now supports arbitrary and unconventional resistances (for example: Drowning Resistance or Falling Resistance)

-got the "Swimmer" life skill working: characters with this life skill can Swim at 0 Energy cost, and will take only 30% the normal Drowning damage for remaining in the water (i.e. 2 damage instead of 6)
Title: Re: A new engine!
Post by: CraigStern on February 07, 2017, 04:03:02 PM
-the selfHealingFactor and selfFocusFactor skill attributes (i.e. the things that make skills like Feedback, Soul Suck, and Transfer function as they do) are now working in the engine!
Title: Re: A new engine!
Post by: bugfartboy on February 08, 2017, 06:46:23 PM
Quote from: CraigStern on February 07, 2017, 04:03:02 PM
-the selfHealingFactor and selfFocusFactor skill attributes (i.e. the things that make skills like Feedback, Soul Suck, and Transfer function as they do) are now working in the engine!

Is a negative selfHealingFactor value valid in the new engine?  i.e. are cast-from-health skills possible?
Title: Re: A new engine!
Post by: CraigStern on February 09, 2017, 11:27:50 AM
Quote from: bugfartboy on February 08, 2017, 06:46:23 PMIs a negative selfHealingFactor value valid in the new engine?  i.e. are cast-from-health skills possible?

It's coded differently in the new engine than it was in Telepath Tactics, so I believe they should be!
Title: Re: A new engine!
Post by: CraigStern on February 09, 2017, 04:27:57 PM
-characters now regain energy from resting (or from moving without attacking).

-when characters deliver victory and defeat monologues, the scene now pauses while they talk, then resumes animating after the dialogue is finished.

-enemies that die from burning or poisoned status effects now grant experience to the character that placed those status effects on them (put another way: pyrokineticists no longer get penalized for finishing off enemies via the "Burning" status effect).
Title: Re: A new engine!
Post by: CraigStern on February 13, 2017, 02:12:02 PM
-the game now detects Pressure triggers on objects located on various spaces, stops characters when they move over them, then runs the associated script

-got the Run action working.

-reformatted all the dialogue in PersistentDialogue.xml to satisfy the new formatting requirements.

-the game now successfully loads dialogue and scripts out of PersistentDialogue.xml, and uses it when checking for triggered dialogue and run scripts.
Title: Re: A new engine!
Post by: CraigStern on February 15, 2017, 10:59:03 AM
-got the -SCENE-, -PLAYERTURN-, -TURN-, -FULLTURN-, -Y-, -X-, -NAME-, -LNAME-, -FULLNAME-, and -ATTACKER- special characters working in dialogue and in scripts.

-added new -ELEV-, -CLASS-, -CHAR2-, -CHAR2Y-, -CHAR2X-, -CHAR2ELEV-, and -CHAR2CLASS- special characters. (These are replaced with the triggering character's elevation, the triggering character's class, the secondary character's first name, the secondary character's y coordinate, the secondary character's x coordinate, the secondary character's elevation, and the secondary character's class, respectively).

-got the DamageCharAt, AddStatus, and AddStatusAtCoords actions working.

-got the RemoveTriggerObj action working, and added an optional parameter to make it so it only removes units triggering a specified script.

-due to all of the above, traps are now working correctly in the engine. :)
Title: Re: A new engine!
Post by: CraigStern on February 16, 2017, 05:08:30 PM
-added the Aptitude character stat to the engine; it's subtracted directly from 100 to determine the experience needed for a character to level up. (Aptitude is 0 for most characters.)

-added the Stat Gain character stat to the engine; it determines how many stats are chosen to improve upon level-up. (Stat Gain is 2 for most characters.)
Title: Re: A new engine!
Post by: CraigStern on February 17, 2017, 05:08:05 PM
-characters now sometimes offer commentary when building structures or healing one another.

-attack accuracy is now displayed in targeting reticles.

-single space parabola animation added to the game for 1-space Leap usage.
Title: Re: A new engine!
Post by: CraigStern on February 18, 2017, 08:56:01 PM
-laid the groundwork for army-specific info and alliances.

-characters now have stat proficiencies sprinkled in with their skill progressions.

-skills progressions now continue beyond promotion, with characters continuing to learn new stuff until they reach level 10 post-promotion.
Title: Re: A new engine!
Post by: Zetor on February 19, 2017, 05:16:41 AM
Oooh, shiny. Is this going to be a "Director's Cut" update to TT, or are you going to do a new release (possibly with some more stuff)?

Also, are you considering multiplayer using Unity's networking functionality? It'd probably be a pretty big headache, but may get more people interested compared to hotseat...
Title: Re: A new engine!
Post by: CraigStern on February 19, 2017, 09:44:32 PM
-got the item interaction UI designed and partially working in the character screen.

-equipping and unequipping items in the character screen now works.

Quote from: Zetor on February 19, 2017, 05:16:41 AM
Oooh, shiny. Is this going to be a "Director's Cut" update to TT, or are you going to do a new release (possibly with some more stuff)?

Why just one? ;)

Quote from: Zetor on February 19, 2017, 05:16:41 AM
Also, are you considering multiplayer using Unity's networking functionality? It'd probably be a pretty big headache, but may get more people interested compared to hotseat...

If my experiences with Telepath Tactics taught me anything, it's that there are way more people interested in the breadth and depth of single player content available in my games than there are people concerned about multiplayer--and I can make a whole lot of good single player content with the time and resources that multiplayer would require. So the choice is pretty easy: I'm focusing on single player for the foreseeable future.
Title: Re: A new engine!
Post by: CraigStern on February 21, 2017, 02:35:52 PM
-using consumable items in the character screen now works.

-dropping items from the character screen now works.

-the new item interaction UI now has tooltips for the Use/Equip/Unequip, Give, Drop, and Cancel buttons.
Title: Re: A new engine!
Post by: CraigStern on February 22, 2017, 05:01:54 PM
-characters can now give items in their inventory to adjacent characters.
Title: Re: A new engine!
Post by: CraigStern on February 23, 2017, 03:25:57 PM
- Create skills are now limited to targeting appropriate terrain based upon whether they create bridges or not.

- bridges now work properly (though I'll need to create specialized 3D assets for them--along with walls, doors, and fences--at a later date).

-the game now saves and loads custom integer and custom string variables.

-the SetVal, SetValByVal, SetString, and SetStringByString actions are now working.

- the -VAL:- and -STR:- special characters are now working.
Title: Re: A new engine!
Post by: CraigStern on February 24, 2017, 10:28:26 AM
-the SetStat, SetValByStat, and SetStrByStat actions are now working. (Note that I'm not adding the -STAT:- special character to the new engine; you'll wanna use SetValByStat and -VAL:- instead, or SetStrByStat and -STR:-.)

Supported integer stats in SetStat are now:

Army (0 for the player, 1 for the default enemy army)
Coords (y and x, delimited by a colon)
Level
PromotionLevels
(levels "lost" from a prior promotion--used in experience scaling and such)
Experience
Aptitude
(subtracted directly from the experience needed to level; 100 - Aptitude = Exp Needed)
Stat Gain (number of stats that improve on level-up; it's 2 by default)
Morale
Damage
Drain
Steps Taken
Counters Used
Reflexes Used
Pushable
(1 means it's pushable; 0 means it isn't)
Health
Energy
Strength
Psy
Speed
Max Steps
Dodge
Accuracy
Counter Limit
Perception
Reflexes
Pierce Res.
Slash Res.
Crush Res.
Mental Res.
Heat Res.
Cold Res.
Shadow Res.
Light Res.
Poison Res.
Appetite


Supported integer stats in SetValByStat are the same, except for Coords--instead, you get Y Coord and X Coord separately. (You can also get Elev.)

Supported string stats in SetStat are now:

Name (first and last delimited with a colon)
Class
Race
Sex
Sexual Preference
Move Type
Facing
(Up, Down, Left, or Right)
Default Expression (the type of facial expression used by default for a character with a generated portrait)

Supported string stats in SetStrByStat are the same, but you can also get Default Move Type (ignores temporary changes to the character's move type, such as Swimming or changes wrought by the Heavy or Levitating status effects).
Title: Re: A new engine!
Post by: CraigStern on February 24, 2017, 02:45:50 PM
-the SetStatByVal and SetStatByStr actions are now working. (I won't be adding SetStatByStat back in, as it introduces potential for people to try to set int stats by string stats, and vice versa.)

-SetString now permits you to use commas within the second parameter without screwing everything up! (Just...don't use -STR:- with a string containing commas in the second parameter within the parameter of another action. It'll end badly.)

-screen-edge panning is now working in the game.
Title: Re: A new engine!
Post by: bugfartboy on February 24, 2017, 05:58:39 PM
I'm curious: are numerical values in the new engine limited to integers, or are floating-point values supported?
Title: Re: A new engine!
Post by: CraigStern on February 25, 2017, 08:52:47 PM
-IfStringGoTo, IfValGoTo, and IfStatGoTo are now working.

-IfStringRun, IfValRun, and IfStatRun are now working. As with Run, you can now run multiple scripts in a row using a single call to one of these actions; just delimit the names of the individual scripts you wish to run with the vertical bar character (|). These functions no longer automatically interrupt all following actions when successful--instead, there is now a separate action for that called...

-ClearQueue. When called, ClearQueue immediately clears all actions that have been queued up from the current dialogue branch/script. Use this as the last action in a script to prevent all other actions that were queued up to occur after.

For example, say Branch 0 has the following actions:

<Action>Run/A Script</Action>
<Action>SetStr/ExampleStr,This is what it'll be without ClearQueue</Action>


And A Script has:

<Action>SetStr/ExampleStr,This is the string as set in A Script</Action>
<Action>ClearQueue</Action>


On branch 0 of the dialogue, both Run and SetStr are queued; when Run is executed, however, A Script runs its own SetStr and then clears the original SetStr from the queue using ClearQueue. The result: ExampleStr is set to This is the string as set in A Script, and is not changed to This is what it'll be without ClearQueue.


Quote from: bugfartboy on February 24, 2017, 05:58:39 PM
I'm curious: are numerical values in the new engine limited to integers, or are floating-point values supported?

Floating point values are used for a few things--certain things related to skills and procedurally generated items, for instance. As far as character stats, though, everything is in integers. (Integers take less memory and require less processing power to use than floating-point numbers, and they don't accumulate floating-point errors, so I prefer to use them whenever I have the chance.)
Title: Re: A new engine!
Post by: CraigStern on February 26, 2017, 04:11:19 PM
-the PlaySound action is now working.

-the SpawnUnit action is now working. (This is the same as the old SpawnChar action, but with an optional 8th parameter: inventory, consisting of items delimited by colons.)

-the GenerateUnit action is now working. This is like SpawnUnit, but instead of loading a premade unit from XML, it procedurally generates a new, unique character of a specified class at a specified level. Parameters: (1) army number; (2) character class; (3) character level; (4) character name (use RANDOM here to have the game generate one for you); (5) Y coordinate; (6) X coordinate; (7) facing direction; (8) triggers; (9) tags; (10) inventory (note that the character may be generated with certain items or equipment in addition to whatever you specify here).

Don't try to use this for destructible objects or custom character classes, btw: this currently only works for characters belonging to one of the game's 24 default character classes.
Title: Re: A new engine!
Post by: CraigStern on February 27, 2017, 04:48:12 PM
-the OnTalk trigger now works in the game; the Talk button has now been added to the UI, and intiates OnTalk dialogue when the triggering characters are adjacent to one another.

-consumable items can now possess a mastery requirement, thereby limiting which characters can use them.
Title: Re: A new engine!
Post by: CraigStern on February 28, 2017, 04:15:36 PM
-added a gender parameter to the GenerateUnit action in case you want to specify a gender; if you leave it blank, the game will simply pick one for you.

-consumable items can now run scripts when used. (Instead of having script names sandwiched between the <Item> tags, you'll now want to stick them in a runsScripts attribute.)
Title: Re: A new engine!
Post by: CraigStern on March 01, 2017, 04:33:25 PM
-the LevelUp tag now works in the game.

-the tags system now supports cumulative effects (e.g. a character with a ModSkillCost/ModSkillRange/etc. tag who equips a weapon that adds a new instance of that same tag will have those effects stack).
Title: Re: A new engine!
Post by: CraigStern on March 02, 2017, 03:56:07 PM
-obtained finished sprites for the unpromoted version of the Kineticist class.

-obtained finished assets for procedurally generating spriggat portraits; currently plotting the correct placement of assets to allow for visually accurate portrait generation.
Title: Re: A new engine!
Post by: CraigStern on March 05, 2017, 12:25:43 PM
-implemented progressive weapon degradation and breakage when using attacks that employ the weapon.

-finished plotting portrait asset placement for male spriggats.
Title: Re: A new engine!
Post by: CraigStern on March 05, 2017, 03:42:50 PM
-created a "quizzical/confused" facial expression configuration.

-began plotting portrait asset placement for female spriggats.
Title: Re: A new engine!
Post by: CraigStern on March 08, 2017, 09:46:12 PM
- new skill: Preemptive Stance. Cost 4; this gives the user the status effect Preempting.

- the Preempting status effect is now in-game and working. For 1 round, a character with Preempting launches counterattacks before the attacks that trigger them! If the counterattacker has reflexes, he or she automatically uses up 1 reflex point along with the counterattack to completely nullify the incoming attack.

- non-item sack objects no longer display their inventory when right-clicked; you've gotta destroy them to see what they contain. :)
Title: Re: A new engine!
Post by: CraigStern on March 08, 2017, 10:24:12 PM
- new skill: Guard Stance. Cost 1; this gives the user the status effect Alert. The same as Awareness, essentially, but it ends the turn after use. This one will be going to cavaliers.
Title: Re: A new engine!
Post by: CraigStern on March 15, 2017, 11:32:14 AM
Back from PAX East! Here's what I've been working on:

- new skill: Hold. This implements a "zone of control" around the user that lasts for 1 round, rendering enemies who walk into adjacent spaces immobilized. This skill can be learned by the polearm-wielding classes: spearmen and cavaliers.
Title: Re: A new engine!
Post by: CraigStern on March 15, 2017, 03:43:12 PM
- attacks with a "ToTarget:X" moveType attribute (i.e. the Cavalier's Charge skill) are now working correctly.
Title: Re: A new engine!
Post by: CraigStern on March 16, 2017, 02:07:06 PM
- I've implemented some new constraints on character growth and generation to help enforce specialization, help ensure that units work well within their assigned class, and ensure that stat improvements aren't wasted:

      - characters can no longer gain points in a resistance upon level-up if their base resistance of that type is already at or above 80%.
      - characters no longer gain reflex points upon level-up if their base reflexes are already at or above 1. (The step from 1 to 2 reflexes is significant, and this allow me to reserve that progression for certain front-line melee classes at significant moments, like upon promotion.)
      - reflexes can no longer be randomly selected as a growth for generated characters;
      - generated characters can no longer randomly receive growths in resistances against elements they're ordinarily weak to, or which oppose their affinity (i.e. no spirits with growths in mental resistance, no pyrokineticists or red spriggats with growths in cold resistance, etc.);
      - generated characters can no longer randomly receive growths in stats that do not benefit them (i.e. mentalists getting accuracy growths, or psy healers;
      - randomly selected growths are now weighted toward fewer stats and smaller growth probabilities so that character stats more reliably improve in line with the needs of their class. For the same reason, randomly selected growths can no longer get a probability higher than 2.
Title: Re: A new engine!
Post by: CraigStern on March 17, 2017, 02:03:25 PM
- the Set Army Alliance condition is now working in the game. This now works a bit differently than it did before; instead of individually setting each army to a named alliance, you'll just input the number of each army to be allied with one another into a single condition. So instead of...

  <Condition>Set Army Alliance,1,Ambuur Zaris</Condition>
  <Condition>Set Army Alliance,2,Ambuur Zaris</Condition>


...you'd just do:

  <Condition>Set Army Alliance,1,2</Condition>

This way, armies can belong to multiple different alliances with different members. (Also, the use of integers instead of strings for representing alliances will give a bit of a speed boost as the computer processes the viability of different targets on the battlefield.)
Title: Re: A new engine!
Post by: bugfartboy on March 17, 2017, 05:52:26 PM
Quote from: CraigStern on March 17, 2017, 02:03:25 PM
This way, armies can belong to multiple different alliances with different members.

What would happen if an army were allied with both sides of two opposing armies?  e.g. 1 is allied with 2, but not 3, and 3 is allied with 2 but not 1.  Would 2 be ambivalent to the existence of both armies, or would it work to heal/boost both armies, while refusing to attack either of them?
Title: Re: A new engine!
Post by: Ertxiem on March 20, 2017, 05:57:40 PM
Quote from: CraigStern on January 19, 2017, 03:23:42 PM
At the start of a player's turn, the game now finds the average of all coordinates for characters on that player's army, finds all such characters within 6 spaces of there, and then pans to the coordinates closest to the average of those characters' coordinates. (In short, it pans to a group of characters that are close to the average point of all characters in the army.) If the game can't find such a group (i.e. because the units are spread out exclusively in various far-flung corners of the map), it just picks the first character in that player's roster and pans over to him or her.

I was reading older posts here and I thought about a suggestion to an alternative way of selecting the initial point to look at.

Averages sometimes behave in unexpected ways. E.g., if you have your army split in two similar sized groups, the average position would lie in no man's land. If one of the groups is rather scattered, it may happen that the camera will focus on a lonely character.

An alternative would be to pan on the character that has the most units (allies, or allies + enemies) in a neighbourhood (say a square of a given size centred in that character).
Title: Re: A new engine!
Post by: CraigStern on March 21, 2017, 02:57:12 PM
Quote from: bugfartboy on March 17, 2017, 05:52:26 PMWhat would happen if an army were allied with both sides of two opposing armies?  e.g. 1 is allied with 2, but not 3, and 3 is allied with 2 but not 1.  Would 2 be ambivalent to the existence of both armies, or would it work to heal/boost both armies, while refusing to attack either of them?

In that scenario, the latter would occur: army 2 would treat both 1 and 3 as allies. It would attack neither, and would treat the units of both armies as candidates for healing abilities.

Quote from: Ertxiem on March 20, 2017, 05:57:40 PMI was reading older posts here and I thought about a suggestion to an alternative way of selecting the initial point to look at.

Averages sometimes behave in unexpected ways. E.g., if you have your army split in two similar sized groups, the average position would lie in no man's land. If one of the groups is rather scattered, it may happen that the camera will focus on a lonely character.

An alternative would be to pan on the character that has the most units (allies, or allies + enemies) in a neighbourhood (say a square of a given size centred in that character).

That could work too! I'll keep it in mind if the current solution ends up not working properly.
Title: Re: A new engine!
Post by: CraigStern on March 21, 2017, 02:59:22 PM
- I've been working on getting palette swapping working in the game. It's been taking longer than I would like (Unity really isn't designed with this sort of functionality in mind), but I've gotten a significant amount of preliminary work done, and I'm quite confident that I'm going to have this working within the next week. If you don't see any updates for a bit, it's because this one feature is taking me a disproportionately large amount of time to implement.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2017, 09:57:09 AM
- completed 7 army palettes for unit sprites, plus 4 skin palettes for human, lissit, and spriggat character portraits. All palettes are properly formatted to allow dynamic palette-swapping at runtime.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2017, 12:28:24 PM
- mocked up a new "circle" designator graphic, successfully got Unity to palette swap it based on the unit's army color.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2017, 03:29:22 PM
- I just did a mock-up of Mind Shock in pixel art form as a reference for the animator; I think it looks pretty neat, so I figured I'd share it here.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2017, 04:06:31 PM
- the game now successfully palette-swaps the "team color" portions of unit sprites so that individual units wear the colors of their army.
Title: Re: A new engine!
Post by: CraigStern on March 23, 2017, 05:32:07 PM
- created 8 initial sets of palettes for palette-swapping hair, spriggat horns, and lissit spikes on generated characters
Title: Re: A new engine!
Post by: CraigStern on March 24, 2017, 02:59:01 PM
- generated characters are now assigned a skin tone and hair color at random.

- character portraits now successfully palette swap skin tone and hair color to match their character.
Title: Re: A new engine!
Post by: CraigStern on March 28, 2017, 05:08:14 PM
Palette-swapping progress has continued, but is now delayed pending some fixes and improvements by outside parties to assets and tools that I'm using. In the meantime:

-implemented ID[] tags in the game. (In case you forgot: this lets you assign an ID to a particular generic unit, which lets you reference it in in scripts and dialogue actions instead of having to provide a unique character name.)
Title: Re: A new engine!
Post by: CraigStern on March 29, 2017, 03:36:27 PM
- preliminary work on the AI class has begun! The game now performs an initial analysis of all units on the battlefield when a computer-controlled player's turn begins. This initial analysis consists of assigning each unit a base target value based on its status as a character versus an object; the unit's ability to heal other units; whether the unit is the subject of a Protect Char victory condition; and any TargetValue multiplier tags the unit may possess. The game then makes a note of whether the unit is an ally or not, taking any TreatAsArmy tags present on the unit into account.

- as part of getting the above working, the game now ties individual units to the Protect Char and Capture Char conditions present on a given level.
Title: Re: A new engine!
Post by: CraigStern on March 30, 2017, 11:26:25 AM
- the Mind Shock animation is complete! :D
Title: Re: A new engine!
Post by: CraigStern on March 31, 2017, 03:16:42 PM
- updated battles to use new Set Army Alliance format.

- implemented Go First condition.

- imported unit sprite sheets and began the long, slow, boring work of individually creating animation controllers for each unit type, creating animations for each animation in the unit type, splitting the sprite sheets into frames, assigning the correct frames to each animation, and setting up triggers for said animations in their respective animation controllers. (Unity kinda sucks for 2D animations; it's gonna be a while before I'm done with this. Hence, why I've just been using lissit for everything thus far.)
Title: Re: A new engine!
Post by: CraigStern on April 03, 2017, 02:26:28 PM
- worked with the author of the palette-swapping plugin to get it so elements can now be palette-swapped among an arbitrary number of palettes.

- characters are now generated with variable eye color; eyes are now palette-swapped to match skin color, hair color (for eyebrows), and eye color.
Title: Re: A new engine!
Post by: CraigStern on April 03, 2017, 03:54:02 PM
- got male frost spriggat rest and movement animations into the game.

Also, some more character portrait improvements:

- mustaches are now palette-swapped to match character hair color.

- mentalist diadems are now palette-swapped to the correct army color, and are positioned correctly based on head shape.

- nose position is now tweaked algorithmically based upon the character's particular nose size variation.
Title: Re: A new engine!
Post by: CraigStern on April 05, 2017, 12:07:50 PM
- fixed an issue where Unity was improperly interpolating sprite position in between animation frames, causing movement to look weird

- the game now has working rest and walk animations for the male and female barudit, male and female frost spriggats, and the stone golem all in and working. Three classes down, 21 left to go!
Title: Re: A new engine!
Post by: CraigStern on April 05, 2017, 05:28:14 PM
- condensed all red, dark, and golden spriggat animations down into single sprite sheets for better performance / memory usage.

- the game now has working rest and walk animations for the female red spriggat.
Title: Re: A new engine!
Post by: CraigStern on April 06, 2017, 02:40:50 PM
- the game now has working rest and walk animations for the male red spriggat and female dark spriggat.
Title: Re: A new engine!
Post by: CraigStern on April 07, 2017, 04:30:08 PM
- the game now has working rest and walk animations for the male dark spriggat, as well as the male and female golden spriggat.

- spriggat portrait elements fixed to permit dynamic palette-swapping between spriggat sub-types.
Title: Re: A new engine!
Post by: CraigStern on April 10, 2017, 05:05:50 PM
- the game now has working rest and walk animations for the male and female axefighter. (For those of you counting: that's 8 classes down, and 17 or so left to go...plus another 25 for the promoted classes.)
Title: Re: A new engine!
Post by: CraigStern on April 12, 2017, 01:05:03 PM
- the game now has working rest and walk animations for the male and female swordsman, for shadowlings, and for the gasul class.

Current progress on implementing walk and rest animations for the unpromoted classes:

Assassin
Axefighter
Barudit
Bowman
Bronze Golem
Cavalier
Crossbowman
Cryokineticist
Dark Spriggat
Engineer
Frost Spriggat
Golden Spriggat
Gasul
Kineticist
Mentalist
Photokineticist
Psy Healer
Pyrokineticist
Red Spriggat
Shadowling
Skiakineticist
Spearman
Spirit
Stone Golem
Swordsman
Title: Re: A new engine!
Post by: CraigStern on April 13, 2017, 03:46:20 PM
- have a new special effect animation for when a character places a "hold" effect on a space (see below).

- the game now has working rest and walk animations for the bronze golem class.
Title: Re: A new engine!
Post by: CraigStern on April 18, 2017, 04:26:37 PM
- commissioned art for a new tier of procedurally generated weapons.

- the game now has working rest and walk animations for the male and female bowman.
Title: Re: A new engine!
Post by: CraigStern on April 19, 2017, 04:43:48 PM
- the game now has working rest animations for the male and female assassin.
Title: Re: A new engine!
Post by: CraigStern on April 20, 2017, 04:42:34 PM
- the game now has working walk animations for the male and female assassin.

Current progress on implementing walk and rest animations for the unpromoted classes:

Assassin
Axefighter
Barudit
Bowman
Bronze Golem
Cavalier
Crossbowman
Cryokineticist
Dark Spriggat
Engineer
Frost Spriggat
Golden Spriggat
Gasul
Kineticist
Mentalist
Photokineticist
Psy Healer
Pyrokineticist
Red Spriggat
Shadowling
Skiakineticist
Spearman
Spirit
Stone Golem
Swordsman
Title: Re: A new engine!
Post by: CraigStern on April 21, 2017, 04:51:14 PM
- the game now has working rest and walk animations for the male and female spirit.
Title: Re: A new engine!
Post by: CraigStern on April 24, 2017, 05:07:15 PM
- created arrow segment graphics for character movement.
Title: Re: A new engine!
Post by: CraigStern on April 25, 2017, 04:57:18 PM
- the game now has working rest and walk animations for the male and female crossbowman.
Title: Re: A new engine!
Post by: CraigStern on April 26, 2017, 04:01:09 PM
- the game now has working rest and walk animations for the male and female cavalier.
Title: Re: A new engine!
Post by: CraigStern on April 28, 2017, 03:55:48 PM
- gave artist feedback; now have distinct graphics for the Bronze versions of all weapon types and rough drafts for spirit portrait elements.

- created consolidated sprite sheets for the spearman class.
Title: Re: A new engine!
Post by: CraigStern on May 01, 2017, 01:37:55 PM
- obtained new graphics for Bronze quality weapons (and updated some of the existing graphics for upper-end bows and javelins myself)
Title: Re: A new engine!
Post by: CraigStern on May 01, 2017, 05:31:07 PM
- the game now has working rest and walk animations for the male and female spearman.
Title: Re: A new engine!
Post by: CraigStern on May 02, 2017, 09:01:12 AM
- created consolidated sprite sheets for the cryokineticist and engineer classes.
Title: Re: A new engine!
Post by: CraigStern on May 05, 2017, 04:33:25 PM
Work has slowed a bit this week due to busy-ness at work and my parents visiting me from out of town, but I'm continuing to plug away!

- commissioned art for new types of procedurally generated armor.
- gave artist feedback on spirit portraits.
- the game now has working walk animations for the male and female cryokineticist.

Current progress on implementing walk and rest animations for the unpromoted classes:

Assassin
Axefighter
Barudit
Bowman
Bronze Golem
Cavalier
Crossbowman
Cryokineticist
Dark Spriggat

Engineer
Frost Spriggat
Golden Spriggat
Gasul

Kineticist
Mentalist
Photokineticist
Psy Healer
Pyrokineticist
Red Spriggat
Shadowling

Skiakineticist
Spearman
Spirit
Stone Golem
Swordsman
Title: Re: A new engine!
Post by: CraigStern on May 09, 2017, 05:46:58 PM
- the game now has working walk animations for the male and female engineer.
Title: Re: A new engine!
Post by: CraigStern on May 15, 2017, 06:05:37 PM
-interviewed a contractor to help me flesh out procedural character dialogue data

-implemented procedural spirit character portraits

-consolidated the new kineticist animations into single spritesheets
Title: Re: A new engine!
Post by: CraigStern on May 16, 2017, 04:24:27 PM
- the game now has working walk animations for the male and female cryokineticist.

Current progress on implementing walk and rest animations for the unpromoted classes:

Assassin
Axefighter
Barudit
Bowman
Bronze Golem
Cavalier
Crossbowman
Cryokineticist
Dark Spriggat
Engineer
Frost Spriggat
Golden Spriggat
Gasul
Kineticist

Mentalist
Photokineticist
Psy Healer
Pyrokineticist
Red Spriggat
Shadowling

Skiakineticist
Spearman
Spirit
Stone Golem
Swordsman
Title: Re: A new engine!
Post by: CraigStern on May 17, 2017, 10:10:15 AM
-consolidated all remaining (non-promoted) class animations into single spritesheets
Title: Re: A new engine!
Post by: CraigStern on May 17, 2017, 11:16:49 PM
- the game now has working walk animations for the male and female skiakineticist. (Now down to the last 4 of the non-promoted character classes!)
Title: Re: A new engine!
Post by: CraigStern on May 18, 2017, 04:35:20 PM
- the game now has working walk animations for the male and female mentalist and photokineticist.

Current progress on implementing walk and rest animations for the unpromoted classes:

Assassin
Axefighter
Barudit
Bowman
Bronze Golem
Cavalier
Crossbowman
Cryokineticist
Dark Spriggat
Engineer
Frost Spriggat
Golden Spriggat
Gasul
Kineticist
Mentalist
Photokineticist

Psy Healer
Pyrokineticist
Red Spriggat
Shadowling
Skiakineticist
Spearman
Spirit
Stone Golem
Swordsman
Title: Re: A new engine!
Post by: CraigStern on May 19, 2017, 02:44:55 PM
-finished the rest and walk animations in all 4 directions for all genders of all 25 base character classes! (I haven't started on the promoted versions yet.)

-units now finally look like themselves when standing or moving around the map, instead of just looking like female barudit or frost spriggats.
Title: Re: A new engine!
Post by: CraigStern on May 23, 2017, 11:19:56 AM
-finished creating positioning and scaling data for beards for the Spirit portraits

- hired artists to create custom sprites for Emma and Sabrina Strider and to produce assets for procedural shadowling portrait generation
Title: Re: A new engine!
Post by: CraigStern on May 30, 2017, 09:38:40 AM
-obtained new graphics to permit a wider variety of armor (that is easily visually distinguishable) in-game.
Title: Re: A new engine!
Post by: CraigStern on June 01, 2017, 04:41:14 PM
Currently struggling with a bizarre character movement bug in Unity. Spent today stripping the repositioning data out of the frames in the game's walk animations to try to fix the issue; this did not fix it. Gonna keep trying.
Title: Re: A new engine!
Post by: CraigStern on June 08, 2017, 04:38:40 PM
Ended up restoring an old version of the game--this took care of the bug, but also produced days of work getting certain things working again. I should have everything back up to where I was pretty soon, though! In the meantime:

-hired Ryan Richko to create some sweet new music!

-in the process of hiring a 3D modeler to create 3D walls, doors, and bridges for the new engine.
Title: Re: A new engine!
Post by: CraigStern on June 09, 2017, 05:12:21 PM
-the engine now properly displays the stat improvements if a character gains multiple levels at once and improves the same stat 2+ times in the process.

-made some UI improvements.

-fixed a few bugs.
Title: Re: A new engine!
Post by: CraigStern on June 13, 2017, 04:44:18 PM
-finally settled on and successfully hired a 3D modeler!
Title: Re: A new engine!
Post by: CraigStern on June 14, 2017, 05:07:15 PM
Got some more work done on the AI routines. This is going to take me a while to actually complete, as I'm reworking the AI from how it was handled in Telepath Tactics to make it even smarter at its highest difficulty levels.
Title: Re: A new engine!
Post by: CraigStern on June 21, 2017, 05:31:33 PM
--more progress on the AI; the game can now survey and rank the best short-range moves for all characters in an army at a given point in time, using most relevant criteria (the only remaining criteria to account for in the heuristic: knockback and environmental damage and status effects).

--the AI has a number of constants now that can be tweaked to alter how it behaves: tolerance for risk of attacks missing, how much it cares about a skill's energy cost, priority to be given to healers as targets, general unpredictability, and so on. I hope to make use of these in order to give different AI commanders different play styles!
Title: Re: A new engine!
Post by: CraigStern on June 23, 2017, 04:26:05 PM
Currently in the process of getting the AI to successfully move units.

--drafted a contract to bring on board a writer to help out with incidental dialogue

--gave artist feedback on drafts of custom sprites for Emma and Sabrina

--new script action working: MoveUnit.
Title: Re: A new engine!
Post by: CraigStern on June 26, 2017, 05:49:16 PM
I gave the engine a test drive at a QA event over the weekend, which helpfully reminded me of a few bugs I needed to fix. I've since fixed a couple of them.

--fixed an issue where step numbers remained on the tile below an object after mousing off of the object.

--the game will no longer react if you click on (or mouse over) units, movement tiles, or attack tiles while the character screen or level-up screen are open.

--clicking on attack tiles without any valid target will no longer start an attack (instead, you'll get a "No Target!" message.)

--fixed an issue where the game would throw an error when checking for attack preemption with AOE attacks hitting empty spaces.
Title: Re: A new engine!
Post by: CraigStern on June 27, 2017, 04:45:17 PM
--fixed a few issues in the "self-move" routine.

--AI-controlled units now successfully launch attacks and end their turns, at which point the AI then generates a new next move.
Title: Re: A new engine!
Post by: CraigStern on June 28, 2017, 05:14:37 PM
--fixed an issue in which skills used by AI-controlled characters would not be properly marked as used, leading the AI to treat them as reusable.

--fixed an issue in which attacks launched against characters standing atop bridge tiles or other objects would sometimes hit the object instead of the character.

--the game now displays the portrait and skills of the current selected character in the actions menu during an AI-controlled turn.
Title: Re: A new engine!
Post by: CraigStern on June 29, 2017, 04:45:41 PM
--got finalized custom sprites for Emma and Sabrina! :)
Title: Re: A new engine!
Post by: CraigStern on July 03, 2017, 02:02:15 PM
--the game engine now only permits a given unit to perform the Use inventory action once per turn. (This does't apply to Equip, Unequip, Give, or Drop, nor will using an item end the unit's turn; this merely prevents the player from engaging in things like Adrenaline Pill spam.) Once a unit has performed the Use Item command, all consumable items in their inventory will appear with a red tint until the unit's next turn, indicating that they cannot use them.

--fixed a bug in which using items could send the user's health or energy above maximum.
Title: Re: A new engine!
Post by: CraigStern on July 05, 2017, 05:21:39 PM
Artist feedback, artist feedback, aaaand more artist feedback.
Title: Re: A new engine!
Post by: CraigStern on July 06, 2017, 05:12:45 PM
--improved the AI algorithm for scoring healing abilities.

--the AI system now accounts for skill-imparted status effects in scoring various possible moves.

--the AI now evaluates and scores the items in a unit's inventory based on how helpful they would be for the unit to use.
Title: Re: A new engine!
Post by: CraigStern on July 07, 2017, 05:04:25 PM
--during an AI-controlled army's turn, prior to moving or attacking with a unit, the AI now actually uses items belonging to that unit which it has deemed worth using. :)
Title: Re: A new engine!
Post by: CraigStern on July 10, 2017, 02:05:38 PM
--got the rough drafts of the first set of commissioned wall assets into the game to mess around with; adjusted the game's lighting, shaders, and "space height" parameters so that the 3D and 2D assets look like they belong together in the scene.
Title: Re: A new engine!
Post by: CraigStern on July 12, 2017, 11:53:06 AM
--obtained new ability/motivate animations for 7 classes, plus promoted variants!
Title: Re: A new engine!
Post by: CraigStern on July 13, 2017, 04:30:53 PM
--the AI now makes a rudimentary check to determine, roughly, how much potential damage it's exposing itself to by moving to a space, then factors that in when deciding how much it wants to make a given move.

--improved the formula the AI uses when taking attack accuracy into account when deciding on a move.
Title: Re: A new engine!
Post by: CraigStern on July 17, 2017, 05:47:24 PM
--the AI now accounts for the potential environmental damage resulting from a knockback move, comparing it to the environmental damage the target is already due to take next turn on its current space.

--the AI now accounts for whether an attack will draw a counterattack, and factors in the amount of damage the unit will receive in the process.

--improved the algorithm so that it disregards a target's inherent value for purposes of scoring a move if the skill it's checking won't actually do anything useful to the target (i.e. won't damage it, cause environmental damage, or at least impart a status effect).
Title: Re: A new engine!
Post by: CraigStern on July 18, 2017, 05:02:07 PM
Got the rough drafts of commissioned castle wall assets; gave feedback on those, as well as shadowling portrait assets and initial drafts of a new musical track.

--when calculating base target values, the AI engine now looks ahead to determine if enemies are going to die on their own on the next turn via environmental effects, status effects, or a combination of the two. If so, the AI will drop that target's base value to 0 so that it doesn't waste actions on attacking that character.
Title: Re: A new engine!
Post by: CraigStern on July 19, 2017, 05:52:03 PM
--fixed an issue in which AOE attacks launched by the AI did not rotate their reticles appropriately.

--fixed an issue that was interfering with calculating the value of knockback destinations for the AI.
Title: Re: A new engine!
Post by: CraigStern on July 25, 2017, 12:04:49 PM
Spent the last couple of days of last week tackling my IndieRPGs.com backlog--work's pretty nuts this week, so there may not be much to report until next week. Still, an AI test I performed on Saturday went well! I should be able to start tackling the long-distance planning part of the AI soon.
Title: Re: A new engine!
Post by: CraigStern on August 02, 2017, 04:31:13 PM
Managed to find time to fix a few bugs and reconfigure the game's skill buttons so as to get around Unity's baffling inability to consistently display mouseover tooltips in the right place.
Title: Re: A new engine!
Post by: CraigStern on August 09, 2017, 05:40:56 PM
-- fixed some more bugs
-- improved the feel of screen-edge panning
Title: Re: A new engine!
Post by: CraigStern on August 10, 2017, 05:33:13 PM
A bit of a setback; the 3D modeller who was working on the 3D walls, bridges, doors, etc. has backed out due to family problems. I'll need to procure a replacement.
Title: Re: A new engine!
Post by: CraigStern on August 11, 2017, 04:32:53 PM
-- the game now generates a list of nighttime activities each character can perform, complete with modifiers based on personality and life background
Title: Re: A new engine!
Post by: CraigStern on August 16, 2017, 03:25:10 PM
I've made some last-minute arrangements to exhibit True Messiah at PAX West! This turned out to be way more time-consuming and difficult than I wanted it to be, but what can ya do. I also posted a job listing seeking 3D modelers to replace the dude who bailed.

--programmed shadowling portrait generation, now determining placement data for all facial features
Title: Re: A new engine!
Post by: CraigStern on August 21, 2017, 12:50:51 PM
-- completed shadowling portrait generation (which turned out to take more time than anticipated due to palette-swapping considerations)
Title: Re: A new engine!
Post by: CraigStern on August 21, 2017, 05:44:14 PM
-- shadowlings now have a somewhat less than 1 in 5 chance of having one or more horns generate as part of their portraits.

-- rejiggered the battle UI so that all buttons lie flat along the bottom of the screen instead of having a box always floating in in the corner.
Title: Re: A new engine!
Post by: CraigStern on August 22, 2017, 05:35:16 PM
Read through a bunch of emails from 3D artists interested in continuing the work on walls, doors, and bridges begun by the previous artist; wrote out an offer email to one of 'em, and am awaiting the reply. In the meantime:

--reconfigured the game's item boxes so as to get around Unity's inability to consistently display mouseover tooltips in the right place.
Title: Re: A new engine!
Post by: CraigStern on August 23, 2017, 05:30:52 PM
Corresponded with a 3D artist, wrote dialogue.
Title: Re: A new engine!
Post by: CraigStern on August 24, 2017, 03:50:51 PM
-- added attack barks to the game (i.e. barks occurring before a character launches a damage-causing attack)
-- characters are now generated with 2 distinct attack barks in addition to their 1 deployment bark, 3 victory barks, 2 heal barks, 2 build barks, and 1 defeat bark.
Title: Re: A new engine!
Post by: CraigStern on August 25, 2017, 04:36:09 PM
All right! I've officially hired a new 3D artist; also gave Ryan feedback on some new musical tracks he's been working on. :)

--reworked the code for self-move attacks in order to accommodate the new attack barks, as well as to accommodate proper evaluation of these attacks by the AI when calculating potential moves.
Title: Re: A new engine!
Post by: CraigStern on August 28, 2017, 04:50:09 PM
Did some lore work, detailing aspects of the geography for the next setting. More contractor feedback as well; sent out contract for the last set of modular portrait assets. :)
Title: Re: A new engine!
Post by: CraigStern on August 29, 2017, 01:47:28 PM
-- Cold attacks now create ice bridges whenever they hit a water tile.
-- the AI can now accurately evaluate the feasibility of launching self-moving attacks (like Charge)
Title: Re: A new engine!
Post by: CraigStern on August 31, 2017, 11:43:02 AM
-- performed preliminary work to create a Reserve Supplies screen.
-- added support for multiple different Reserve inventories, each associated with a different roster of characters.
Title: Re: A new engine!
Post by: CraigStern on August 31, 2017, 03:13:51 PM
--fixed serialization issues affecting various types of saved data to be tracked during a longer campaign

Heading to PAX West for a week or so; I'll be back to work and posting a week or two into September!
Title: Re: A new engine!
Post by: CraigStern on September 07, 2017, 02:43:08 PM
Back from PAX!

--got more work done on the Reserve Supplies screen

--wrote more dialogue
Title: Re: A new engine!
Post by: CraigStern on September 12, 2017, 05:28:37 PM
And now back from my cousin's out-of-state wedding!

--made more progress on laying out and coding the Reserve Supplies screen
Title: Re: A new engine!
Post by: CraigStern on September 13, 2017, 06:01:24 PM
-- fixed some issues with the loading of certain types of items from a saved game
-- made yet more progress on the Reserve Supplies screen, It has proven really complicated to code thus far, not only because of all the UI intricacies involved, but also because of the engine's support for multiple character rosters, each with their own sets of reserve supplies! This bit may simply take me a while to complete.
Title: Re: A new engine!
Post by: CraigStern on September 14, 2017, 05:49:38 PM
-- more Reserve Supplies screen progress; I fixed some issues with the way the game was formatting stored character rosters, and I now have both the reserve items and units for a given roster displaying correctly!
Title: Re: A new engine!
Post by: CraigStern on September 18, 2017, 04:52:57 PM
-- the game now generates characters with a sentence describing their approach when they go to talk to another character.
Title: Re: A new engine!
Post by: CraigStern on September 19, 2017, 10:35:06 AM
-- the game now successfully generates portraits for stone golems and bronze golems. As of now, the game can officially generate portraits for every species, gender, and character class in the game. :)
Title: Re: A new engine!
Post by: CraigStern on September 21, 2017, 11:41:39 AM
Gave a bunch of artist feedback on a whole slew of new, in-progress 3D assets. :)

-- characters now have a table for remembering nicknames they've adopted for other characters. (A necessary prerequisite to coding a nicknames system.)
Title: Re: A new engine!
Post by: CraigStern on September 21, 2017, 04:30:36 PM
-- the game now successfully loads 3D objects at runtime alongside the existing 2D assets! (Note that a lot of the 3D objects in the screenshot below are untextured; this should change shortly.)
Title: Re: A new engine!
Post by: CraigStern on September 21, 2017, 05:34:19 PM
-- the game now has a procedure for automatically substituting a nickname that a character has for a second character during conversation in lieu of the second character's ordinary name. (The special characters Char1 and Char2 will just display the character's first name, while the special characters -NAME- and -CHAR2- will use the character's nickname instead if other character has one for them.)
Title: Re: A new engine!
Post by: CraigStern on September 25, 2017, 05:04:32 PM
-- the game now has a "nighttime" scene where it loads all characters, assigns them actions to take around camp in rudimentary fashion, and then goes through them one by one
Title: Re: A new engine!
Post by: CraigStern on September 26, 2017, 05:22:47 PM
-- refined the process for determining nighttime character actions some more. Among other things, characters now become increasingly likely to choose to rest based on how low their health is, with a 100% chance of choosing to rest if their health is at or below 25%.

-- the game now pairs up characters if a character selects the nighttime activity "talk," and removes the other participant from whatever activity they would have otherwise undertaken.
Title: Re: A new engine!
Post by: CraigStern on September 29, 2017, 05:09:52 PM
-- spent the past few days implementing dialogue (and appropriate variants on every currently implemented script action) in the new nighttime context, permitting characters to talk to one another as one of their nighttime activities. (This took so long, in part, because of some implementation challenges unique to Unity--I now know all about C# and interfaces, though!) There are still kinks to work out, but the basic functionality is now there. :)
Title: Re: A new engine!
Post by: CraigStern on October 02, 2017, 05:48:54 PM
Gave feedback to the 3D modeler on a new round of asset drafts!
Title: Re: A new engine!
Post by: CraigStern on October 03, 2017, 05:20:32 PM
--added a new stat that can be affected by SetStat: Morale. This works the same as other integer stats do!

--added three additional new stats that can be affected by SetStat: Familiarity, Friendship, and Romance. These stats operate a little differently from other stats since they have differing values applying to various other characters. Because the value depends on the other character in question with these, the final parameter for SetStat operates a little differently: instead of just being operation:value as with other stats, it's name|operation:value, where name is the full name of the other character.

So, for example, say you want to increase Emma's feelings of Friendship toward Sabrina by 2; you'd use:

<Action>SetStat/Emma Strider,Friendship,Sabrina Strider|+:2</Action>

A touch convoluted, but it works!
Title: Re: A new engine!
Post by: CraigStern on October 04, 2017, 05:52:53 PM
-- characters can now impact one another's morale during the nighttime Talk activity

-- characters can now impact one another's familiarity and friendship ratings for one another during the nighttime Talk activity
Title: Re: A new engine!
Post by: CraigStern on October 06, 2017, 08:45:23 AM
-- characters are now generated with a particular description of their laugh that can appear in their dialogue.

-- characters are now generated with one particular term that they'll consistently use when addressing the player (right now: "sir," "commander," or "boss") based on their dominant personality trait.

-- character portraits are now displayed during their non-Talk nighttime activities.

-- the game now selects from among a pool of proper narrative descriptions of non-Talk nighttime activities.
Title: Re: A new engine!
Post by: CraigStern on October 06, 2017, 04:44:07 PM
Fixed a number of bugs and other issues with how the activity system was working.

-- spirits now get the activity Mumble, in which they simply repeat their names to themselves all evening.
Title: Re: A new engine!
Post by: CraigStern on October 10, 2017, 04:31:22 PM
Spent the past couple of days fixing bugs. (It's not sexy, but hey: it's important not to just leave every bug for fixing until the end!)

Also:

-- came up with a calendar system (the game world features a 10-month calendar, with each month 36 days in length)
-- the game now tracks how many days have passed in your campaign and can display the current date to the player
-- the dialogue parser now recognizes the special character -NL- as a new line, and will respond accordingly
Title: Re: A new engine!
Post by: CraigStern on October 11, 2017, 04:56:57 PM
-- lissit characters can now address the player in lissit ("Hsun").

-- character relationship dialogue requirements have been shifted so that any two characters will only be in the requisite "familiarity" zone for one triggered dialogue at a time.

-- started programming the procedure for generating characters with a selection of default nicknames other characters can pick for them.
Title: Re: A new engine!
Post by: CraigStern on October 12, 2017, 05:04:10 PM
-- completed listing default nicknames for each human and lissit first name in the game, and got about halfway through the shadowling ones.
Title: Re: A new engine!
Post by: CraigStern on October 13, 2017, 05:36:13 PM
-- completed listing default nicknames for each shadowling name in the game, and got through a portion of the spriggat ones.
Title: Re: A new engine!
Post by: CraigStern on October 16, 2017, 04:49:04 PM
-- completed default spriggat nicknames.

-- all characters are now successfully generated along with their potential default nicknames for other characters to use (except golems, who don't get nicknames)
Title: Re: A new engine!
Post by: CraigStern on October 17, 2017, 03:23:55 PM
Lots of time spent giving artist feedback these past few days, but we're making good progress on 3D assets and unique character portraits.

-- certain last names (and portions of last names) can now bestow additional nickname options. (A character with the last name "Swift," for example, may end up being nicknamed "Swifty" by other characters.)

-- nighttime character dialogue now only increases familiarity for the speaker so that the other character remains within the necessary familiarity levels to deliver their own dialogue to the speaker on a future night. When those characters talk next, the game now automatically swaps whoever has the lower familiarity score into the speaker spot.

-- fixed some bugs in the activity narration selection algorithm, as well as a palette issue in a couple of portrait pieces.
Title: Re: A new engine!
Post by: CraigStern on October 18, 2017, 04:03:48 PM
-- lines of generated dialogue can now have specific facial expressions that the speaker will adopt while saying them. (I've also added this as a new parameter for AddSpeakerPortrait, whose parameters are now: (1) facing, (2) facial expression, and (3) force portrait name. Accepted strings for facial expression parameter include: Angry, Blank, Concerned, Confused, Excited, Focused, Happy, Irritated, Kind, Mean, Nervous, Pained, Sad, Tired, and Wink)

-- characters who get along can now pair up to Clean or Practice together at night, with the probability of a character attempting to pair up with another character impacted by a character's introversion or extraversion. (Characters will only choose other characters they're at least a little bit friendly with for such a pair-up.)

-- made it so only one character can choose to perform the activity Clean each night, though they may find a partner to help based on the factors above. (Compulsive characters are now moved to the front of the activity-choosing queue so they have a chance to choose Clean before this limitation comes into play).

-- wrote a method that analyzes character portrait data to generate a number ("genes") that determines whom the character may potentially be attracted to among their preferred species/gender. (For humans, nose type is determinative; for lissit, snout type; for spriggats, horn type; for shadowlings, plume type.) Thus, even if two characters have the right species and genders compatible with one anothers' gender preferences, they might still not find one another attractive based on intangible genetic factors. Quasi-pheromones, if you will.

-- wrote a second method to check for romantic compatibility between characters based on the above-mentioned factors.
Title: Re: A new engine!
Post by: CraigStern on October 20, 2017, 04:54:59 PM
-- wrote some new lines for characters to potentially be generated with

-- characters are now generated with a friendship threshold (dependent on their personality characteristics) that determines how soon during a developing friendship they'll give another character a nickname
Title: Re: A new engine!
Post by: CraigStern on October 25, 2017, 05:50:00 PM
I've been spending the bulk of my time these past few days giving artist feedback. (We are making a lot of unique character portraits right now.)

-- after reaching their nickname threshold with someone, a character will now actually assign the other character a nickname (and will have some dialogue about it!) the next time they choose them for a Talk action.

-- fixed some bugs with Spirit nighttime dialogue and the nighttime Joke activity (performed by jokester characters).

-- wrote new dialogue.
Title: Re: A new engine!
Post by: CraigStern on October 26, 2017, 04:13:42 PM
Submitted the game to a public playtest event happening in mid-November! I'll need to see if I can get the various systems to interact within a meaningful gameplay loop in time for this.

As part of the submission process, I took an initial stab at a succinct description of what this game is about: A tactical RPG friendship simulator. Recruit a team of characters, each one procedurally generated with their own distinct personality and dialogue; then guide them to victory through a series of turn-based battles as they grow to know, trust, and hopefully even like one another! This may change over time, but I think it's a fairly good first attempt.

-- made it so characters can gain camp activities from their "likes."

-- wrote text for a bunch more nighttime activities (drinking beer, lifting weights, playing cards, playing dice, reading a book, reading a philosophical treatise, stargazing, going for a stroll...) including two-character variations for certain activities where the character can invite a friend to join them.
Title: Re: A new engine!
Post by: CraigStern on October 27, 2017, 04:51:36 PM
-- wrote text for more nighttime activities (creating art, hunting, repairing equipment, teaching history, treating wounds...) including two-character variations for certain activities where the character can invite a friend to join them.
Title: Re: A new engine!
Post by: CraigStern on October 31, 2017, 05:48:44 PM
-- I have now written at least 1-2 text variations for every nighttime activity in the game (and in some cases, far more).
Title: Re: A new engine!
Post by: CraigStern on November 02, 2017, 05:27:18 PM
More artist feedback, more progress on unique character portraits.

-- began coding the method for determining which skills characters can teach to other characters whom they like and trust.
Title: Re: A new engine!
Post by: CraigStern on November 03, 2017, 01:46:55 PM
-- characters now have a baseClass attribute that always contains the unpromoted version of whatever class they are (e.g. a character that begins as a Swordsman will always have a base class of Swordsman no matter what it promotes into). The associated string stat can now be accessed in dialogue actions as Base Class.

-- Finished coding the method for choosing skills a character can teach another character! Skills can now have the attributes raceReq and classReq attached to them, each imposing a race or base class requirement (respectively) in order for a character to teach another character that skill. For example, the skill Dive has a raceReq of Spriggat (only spriggats can learn it), whereas the skill Fire Breath 2 has a classReq of Red Spriggat (spriggats only, but Frost Spriggats, Dark Spriggats, and Golden Spriggats won't be able to learn this one).

Aside from race and class restrictions, there are three other restrictions on which skills a character can be taught: (1) the character must have a Psy above 0 to learn a skill if the skill has a psyDmgFactor above 0; (2) if the skill has a dependsUpon, the character must have an identically named mastery in order to learn it; and (3) the character cannot possess the skill already.
Title: Re: A new engine!
Post by: CraigStern on November 07, 2017, 01:08:03 PM
-- got the first new musical track ("Barracks", a lovely classical guitar piece courtesy of Ryan Richko) in the game and working!

-- wrote a bunch of individualized dialogue for when characters teach a friend a new skill or proficiency.

-- characters are now generated with said dialogue.

-- wrote a new step-wise approach to character generation that permits fast generation of a half-dozen potential recruits at a time, each containing with only part of the data that would be present in a complete character--and then, upon actually recruiting one, the game completes the character generation process for that recruit.
Title: Re: A new engine!
Post by: CraigStern on November 08, 2017, 03:47:55 PM
-- mousing over a recruit's portrait now provides a variety of information about him or her; clicking the character now adds them to your roster of characters.

-- fixed a few remaining issues with the two-phase character generation process.
Title: Re: A new engine!
Post by: CraigStern on November 08, 2017, 05:00:52 PM
-- nighttime actions can now directly impact a character's experience, health, and energy levels. (The Practice action, for example, gains a character experience; the Rest action regains health and energy.)
Title: Re: A new engine!
Post by: CraigStern on November 09, 2017, 05:38:24 PM
-- the game now procedurally generates a recruitment price for new recruits based on an evaluation of their stats at the time of recruitment, with stats weighted differently based upon their class.

-- boosted the baseline frequency with which characters choose to talk to one another in the evenings.

-- in order to cut down on the potential for personality repetition, the game now tracks the 12 most recent personality attributes and life skills used in generating characters you've hired, and deliberately avoids using them when generating additional characters.
Title: Re: A new engine!
Post by: CraigStern on November 10, 2017, 12:47:21 PM
-- the game now tracks your current aura.

-- the game now deducts from your current aura when you recruit a character, and plays a coin jingle sound effect...or, if you lack the funds, it simply plays an "error" noise.
Title: Re: A new engine!
Post by: CraigStern on November 10, 2017, 04:32:09 PM
-- weapons are now generated with a "max uses" stat; weapons that have seen a lot of use can theoretically be repaired back up that level.

-- the Repair Weapons nighttime action now repairs the group's weapons by a fixed amount (but not beyond any given weapon's max uses).

-- nighttime actions can now impact the morale of every single character in the group. These effects can be reversed for characters with certain personality traits, depending on the type of action involved. (Serious and Sensitive characters, for example, tend not to enjoy the more mockery-focused antics of Jokester characters.)
Title: Re: A new engine!
Post by: CraigStern on November 15, 2017, 05:43:53 PM
Lots more artist feedback; received final drafts of all 62 "unique character" portraits with alternate eyes and mouths for various facial expressions.

-- fixed an error in the code that was causing character portraits to show up with the wrong outfit palette in nighttime dialogue.

-- reworked character approach descriptions so that they flow together more naturally with generated dialogue in non-greeting conversations.
Title: Re: A new engine!
Post by: CraigStern on November 17, 2017, 04:04:15 PM
Mostly spent the day fixing bugs!

-- the Practice nighttime activity now causes characters to actually gain experience.
Title: Re: A new engine!
Post by: CraigStern on November 20, 2017, 04:43:02 PM
Playtesting Saturday afternoon revealed some bugs and playability issues in the game that I've taken today to fix:

-- in battle, pressing the space bar now shifts the camera to the next character onscreen and automatically selects them.

-- fixed issue in battle wherein the actions menu would remain onscreen and clickable when in the character screen or level-up screen.

-- fixed a bug that was causing battles to freeze whenever a combat bark was triggered.

-- tweaked Bronze Golem character generation values to give them some degree of starting resistance to pierce and slash, and to give them some minimum growths in those area.

-- reworked the character generation script to untether it from the debug "character generator" screen, put recruitment functions into a separate script.

-- fixed an annoying UI bug on the recruitment screen.

-- screen-edge panning in battle now occurs only when the mouse is very, very close to the edge of the screen.

-- fixed an issue in which character portraits detected via the AddSpeakerPortrait action didn't palette swap.

-- fixed an issue where barudit and golem sprites didn't palette swap correctly.
Title: Re: A new engine!
Post by: CraigStern on November 21, 2017, 04:38:30 PM
-- wrote a bunch of new secret and skill-teaching lines.

-- the game now saves the color that a character most recently spawned with in combat, to be used as their default portrait color out of combat.

-- AddPortrait now has an optional 7th parameter: facial expression. (See here (http://sinisterdesign.net/forum/index.php?topic=1769.msg50949;topicseen#msg50949).)
Title: Re: A new engine!
Post by: CraigStern on November 23, 2017, 11:14:14 AM
-- implemented a -1 to morale "mess penalty" that hits the entire group at the end of the night if no one cleans around camp.
Title: Re: A new engine!
Post by: CraigStern on November 24, 2017, 01:56:48 PM
-- implemented remaining attack bonus / penalty morale effects.

-- implemented a button that will give you a report of your group's current morale levels and the effects they have.
Title: Re: A new engine!
Post by: CraigStern on November 25, 2017, 08:42:16 AM
Some bug fixes:

-- if an AI-controlled character blunders into a trap that causes Stunned or Frozen status, the AI now stops the character's turn and moves to the next character instead of just pushing on ahead.

-- fixed a bug that was causing the game to freeze after delivery of a combat bark.
Title: Re: A new engine!
Post by: CraigStern on November 25, 2017, 12:30:00 PM
-- redid the options menu for combat.

-- adjusted the relative probabilities of certain classes being generated. Axefighter, bowman, swordsman, and spearman are now more likely to be generated among physical human classes; psy healer is much more likely to be generated among psy-focused human classes. All other human classes are, in turn, somewhat rarer as a result.

-- added the Throw Voice skill to the game (behaves like a ranged Feint--known by Ventriloquist characters)
Title: Re: A new engine!
Post by: CraigStern on November 25, 2017, 11:09:52 PM
-- fixed a bug in which the grab button would appear to remain available even after switching to a different character not standing on an item sack.

-- fixed a bug involving dummy attack tiles.
Title: Re: A new engine!
Post by: CraigStern on November 27, 2017, 02:54:46 PM
-- wrote some new character approach lines.

-- tweaked recruitment cost algorithm so Strength / Psy have a heavier impact on a character's price to recruit.

-- fixed a bug in which a character could get the same physical attribute twice (once naturally, and once as a life skill side effect).

-- implemented individual character recovery rates (impacted by the Insomniac and Sound Sleeper attributes) and hooked them into the Rest nighttime activity. Most characters recover 25% of their maximum Health and Energy after a night spent resting; but Insomniac characters recover 20%, and Sound Sleeper characters recover 33%. (Spirits always recover 100% in a single night.)
Title: Re: A new engine!
Post by: CraigStern on November 28, 2017, 01:20:58 PM
-- added a wound system to the game. If a character goes below 1 Health, they now gain a Wound Level greater than 0. Characters with a Wound Level greater than 0 are unable to perform normal nighttime activities or participate in battle, and will have to recover for a number of days equal to their wound level before their health and energy start to regenerate again.

A character's Wound Level corresponds to how far their health drops below 1; a character whose health drops below 1 gets a Wound Level of 1, plus an additional 1 for every x points below 0 their health goes (where x is 10% of the character's maximum health). Thus, for instance, a character with maximum health of 30 who takes 10 damage while at 5 health will end up with a Wound level of 2.

-- characters can now get individualized status effect immunities unconnected to their elemental resistances. (Golems and Spirits are immune to Poisoned; Depressive characters are immune to Enthralled.) Status effect immunities are now implemented, and prevent characters from getting the associated status effect.

-- characters now get twice as much experience from the Practice activity. In addition, Hot-tempered characters in particular can now get a +50% experience boost when practicing by themselves.

-- camp activity narrations can now have a stat requirement associated with them via the char1StatReq attribute, which takes the stat name, a comparison character (=, g, g=, l, or l=), and a value to compare it against.
Title: Re: A new engine!
Post by: CraigStern on November 28, 2017, 04:19:28 PM
-- fixed a cosmetic issue where long male hair did not play nice with the male skiakineticist body in generated character portraits.
Title: Re: A new engine!
Post by: CraigStern on November 29, 2017, 04:38:45 PM
-- gave artist feedback on 3D doors, bridges, bar tops, fences, stairs, and cave walls.

-- fixed a bug in which male and female dark spriggats were misassigned animations from red spriggats.
Title: Re: A new engine!
Post by: CraigStern on November 30, 2017, 04:44:50 PM
-- more artist feedback on 3D assets.

-- received unique portraits for the entire cast of Telepath Tactics (with support for alternate facial expressions) in the new style; provided artist feedback.

-- hired a writer to help supplement the body of lines from which character dialogue is generated.

-- created a new format for storing class promotion data in an XML file.
Title: Re: A new engine!
Post by: CraigStern on December 01, 2017, 04:06:54 PM
-- fixed a small handful of dialogue bugs discovered during last night's playtesting.

-- completely rewrote the process that decides what dialogue characters have to make things less linear, and more varied and unpredictable.
Title: Re: A new engine!
Post by: CraigStern on December 04, 2017, 04:51:16 PM
-- rewrote some portrait code to better position golem portraits.

-- formatted unique character portrait assets for Unity, created positioning data for a few dozen of them.
Title: Re: A new engine!
Post by: CraigStern on December 05, 2017, 04:28:39 PM
-- more artist feedback on 3D assets.

-- created more positioning data for unique character portraits.
Title: Re: A new engine!
Post by: CraigStern on December 06, 2017, 03:44:53 PM
-- more portrait data and artist feedback.
Title: Re: A new engine!
Post by: CraigStern on December 07, 2017, 05:33:46 PM
-- completed creation of unique portrait data.

-- fixed an issue in which the far end of the actions menu would get cut off on non-widescreen displays.
Title: Re: A new engine!
Post by: CraigStern on December 08, 2017, 05:16:58 PM
-- rewrote all the code for saving, loading, and displaying unique character portraits so that they now support variant expressions at runtime, just like the procedurally generated ones do. :)
Title: Re: A new engine!
Post by: CraigStern on December 12, 2017, 05:12:01 PM
-- commissioned a few new unique character portraits.

-- received the last of the first shipment of comissioned 3D terrain.

-- more artist feedback.
Title: Re: A new engine!
Post by: CraigStern on December 13, 2017, 04:34:00 PM
-- drafted a contract for the remaining 3D models needed to complete the game.

-- fixed a bug in which the game sometimes wouldn't search for unique character portrait properties correctly when portraits were added via the AddPortrait action.

-- fixed a bug in the algorithm the game uses to check and see if two characters have had a certain type of conversation before or not.
Title: Re: A new engine!
Post by: CraigStern on December 14, 2017, 05:40:26 PM
-- Repair Equipment now repairs weapons in the current roster's common inventory, and not just those held by the characters.

-- at night, the game now checks to see if any weapons in the group have uses missing; if all weapons are at max uses, it disables characters from choosing the Repair Equipment nighttime activity.

-- fixed a bug in which generated character portrait values weren't assigned a name upon creation.
Title: Re: A new engine!
Post by: CraigStern on December 17, 2017, 10:30:23 AM
-- the game now displays an animated experience bar when characters practice at night to show them accumulating experience.

-- incorporated new nose and hair style assets into character portrait generation, plus a new hair color.

-- fixed a medley of small issues with character portrait generation that were bugging me.

-- fixed a gap in character dialogue.

-- fixed a bug where the game wouldn't save character rosters after exiting certain scenes.
Title: Re: A new engine!
Post by: CraigStern on December 19, 2017, 03:51:07 PM
-- the game now has your characters consume food at the end of each day; if you run out of food before everyone is fully fed, group morale takes a significant hit and your characters lose energy. (You'll get a narrative description of the discontent as well.)

-- the game now has a display that tracks your food levels and tells you how much food your units are currently consuming per day.

-- baking now produces food.

-- hunting now produces more food, but at the cost of energy.

-- the gardening nighttime activity is now in the game. It does nothing most of the time--but 1 out of every 8 times, it results in a harvest that creates a bunch of food!
Title: Re: A new engine!
Post by: CraigStern on December 19, 2017, 05:05:11 PM
-- the game now dynamically positions animated experience bars by the portrait of whichever character they apply to at nighttime.

-- nighttime activities that raise or lower health or energy now produce their own animated bars illustrating the effects as well.
Title: Re: A new engine!
Post by: CraigStern on December 20, 2017, 04:49:08 PM
-- character likes are now divided into 2 types: hobbies and miscellaneous. A hobby gives the character a distinct nighttime activity that they can either perform a) alone, or b) with another character to boost their relationship. Each character gets one hobby and one miscellaneous like each upon generation.

-- added new nighttime activities Bird Watching, Play Board Game, Play Word Game, Play Sports, Knit, and Carve Wood.
Title: Re: A new engine!
Post by: CraigStern on December 21, 2017, 02:55:09 PM
-- characters no longer counterattack in response to backstabs (both making backstabs more tactically useful and making counterattacks more useful as well, as counterattacks will no longer make the counterattacker vulnerable to multiple melee-range backstabs in the same turn).

-- units can now level-up during nighttime.

-- added support for the Escape hotkey in nighttime, where it now advances dialogue or closes the level-up screen when pressed (and if there's no dialogue or level-up screen, it advances you to the next narrated activity)

-- the nighttime activity Treat Wounds now hastens the recovery of all characters with a Wound Level greater than 1. It now cannot be chosen unless at least one other character has a Wound level greater than 1.
Title: Re: A new engine!
Post by: CraigStern on December 23, 2017, 09:09:14 AM
Yesterday and this morning were devoted to AI!

-- finally forced myself to sit down and code the AI routines for determining how a unit should move when there's no target currently in attack range. Such units now find a destination scored by its proximity to the target, by the target's value, and by the relative safety of the destination space.

-- did some more work toward creating custom AI profiles for different commanders in battle.

-- coded a "dumber" AI routine in the style of the original Telepath Tactics, where the game just randomizes unit order and finds the best move for the next character in order without ranking the value of its best move against those of any other character in that army. (To be used on the lower difficulty settings.)
Title: Re: A new engine!
Post by: CraigStern on December 24, 2017, 01:04:15 PM
-- the cursor now changes to an hourglass when entering an AI-controlled player's turn, and returns to an arrow when that player's turn ends.
Title: Re: A new engine!
Post by: CraigStern on December 24, 2017, 01:29:44 PM
--the AI will now have a unit grab the item sack on their space if they've moved onto a space with an item sack.
Title: Re: A new engine!
Post by: CraigStern on December 25, 2017, 05:04:22 PM
-- there is now a half-second delay when moving the mouse to the edge of the screen before camera panning kicks in. (This ensures that the camera doesn't move around from incidental, unintended mouse movement.)
Title: Re: A new engine!
Post by: CraigStern on December 27, 2017, 01:09:49 PM
-- there is now a New Turn pop-up that shows up onscreen to let you know when it's a new player's turn.

-- there is now a Victory pop-up that shows up onscreen at the end of a battle to let you know which player has won the battle.

--for units with low health, the AI now calculates a "bonus" based on each destination's proximity to allied healers when scoring long-range moves. The more badly injured the unit is (and the more that that particular AI cares about healing injured units), the more heavily it will weigh each potential destination's healer proximity.

-- after shuffling a unit's skill progression order during the generation process, the last skill in the character's progression is now removed. This will cause each character of a given class to be more distinct, and will leave more room for characters of the same class to teach each other skills if they grow close over the course of the game.
Title: Re: A new engine!
Post by: CraigStern on December 28, 2017, 04:30:57 PM
-- the game now checks victory conditions (Defeat Army / Kill-All Victory) and loss conditions (Protect Char / losing all of one's units) whenever characters die in combat and at the start of each new turn. If one of these conditions is found to have been triggered, it then displays the victory screen (or a defeat screen).

-- clicking the Victory Box now takes you directly to nighttime.

-- when units are defeated in combat, they now take a hit to their morale. (The damage to the unit's morale is equal to 2, plus 1 for every two Wound Levels they've taken, to a maximum decrement of 6.)

-- implemented the Delay Maneuvers condition in battle.
Title: Re: A new engine!
Post by: CraigStern on December 29, 2017, 03:47:14 PM
-- player characters can now level-up during the enemy turn; the game will pause while you review the changes, and the enemy turn will resume thereafter.

-- the game now gracefully handles characters leveling up after they deliver a match-winning blow; any level-ups happen first, and only afterwards does the victory box appear.

-- you can now add an [E] to the end of an item name within a <Unit> tag in a map to have the game spawn that character with that item already equipped.

-- tweaked Engineer character generation so that all Engineers start level 1 already knowing either Build Wood Bridge or Build Barricade.

-- fixed a bug that was causing unique portraits to not display for characters loaded from a saved game.

-- fixed a bug in how the level-up screen displayed stats that both received a proficiency boost and increased by normal means.

-- fixed a bug in which generated characters that came with generated equipment would start off auto-equipped with them even if they lacked the necessary masteries.

-- fixed a formatting issue where the last line of each stat tooltip was sometimes getting cut off, depending on display settings.

-- annoyingly, I had to redo all of the male frost spriggat rest and walk sprite animations for some reason.
Title: Re: A new engine!
Post by: CraigStern on January 02, 2018, 04:14:53 PM
-- posted a Kickstarter update summarizing many of the development milestones I hit over the past year: https://www.kickstarter.com/projects/1426761469/telepath-tactics-a-strategy-rpg/posts/1781158 (https://www.kickstarter.com/projects/1426761469/telepath-tactics-a-strategy-rpg/posts/1781158)

-- added a defensive facing algorithm to the AI; AI-controlled characters now turn their backs (if they can still rotate) to protect themselves against backstabs at the end of their turn.

-- fixed a thing in character generation such that characters of classes without physical attack skills will no longer be generated with a Strength growth above 0.
Title: Re: A new engine!
Post by: CraigStern on January 09, 2018, 04:22:14 PM
Spent the past week or so getting the site (and these forums) back in proper working order after my host screwed everything up while migrating to a new server--but with that done, it's back to developing! Gave artist feedback on some new work-in-progress 3D terrain today.
Title: Re: A new engine!
Post by: CraigStern on January 10, 2018, 01:13:42 PM
-- characters now support a "current mood," with duration (number of days they'll be in the mood) and power (a number reflecting how strong a subsequent mood has to be to override it). This will be used to mark characters with a sort of "temporary personality trait" that affects their behavior.

-- wrote narration for the "Disappear" activity, to be used by characters who are in mourning.
Title: Re: A new engine!
Post by: CraigStern on January 10, 2018, 04:42:18 PM
-- took the near-sighted physical trait out of the game; giving characters an inherent miss chance (even just a few of them) detracted from the game too much, making those characters markedly less enjoyable to use.
Title: Re: A new engine!
Post by: CraigStern on January 12, 2018, 03:56:57 PM
-- enemies in water or lava now find the closest square of land and swim towards it during an AI-controlled player's turn.

-- cleaned up the timing of numerous start-of-turn events so as to accommodate the "new turn box" showing up beforehand.

-- fixed a bug in which the enemy turn wouldn't proceed sometimes if it tried to rotate a character who was not able to rotate (e.g. a character who had spent its turn swimming).

-- fixed a bug in the multi-turn movement path generation algorithm in the AI.

-- fixed a bug in which move tiles spawned by the AI for movement initiation purposes stuck around the battlefield.
Title: Re: A new engine!
Post by: CraigStern on January 15, 2018, 05:05:45 PM
-- the AI now completely disregards non-allied characters with the Hidden status.

Resumed work on the reserve inventory screen today!

-- you can now click the portrait of a character in the current roster to inspect their individual inventory.

-- you can now click individual items in character inventories and have them drop those items into the reserve inventory.

-- you can now close the reserve inventory by clicking in any "blank" space on the inventory menu; when you do, it saves your changes to the common inventory and to the inventories of the individual characters.

-- fixed a few bugs in the reserve inventory item boxes that were preventing them from loading properly.
Title: Re: A new engine!
Post by: CraigStern on January 16, 2018, 05:15:12 PM
-- created a "yes/no?" pop-up window to use throughout the UI.

-- you can now give items from reserve supplies to particular characters. I ditched the click-and-drag system from original TT--here, instead, you'll click the item, click the Give button, and then click the character you want to give it to. (Unless that character's inventory window is already open, in which case it'll automatically give them the item when you click the Give button.) It's very straightforward this time around, and consistent with how items are given outside the reserve inventory screen.

-- you can now permanently drop items from reserve supplies. (You'll get a pop-up window to confirm first, though.)

-- spent a lot of time getting the UI behaving appropriately in unintended cases (that is, it won't freak out or crash the game if players just click around everywhere instead of following the intended flow).
Title: Re: A new engine!
Post by: CraigStern on January 17, 2018, 04:36:10 PM
-- created a new, 9th nose type for human generated characters.

-- added Sort functionality to the reserve inventory screen. You can now use the sort button to sort your reserve supplies, cycling through a series of modes in which it shows consumables first; weapons first; armor first; and miscellaneous items first.
Title: Re: A new engine!
Post by: CraigStern on January 18, 2018, 05:12:42 PM
-- the reserve supplies screen now supports an unlimited number of pages of items (displaying 48 items max per page).

-- there are now Next and Previous buttons to let you flip between pages of items when there are more than 48 items in your reserve supplies.
Title: Re: A new engine!
Post by: CraigStern on January 19, 2018, 03:29:18 PM
-- worked on character background dialogues some more.

-- fixed a handful of issues regarding the formatting and behavior of pop-up item tooltips, particularly in the reserve supplies screen.

-- fixed a bug that would cause certain weapons to generate with unlimited durability.
Title: Re: A new engine!
Post by: CraigStern on January 22, 2018, 04:47:01 PM
-- characters can now equip and unequip items within the reserve supplies screen.

-- repositioned item option buttons (and tooltips on item option buttons) within the reserve supply screen to avoid situations where some or all of them would not be visible.

-- implemented the EndBattle/WinBattle and LoseBattle actions, permitting custom victory and loss conditions.
Title: Re: A new engine!
Post by: CraigStern on January 22, 2018, 05:43:44 PM
-- fixed timing issues relating to the new turn box, OnTurn/OnLoaded dialogue, and/or the victory screen overlapping one another under certain conditions.
Title: Re: A new engine!
Post by: CraigStern on January 24, 2018, 04:00:25 PM
-- received the first set of new 3D terrain to replace the old 2D tiles! (Tilesets: grass, dirt, snow, and sand.) Got them in-engine; now creating directional variations and organizing them into appropriate folders.
Title: Re: A new engine!
Post by: CraigStern on January 30, 2018, 01:16:07 PM
Had to get revisions on the 3D terrain to better demaracate the nature of transition spaces. Re-creating directional variations now. Also contracted out 3D floor tiles and cobblestone street tiles.
Title: Re: A new engine!
Post by: CraigStern on January 31, 2018, 03:07:48 PM
-- finished creating directional variants for all basic 3D land terrain (grass, dirt, snow, and sand)

-- finished creating water shoreline transitions for all dirt tiles.
Title: Re: A new engine!
Post by: CraigStern on January 31, 2018, 05:09:18 PM
-- finished creating water shoreline transitions for all grass tiles, sand tiles, and snow tiles.

-- finished creating XML "tile" data for all existing 3D terrain assets.

-- adjusted the tile loading system so the game loads the 3D terrain assets now instead of 2D tiles.
Title: Re: A new engine!
Post by: CraigStern on February 01, 2018, 01:48:10 PM
-- obtained a new triplanar shader to implement seamless tiling textures across 3D objects. (The old one was causing an annoying visual glitch.)

-- created a couple of objects that are simply clumps of grass with wildflowers, to add some variety to stretches of grass in maps. (This role was previously occupied by the grass tile in the 2D tilesets.)
Title: Re: A new engine!
Post by: CraigStern on February 05, 2018, 10:25:46 AM
-- basic 3D terrain is now implemented! :)
Title: Re: A new engine!
Post by: CraigStern on February 05, 2018, 04:39:17 PM
-- characters shoved into water now appear partially submerged (but flying characters that move over water do not).

-- organized 3D objects, enforced consistent naming on files, created "open" variants for all doors and gates.

-- created a new look for movement tiles to make the distinction between spaces clearer.
Title: Re: A new engine!
Post by: CraigStern on February 06, 2018, 04:28:06 PM
-- began work on the map editor! Created 7 of the UI buttons, new map window; the editor now lets you generate a blank map of whatever dimensions you choose.
Title: Re: A new engine!
Post by: CraigStern on February 07, 2018, 02:09:24 PM
-- there are now buttons for adding and deleting objects, as well as raising and lowering elevation.

-- clicking the Paint button now enters "paint mode"; clicking and dragging across tiles in paint mode changes them to the currently selected tile type.

-- clicking the Elevation buttons now enters "elevation mode"; clicking and dragging across tiles in this mode raises or lowers them (depending on which elevation button you selected).

-- implemented camera controls; you can now move around the map in the map editor using WASD or arrow keys.

-- fixed an issue in which moving the camera via the keyboard would simultaneously cycle through the UI buttons at the top of the screen.
Title: Re: A new engine!
Post by: CraigStern on February 08, 2018, 04:43:10 PM
-- you now select a terrain type from a palette when you enter paint mode; the map editor now paints the default tile for whatever tile type you selected for as long as you remain in paint mode.
Title: Re: A new engine!
Post by: CraigStern on February 09, 2018, 03:47:04 PM
-- created a little space previewer window that shows up when mousing over spaces in elevation mode, so you always know what elevation your terrain is at.

-- there is now an algorithm that checks every space on the map and fills in sheer cliffs below the tile on that space if there is any empty space visible below it!
Title: Re: A new engine!
Post by: CraigStern on February 12, 2018, 04:41:41 PM
-- created a new button icon for the "fill cliffs" button in the map editor.

-- painting terrain in Elevation- mode will automatically delete all existing cliff fills so that you can't drop existing terrain into a cliff chunk below it.
Title: Re: A new engine!
Post by: CraigStern on February 13, 2018, 04:51:56 PM
Gave more artist feedback.

-- created all the 3D land-lava transition tiles!

-- created a camera collider and level boundary colliders that resize and reposition themselves to frames the outside of the level, then rigged things up so that they can only collide with one another. (Eventually, this will be the basis for a system that keeps the camera from moving outside the level.)
Title: Re: A new engine!
Post by: CraigStern on February 14, 2018, 04:11:40 PM
-- designed a new human nose shape. (This makes 10 human nose shapes in total.)

-- began building the shop interface.
Title: Re: A new engine!
Post by: CraigStern on February 15, 2018, 05:45:57 PM
-- more progress on the shop interface! The game now displays the shopkeeper in the bottom-left; generates a selection of weapons, armor, miscellaneous equipment, and consumables; and lets you browse, switching between those four categories with tabs.
Title: Re: A new engine!
Post by: CraigStern on February 19, 2018, 03:22:01 PM
-- updated PremadeUnits.xml with the correct names and subfolders for all 3D destructible objects. The game now successfully loads 3D destructible objects when they are used on a map.

-- adjusted the positioning of 2D sprite objects to better align with 3D terrain.

-- procured an artist to create a bunch of new types of destructible vegetation for use in outdoor maps; received miscellaneous bushes, ferns, and flowers today.

-- fixed an issue where the camera collider was interfering with mouse listeners in battle.
Title: Re: A new engine!
Post by: CraigStern on February 19, 2018, 05:12:37 PM
-- fixed various placement behaviors to get 3D bridges, 3D terrain, and move tiles all aligning properly with one another while retaining the correct elevation data for purposes of character movement and attacking.

-- improved the look of item graphics in the shop.

-- added a little bouncing arrow to the shop interface that helps you keep track of which category of items you're browsing.
Title: Re: A new engine!
Post by: CraigStern on February 20, 2018, 04:09:35 PM
-- received new castle floor, wood floor, and cobblestone street assets. Imported them into the game; created directional variants of all castle terrain transitions.

-- hired an artist to create generic, non-generated unit portraits.

-- hired an artist to fill out the weapon graphics so that every single weapon has visibly different looks for bronze, iron, steel, and duoterre variants.
Title: Re: A new engine!
Post by: CraigStern on February 21, 2018, 04:42:25 PM
-- created directional variants of all street terrain transitions.

-- received new terrain transitions; imported them into the game.
Title: Re: A new engine!
Post by: CraigStern on February 22, 2018, 03:45:43 PM
-- wrote a few more variations for the Tell Story nighttime action.

-- filled in all the individualized XML data for the castle, wood, and street terrain tiles.

-- created directional variants of all wood floor terrain transitions.

-- created all the 3D water and lava transition tiles for the new cliffside street terrain assets.
Title: Re: A new engine!
Post by: CraigStern on February 23, 2018, 05:07:46 PM
Today's dev time was devoted to giving artist feedback. :)
Title: Re: A new engine!
Post by: CraigStern on February 26, 2018, 04:08:46 PM
More artist feedback.

-- received a bunch of new weapon graphics.

-- filled in all the individualized XML data for the new terrain transitions.

-- begam work on auto-tile selection in the map editor. (When finished, it'll be such that when you paint a tile, it automatically detects all of that's tile's neighbors and generates the tile variant that best matches up with them all.)
Title: Re: A new engine!
Post by: CraigStern on February 27, 2018, 12:27:49 PM
-- mousing over different items in the shop screen now displays the cost to buy them.

-- received complete set of final weapon graphics; made a few edits, imported them into the game.

-- fixed a bug that was causing certain leather armor types to not populate with their associated graphics.

-- figured out the gaps in existing terrain transitions, documented them for the artist.
Title: Re: A new engine!
Post by: CraigStern on March 01, 2018, 10:20:55 AM
-- got sweet new music from Ryan Richko for use in the shop and the recruitment bazaar; imported it into the game, implemented it in the relevant scenes.

-- clicking on items in the shop now causes the game to check if you have enough aura to buy them. If you do, the game removes the item from the storefront, places the item in your common inventory, and deducts the price from your aura. If you don't have enough aura, it plays an error sound and notifies you that you lack the funds.

-- recoded parts of the game so that more data is kept in a globally accessible static class, which the game automatically pulls from for saving and repopulates when loading. Spent some time standardizing the save game functions present in each different scene.

-- fixed the game's behavior when it tries to load and doesn't find a save file (it now just creates a new one instead of locking up).
Title: Re: A new engine!
Post by: CraigStern on March 01, 2018, 04:52:33 PM
-- implemented alternative "cliff fill" objects for different types of elevated terrain (specifically, for castle and cave terrain, which look weird with the default "brown cliff blocks" below them).

-- cliffs now get filled in in the actual battle maps as well, not just the map editor.

-- got the final missing armor graphic in-game and implemented! (Specifically, boiled leather mail.)

-- fixed a bug that was sometimes preventing stat icons from appearing in item mouseover tooltips.

-- fixed a bug in which human characters with nose type 10 would have their noses not appear in their portraits.

-- rewrote the code for managing characters rosters to make it a lot cleaner and faster (and also to help me deal with some lingering bugs).
Title: Re: A new engine!
Post by: CraigStern on March 02, 2018, 02:49:43 PM
-- the shop now sells food! (You can buy it in increments of 1, 5, 10, 25, 40, and 100. (Most characters consume 2 food per day.)) Relatedly: got a new "food" graphic for this part of the shop.

-- fixed a bug in which character rosters multiplied when changing scenes, producing clones of the player's characters in battle.

-- fixed a bug in which items added to the reserve supplies weren't saved upon exiting the shop scene.
Title: Re: A new engine!
Post by: CraigStern on March 03, 2018, 10:25:52 AM
-- fixed a bug in which the map editor would refuse to place down tiles if it couldn't find its preferred variant for autotiling. (In these cases, the editor now places down the default tile for the tileset instead.)
Title: Re: A new engine!
Post by: CraigStern on March 05, 2018, 05:07:32 PM
-- when creating a New Map in the map editor, the editor now clears the previous map (instead of, y'know, building a new one right on top of it (oops)).

-- the map editor's autotiling algorithm now only checks neighbors on the same elevation for tiling purposes.

-- the game now awards aura as well as a morale boost to the surviving characters when the player wins a battle.
Title: Re: A new engine!
Post by: CraigStern on March 06, 2018, 02:59:18 PM
-- wrote a more efficient version of the "fill cliffs" algorithm in the map editor, one that only checks flagged spaces; this is now run automatically after painting elevation, instead of making you hit the "fill cliffs" button.

-- reduced the size of the menu buttons in the map editor so I can fit more stuff in there.

-- updated every map with a winAura property telling the game how much aura to automatically award the player for winning the battle. If no such property is detected (or it's set to a number below 0), the game now calculates an award of aura for victory equal to 20 times the number of enemies on the map at the start of the battle, plus their combined level.

-- imported the last of the terrain variation assets (created to address edge cases in the map editor's autotiling), began creating directional variants. (Completed: the 2-tip and corner junction terrain transitions.)
Title: Re: A new engine!
Post by: CraigStern on March 07, 2018, 02:27:53 PM
-- created a new AI routine for retreating; the AI now uses it with characters who've both (1) used a non-turn-ending skill this turn and (2) have no skills left that they can use.

-- fixed a bug in which the AI would sometimes inappropriately use a unit's skill multiple times in the same turn even though it wasn't an "Unlimited" skill.

-- fixed a bug in which the AI would refuse to rotate characters defensively after moving them based on long-term objectives.

-- fixed a bug in the AI where, when evaluating how safe a given space is from enemy attacks, it wouldn't account for the fact that enemies could move.

-- fixed an integer division bug in the AI that was causing it to inappropriately return 0 in many instances.

-- fixed a bug in which the player could click on characters or press the Undo, Rotate, or End Turn buttons during the computer turn and screw things up.

-- fixed a bug in which the name of the currently selected character wasn't showing up on the top bar of the actions menu.

-- optimization: shut off the coroutine for evaluating moves in AI after it finishes running.
Title: Re: A new engine!
Post by: CraigStern on March 08, 2018, 03:25:05 PM
-- consumable items which grant experience via the expPlus attribute (i.e. battle primers) now actually grant experience when used.

-- the game now displays your aura and morale gains (or, in the case of defeat, morale losses) on the victory/defeat screen after a battle ends.

-- tweaked the short-term move routine in AI so that skills without an afterAtk of "End Turn" get penalized based on how far the character has to move to use them, thus encouraging units to save steps for retreating after using the skill. (The more defensively oriented the AI commander is, the more weight it assigns to this consideration!)

-- fixed an AI bug in which the game would disregard steps already taken that turn when deciding how far a unit could move during movement based on long-term objectives.

-- fixed a bug in which characters would sometimes say their "healing an ally" combat line when healing themselves.

-- fixed a bug in which items to be added to a character's inventory via the <Unit> tag in a level file wouldn't actually get added if the character in question was picked via a FromPlayerRoster designation.
Title: Re: A new engine!
Post by: CraigStern on March 09, 2018, 03:42:39 PM
-- updated the item descriptions and image names for Items.xml in the The Vengeance of Emma Strider campaign to play nice with the new item image naming conventions and tooltips.

-- fixed a typo that was causing the images for procedurally generated main gauches not to display correctly.
Title: Re: A new engine!
Post by: CraigStern on March 13, 2018, 04:55:35 PM
-- fixed an issue in which characters could perform the Cook nighttime activity even if there wasn't enough food left for them to cook.

-- added a new special character to dialogue: -PREF-. When the game detects it, it replaces it with the character's term for directly addressing the player.

-- wrote new dialogue for characters approaching the player to inform them that the group is running low on food.
Title: Re: A new engine!
Post by: CraigStern on March 19, 2018, 05:36:25 PM
-- received new variant tree graphics, added them into the game.

-- the game now allows personalized hobby activities to occur at night involving multiple characters, provided that they have met one another before and don't dislike one another.

-- the "low food warning" activity is now implemented; characters performing the Clean activity when there's less than a certain days worth of food left will now approach the player directly to warn them.
Title: Re: A new engine!
Post by: CraigStern on March 20, 2018, 04:53:39 PM
-- when characters approach the player directly at nighttime, it's now presented as dialogue and prefaced by the character's approach phrase.
Title: Re: A new engine!
Post by: CraigStern on March 21, 2018, 02:40:24 PM
-- wrote new narrative variants to set up character dialogue.

-- wrote and implemented a new dialogue type: characters now approach the player directly to inform them that they need a new weapon when they Practice and their equipped weapon is at less than 35% of its uses remaining.

-- wrote and implemented a new dialogue type: resignation. If a character's morale hits -10, there is now a 30% chance that the character will approach the player to inform them that they are leaving the group.

-- characters are now more likely to rest in the evening when below 30% of their maximum Energy.

-- fixed a bug in which a character could perform the Cook activity on the same night in which the group will otherwise run out of food, putting the group's food at -2 at the end of the evening.
Title: Re: A new engine!
Post by: CraigStern on March 21, 2018, 04:18:27 PM
-- fixed a bug in which the game would sometimes throw a null error when loading a character's inventory during scene changes.

-- fixed a bug in which the game would treat Immobilized characters as if they could move normally during AI-controlled turns.

-- fixed a bug in which the AI would just skip over characters with 0 steps remaining without considering actions they could take from their present space.

-- fixed a small error in the game's math for determining if an attack hit, which could (in rare instances) result in a target with dodge of 0 dodging an attack with accuracy of 100.

-- fixed an AI oversight: in weighing the costs and benefits of a move, the AI now accounts for the fact that your characters won't counterattack when backstabbed.

-- fixed a bug in which the AI would round TargetValue tags down to 0, causing the game to never target characters with the tag.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2018, 04:52:32 PM
-- fixed a bug in which the stat bonuses from a character's equipment would be reapplied cumulatively with each time the player loaded a battle, leading to ridiculous bugged-out stat inflation over time.
Title: Re: A new engine!
Post by: CraigStern on March 27, 2018, 05:13:18 PM
-- wrote new greetings, new greeting responses, and new internal variations within existing greetings/greeting responses.

-- characters are now generated with 2 greetings and 2 greeting responses (instead of just one each).

-- when a character says a greeting line or a greeting response, the game now reprocesses that line so that the character says a new variant of it the next time it's chosen for dialogue.

-- tweaked the weights of certain different types of dialogue for determining a character's dominant personality trait.

-- characters now adopt the Sad facial expression when engaged in the nighttime activity Worry.

-- created a new "Crying" facial expression, in which a character's mouth is turned down and their eyes are both shut tight.

-- fixed an issue in which characters' attack lines were not being used in determining that character's dominant personality trait.

-- fixed an issue where cleaning characters would continue to give the player low-food warnings night after night even after food stores reach 0.
Title: Re: A new engine!
Post by: CraigStern on March 28, 2018, 04:44:01 PM
-- when a character says a line talking about something they like, the game now reprocesses that line so that the character says a new variant of it the next time it's chosen for dialogue.
Title: Re: A new engine!
Post by: CraigStern on March 29, 2018, 05:21:51 PM
-- wrote more dialogue variations.

-- when characters resign, they are now actually removed from the player's rosters, and do not appear again.

-- fixed a bug in which the game would use the wrong tic/laugh phrasing for characters in spontaneously generated dialogue.
Title: Re: A new engine!
Post by: CraigStern on March 30, 2018, 03:53:58 PM
-- wrote more dialogue variations.

-- fixed a couple of dialogue-related bugs.
Title: Re: A new engine!
Post by: CraigStern on April 02, 2018, 11:04:44 PM
Today's indie dev time was devoted to working on feedback to the writer I hired to write some extra lines for generated dialogue.
Title: Re: A new engine!
Post by: CraigStern on April 03, 2018, 05:19:14 PM
-- more writer feedback.

-- fixed a bug that was preventing characters from referring to the listener's name or other characteristics if the speaker was not also the character that triggered the dialogue.
Title: Re: A new engine!
Post by: CraigStern on April 04, 2018, 04:31:10 PM
-- fixed a bug in which the player could interact with items in the inventories of characters not under his or her control during a battle. (The unit in question must now either belong to your army, or be Enthralled by one of your characters, for you to have them use/equip/unequip/drop/give items.)
Title: Re: A new engine!
Post by: CraigStern on April 09, 2018, 04:24:05 PM
-- wrote new nighttime activity narration specific to certain personality traits.

-- removed the "Extravert" personality trait from the game, and folded its effects into the "Friendly" personality trait. (Extravert simply wasn't producing enough results in terms of giving characters their own distinct character.)
Title: Re: A new engine!
Post by: CraigStern on April 10, 2018, 06:05:15 PM
-- wrote more Greeting dialogue / variations.

-- fixed a bug in which the game could freeze when trying to parse a blank greeting.
Title: Re: A new engine!
Post by: CraigStern on April 11, 2018, 04:52:37 PM
-- wrote new greeting dialogue for characters with the Loyal personality trait.
Title: Re: A new engine!
Post by: CraigStern on April 16, 2018, 05:23:14 PM
-- wrote new Drink Beer, Tell Story, and Volunteer variations for nighttime activities.
Title: Re: A new engine!
Post by: CraigStern on April 17, 2018, 05:40:15 PM
-- wrote new greeting dialogue for characters with the Sensitive personality trait.

-- gave artist feedback and writer feedback.
Title: Re: A new engine!
Post by: CraigStern on April 18, 2018, 04:18:00 PM
-- wrote new greeting dialogue for characters with the Narcissistic and Sensitive personality traits.

-- gave artist feedback and writer feedback.
Title: Re: A new engine!
Post by: CraigStern on April 19, 2018, 05:36:58 PM
-- changed the code so that unique characters can be given the "Loyal" tag to ensure they never desert from low morale, regardless of personality.

-- fixed a typo that was causing the image for bronze throwing axes to not load.

-- fixed a compression issue affecting the way mentalist sprites were displayed in battle.

-- fixed an issue with duplicate line culling that was causing certain characters to be generated without the requisite number of greetings and responses, leading to crashes during nighttime dialogue.
Title: Re: A new engine!
Post by: CraigStern on April 20, 2018, 05:00:46 PM
-- wrote a few new dialogue variations.

-- fixed a few typos in dialogue.

-- fixed a bug in which characters could initiate non-Greeting dialogue with golems.

-- fixed a bug in which golem energy and morale could be altered by group activities or nighttime events (like running out of food).

-- golems are now always generated with morale at 0.

-- fixed a bug in which the game wouldn't palette-swap golem portraits with the correct army colors.
Title: Re: A new engine!
Post by: CraigStern on April 23, 2018, 04:36:39 PM
-- received finished "generic enemy" portraits (as distinct from unique unit portraits or procedurally generated portraits).

-- rewrote the process for generating character stat growths so as to produce more balanced generated characters with less divergence between them in terms of how powerful they are. This should, ideally, prevent players from recruiting total duds.
Title: Re: A new engine!
Post by: SmartyPants on April 23, 2018, 08:19:29 PM
This looks promising! I lost interest in the campaign of telepath tactics, because it was slow on my computer and in the storytelling. Hopefully the new engine will prevent the game from being painfully slow. I had a difficult time finishing Telepath Tactics because it took so long to wait for all the units to take their turns on huge battlefields that I lost patience a few times and quite.  Hopefully a new engine will speed things up or allowing saving in the middle of a battle.  The modding was also disappointing due to a lack of variation in art assets and a meaningful character creator.  Unless someone was an artist, they couldn't really make the characters their own in Telepath Tactics with the very limited portraits available to them. The development of having the ability to customize character portraits and the ability for those portraits to show different expressions is a huge development for modders. While a new game engine won't fix a story that somehow became boring/generic by trying too hard be genre-breaking/controversial, a new engine will fix a lot of the other glaring issues. 

If there is a kickstarter that promises steam workshop integration, more art assets, and more classes/races with an improve game engine, then I imagine a sequel is very possible in the future.
Title: Re: A new engine!
Post by: CraigStern on April 24, 2018, 04:25:02 PM
-- integrated the new generic enemy portraits into the game. The game now uses generic portraits for units it generates on the fly during a battle.
Title: Re: A new engine!
Post by: CraigStern on April 25, 2018, 10:48:06 AM
-- generated units created on the fly in battle using Generate: can now have a specified gender, in much the same way as one created using the GenerateUnit action. (As with GenerateUnit, gender is an optional parameter occurring right after name--see below.)

-- in addition to Generate:, battles now support Unique:, which generates a fully realized character with its own personality, dialogue, and a unique portrait instead of just making a generic. Following Unique:, the parameters (delimited by a forward slash) are: class, name (use a | to delimit first and last), gender, faction name, and level range. (Any of the first 3 parameters may be left blank if you want the game to randomly select something on its own.)

This, e.g., will create a male cavalier named "Balibar Momerath" at either level 1 or level 2:

Quote<Unit>0,2,Unique:Cavalier/Balibar|Momerath/Male/The Green Alliance/1-2,2,7,Down,None</Unit>

-- the GenerateUnit action now has a companion action called GenerateUnique; this generates a fully realized character with personality, dialogue, and a unique portrait instead of just a generic unit.

-- created an alternate algorithm for generating a character's stat growths when the character is created with a specified class. (The ordinary algorithm defines stat growths based on species, and only then picks an appropriate class.)
Title: Re: A new engine!
Post by: CraigStern on April 25, 2018, 02:26:11 PM
-- the game now supports specific, custom portraits cobbled together from the pieces used in procedurally generated portraits for characters in PremadeUnits.xml.

To use this feature, write Custom: in the character's portrait="" attribute within PremadeUnits.xml, followed by the following (each delimited by a forward slash):

Example 1: this would produce a human female clad in Cryokineticist's garb, with light skin, green eyes, strawberry blond hair, a Roman nose, and close-cut hair:

Quoteportrait="Custom:Species,Human/Gender,Female/Class,Cryokineticist/SkinPalette,0/EyePalette,0/HairPalette,6/Head,head3/HairHorns,9(0_150_1.0)/HairHorns2,/EyeL,eye4L(-51.5_72.0_1.1)/EyeR,eye4R(-19.0_74.5_1.0)/Nose,nose9(-35.0_55.0_0.96)/Mouth,mouth5(-32.0_35.0_1.0)"

Example 2: this one would produce a shadowling cryokineticist with your standard shadowling eye shape, a comet-tail-shaped plume, a "tented fingers" hand position, a fanged mouth, and largely horizontal curved horns:

Quoteportrait="Custom:Species,Shadowling/Gender,Female/Class,Cryokineticist/SkinPalette,0/EyePalette,0/HairPalette,0/Head,head1/HairHorns,smokeplume9(0_150_1.0)/HairHorns2,horns7(24.0_132.0_1.1)/EyeL,eye1L(-42.0_55.0_1.3)/EyeR,eye1R(12.0_55.0_1.3)/Nose,hands6(0_40.0_1.1)/Mouth,mouth2(-10.0_22.0_2.0)"

(Note that the appropriate positioning and scaling for the eyes, nose, and mouth differs by taste and by head shape even within the same gender and species, so you'll need to experiment with these!)
Title: Re: A new engine!
Post by: CraigStern on April 25, 2018, 04:40:55 PM
-- finished writing unique victory barks for the entire cast of Telepath Tactics characters.
Title: Re: A new engine!
Post by: bugfartboy on April 25, 2018, 05:46:48 PM
What's the extent of the separation between species and class with regards to abilities and resistances/weaknesses? Would, for example, a red spriggat swords(wo)man still be able to breathe fire and maintain a weakness to piercing damage?
Title: Re: A new engine!
Post by: CraigStern on April 26, 2018, 09:05:42 AM
Quote from: bugfartboy on April 25, 2018, 05:46:48 PM
What's the extent of the separation between species and class with regards to abilities and resistances/weaknesses? Would, for example, a red spriggat swords(wo)man still be able to breathe fire and maintain a weakness to piercing damage?

Yes!

Note that the game won't randomly generate non-human swordsmen due to the limitations of our available 2D sprite animations--but there's nothing stopping you from creating a custom character like that by hand, as long as you don't mind the character not appearing to have (or use) a sword in its onscreen representation!

If you wrote a custom character with those characteristics in PremadeUnits.xml, then it might look like this:

<u category="character" is3D="false" name="Socrates/Sunblade" loadID="Socrates/Sunblade" spriteSet="SpriggatRed_Male" portrait="Custom:Species,Spriggat/Gender,Male/Class,Swordsman/SkinPalette,0/EyePalette,0/HairPalette,0/Head,head1/HairHorns,horn7L(-57_134_0.29)/HairHorns2,horn7R(-7_138_0.32)/EyeL,eye2L(-50_72_1.0)/EyeR,eye2R(-24_72_1.0)/Nose,nose1(-43_56_1.0)/Mouth,mouth4(-32_36.2_1.0)" race="Spriggat" sex="Male" charClass="Swordsman" moveType="Flying" defaultSkillAnim="Claw" skills="Fire Breath" counterAttacks="Sword" masteries="Sword/Main Gauche/Small Shield" stats="Health,21/Energy,12/Speed,7/Strength,3/Counter Limit,1/Perception,6/Psy,8/Pierce Res.,-40/Heat Res.,50/Cold Res.,-25" statGrowths="Health,4/Energy,3/Strength,4/Psy,2/Pierce Res.,1/Slash Res.,1/Dodge,1" skillProgression="2,Shove/3,Feint/4,Pull/6,Fire Breath 2/8,Wing Armor Mastery/10,Rapier Mastery/12,Double Strike/14,Light Armor Mastery/16,Dive"></u>

Note that the class parameter in the portrait attribute doesn't actually change anything for non-human, non-lissit portraits, as there aren't alternate outfits for these species.

Also note that swordsmen usually start with Light Armor Mastery and attain Medium Armor Mastery at some point--but for Socrates here, I've chosen to delay light armor and remove medium armor entirely to offset his mobility advantage, and also because it'd probably be just plain difficult to fly with anything but the lightest of armor on! :)
Title: Re: A new engine!
Post by: bugfartboy on April 26, 2018, 01:13:28 PM
Okay, so there aren't any specific abilities or features related specifically to race, you can just manually create a unit with those features? So if I desired a unit like Socrates there, I would need to manually design him, rather than just ask the engine for a Spriggat of class Swordsman?


I know you've said that the new engine requires graphics to be built into it (I'm guessing at compile time?). Does that same limitation extend to two-dimensional graphics as well? (Character and item sprites, being the big ones)
Title: Re: A new engine!
Post by: CraigStern on April 26, 2018, 05:08:12 PM
-- created the beginnings of an in-game character creator; you can now select a species, class, and gender, and get taken to a screen with an appropriate, procedurally generated portrait for you to edit the parameters of. (The actual editing part is not complete yet.)


Quote from: bugfartboy on April 26, 2018, 01:13:28 PM
Okay, so there aren't any specific abilities or features related specifically to race, you can just manually create a unit with those features? So if I desired a unit like Socrates there, I would need to manually design him, rather than just ask the engine for a Spriggat of class Swordsman?


I know you've said that the new engine requires graphics to be built into it (I'm guessing at compile time?). Does that same limitation extend to two-dimensional graphics as well? (Character and item sprites, being the big ones)

There are abilities and features that are related to race in a design sense--but none that are hard-coded into the engine as such. That said, those design features are hard-coded into the procedural character generation algorithm.

At the moment, I'm not sure if I'm going to be able to support custom sprites in the new engine. This remains a big question mark, as Unity generally requires graphical assets to be baked in at compile time.
Title: Re: A new engine!
Post by: CraigStern on April 27, 2018, 04:44:00 PM
-- did a bunch of grunt work on portrait customization; the game now converts portrait IDs into numerals that can be stepped up and down via arrows; it also has a built-in check to ensure the numbers are constrained to only represent existing assets. The arrows can now be clicked, and the portrait will refresh with the appropriate assets.

-- when swapping out assets in the portrait editor, the game automagically repositions the portrait elements to match the new selection!
Title: Re: A new engine!
Post by: CraigStern on April 30, 2018, 05:33:57 PM
-- made some more improvements to the character editor: the escape key now kicks you back to the previous window in case you want to make changes; the portrait screen now has a randomizer button, and tells you how many variants there are for each feature.

-- the character editor now has a screen where you give the character a first and last name.
Title: Re: A new engine!
Post by: CraigStern on May 01, 2018, 04:29:08 PM
-- the character editor now has a window where you assign the character stat growths. Stat growths are selected at random based on the character's chosen class, and can be re-rolled or individually adjusted to taste.

-- the character editor now has a window where you assign the character their starting stats. Stat growths are generated deterministically as of level 1, based on the character's growths and the character's chosen class, and can then be individually adjusted to taste.

-- fixed a typo that was preventing generated characters from getting supplemental growths in randomly chosen stats.
Title: Re: A new engine!
Post by: CraigStern on May 02, 2018, 02:50:03 PM
-- you can now select a default facial expression for your character in a sub-window of the portrait editor. (Mousing over each expression preview for you what it'll look like in the current portrait.)

-- began working on a new "campaign editor" scene. You can now create a new campaign and name it, and the game will create a subdirectory with that name within Documents\My Games\Telepath Tourney\Custom Campaigns. (Needless to say, this will be where the game stores the characters and maps you create for said campaign)

-- fixed some of the portrait scaling and positioning data for female hair type 13, which wasn't quite lining up with the scalp line of certain female human head shapes.

-- adjusted the chances of having a growth greater than 1 in randomly chosen supplemental growths.
Title: Re: A new engine!
Post by: CraigStern on May 03, 2018, 03:27:25 PM
-- added buttons to the campaign editor page linking to the Map Editor and Character Creator.

-- the character editor now has a window where you assign the character their starting skills, masteries, and tags, as well as their progression in skills, masteries, and tags as they reach particular levels. (There is a button to generate these things procedurally to get you started with an example for a unit of that class and level.)

-- the character editor now has a button to randomly generate a name on the character naming screen.

-- updated the "step backwards" function in the character creator to accommodate all the new windows. The game now tracks when you go backwards and update a character's class, species, or gender, then sets a flag to generate a new, appropriate portrait upon your return to the portrait window; but otherwise, it will leave your chosen portrait alone after you set one.
Title: Re: A new engine!
Post by: CraigStern on May 07, 2018, 04:56:30 PM
-- gave extensive feedback on dialogue to writer.
Title: Re: A new engine!
Post by: CraigStern on May 08, 2018, 02:27:05 PM
-- when creating a new campaign, the game now copies a default Items.xml into the campaign's folder.

-- the game then successfully loads the custom campaign's Items.xml file, and uses it as the official item reference when creating characters for that campaign. (See below.)

-- the character editor now has a window where you assign the character their starting inventory and equipment, as well as any counterattacks. The game automatically checks to make sure the items listed are actual items that exist in Items.xml--it will display an error naming the missing item if it is not found.
Title: Re: A new engine!
Post by: CraigStern on May 08, 2018, 05:27:47 PM
-- the new campaign window now checks for forbidden characters in the campaign name, and returns an error if yours contains one. (Or if you try to proceed without naming your campaign. Or if your chosen campaign already exists.)

-- the game now has an Open Campaign window in the campaign editor, which it auto-populates with the folders it detects in your Custom Campaigns folder. You can now select one to actually switch the active campaign you're editing.
Title: Re: A new engine!
Post by: CraigStern on May 09, 2018, 02:17:21 PM
-- organized the game into proper day-night cycles. At the start of each day, you can partake in one activity (shopping, recruitment, or fighting), at which point it transitions to night. When the night ends, the next day starts.

-- fixed a bug in nighttime when checking respective familiarity values between characters.

-- fixed a bug in nighttime where the game would sometimes lock up trying to perform paired group activities with characters that had not exchanged greetings with any other characters in the game.
Title: Re: A new engine!
Post by: CraigStern on May 11, 2018, 04:41:57 PM
-- gave extensive feedback on dialogue to writer.

-- wrote some more character dialogue myself.
Title: Re: A new engine!
Post by: CraigStern on May 14, 2018, 04:49:19 PM
-- the stats window in the character creator now has a utility to automatically generate stats appropriate for the character at a given level, simulating a possible progression using their actual stat growths. (You can then go and hand-edit from there.)

-- on the stats window in the character creator, you can now hold Shift to increase or decrease a stat by 5 at a time (instead of just 1 at a time).

-- the character creator now has an attack barks window where you can write up to 3 different attack barks for your character. (There is also a button you can use to have the game automatically generate attack barks for you, from 2 randomly chosen personality types.)

-- bumped the number of attack barks that characters are generated with up from 2 to 3.

-- wrote some new attack barks; assigned all attack barks distinct IDs.
Title: Re: A new engine!
Post by: CraigStern on May 15, 2018, 04:28:14 PM
-- the class selection window in character creator now restricts class selection to those classes normally available to characters of a given species. (Note that you can always go back and change this by hand in the XML file later if you're determined to have an unusual, unsupported class for a given character--but for the sort of modders who want to dabble without really getting into the proverbial weeds, this will prevent unintended issues!)

-- there is now a button in the portrait editor window in the character creator to toggle on generic portraits, for when you're creating generalized enemy unit types (e.g. Bloodbeard's Bandit, Bloodbeard's Bowman, etc.) whom you want to be visually distinguishable from unique characters.

-- the character creator now has a victory barks window where you can write up to 3 different victory barks for your character. (There is also a button you can use to have the game automatically generate victory barks for you, from 2 randomly chosen personality types.)

-- wrote some new defeat and deployment barks; assigned all defeat barks, victory barks and deployment barks distinct IDs.
Title: Re: A new engine!
Post by: CraigStern on May 16, 2018, 04:33:55 PM
-- created a basic title screen complete with buttons that quit the game, go to the campaign editor, open a window that lets you start a new game, or open a window showing saved game files to load.

-- the title screen will now detect if any custom campaigns exist--if any exist, they will be added to the campaign selection in the new game menu. (Otherwise, the game will only display the default campaign.)

-- new games can now be started in any save slot (from 0 to 99) via the new game window in the title screen.

-- the title screen will detect if any save files exist; if none exist, the game will gray out the load game button and block access to the Load Game menu.

-- saved games now store the date and time when they were last saved.

-- saved games can now be loaded via the load game window in the title screen.

-- the game now prevents the player from visiting the Arena if they have no characters on their team; it grays out the button and directs them to visit the recruitment office instead.

-- the game now warns the player if they try to visit the Arena with less than 4 characters on their team; but allows them to continue anyway if they want (just so long as they have at least 1 character).

-- the options menu in battle (and the campaign editor) now both have buttons that allow you to quit to the title screen.

-- added the options menu into the daytime scene.

-- fixed a bug in which the game would sometimes fail to select a class for lissit characters.

-- fixed a bug that was causing the game to miss portrait data for unique characters in the main campaign.
Title: Re: A new engine!
Post by: CraigStern on May 17, 2018, 05:22:56 PM
-- created a narration screen for cut scenes. It can display animated frame-based narration (i.e. not the scrolling kind just yet) as well as dialogue, and can run scripts. Narration can be advanced both by clicking and by hitting the Esc key.

-- game can now parse narration in the XML files for cut scenes. (Changes from TT: Individual "frames" within a static cut scene are now delimited by single bars (|) instead of double forward slashes (//); the info inside -DIA:- is now the conversation ID of the dialogue to be triggered rather than a trigger.)

-- when loading a new scene, the game now checks ahead to see if a scene is actually a cut scene instead of a battle, then if so, proceeds to the narration screen for cut scenes.

-- rewrote the XML loading code so that the game now flexibly loads from either within the game or outside the game, depending on whether the current campaign is a baked-in campaign or a custom (player-created) campaign.

-- added support for the NextScene reply action in dialogue.

-- implemented new script actions SetFood and SetAura, each with one parameter: an operator and an amount delimited by a colon. These, for instance, will set the player's aura and food to 2500 and 100, respectively:

<Action>SetAura/=:2500</Action>
<Action>SetFood/=:100</Action>


-- fixed a bug in which Unity would sometimes add invisible white space to script names, preventing it from recognizing when scripts were being called by a Run action in dialogue.
Title: Re: A new engine!
Post by: CraigStern on May 18, 2018, 09:46:39 AM
-- the game now automatically loads Introduction.xml for a given campaign when the player starts that campaign.

-- added support for -PIC:- to cut scenes, allowing you to change the background behind the text (e.g. -PIC:Ship- to have a picture of the deck of a ship appear behind the text).

-- created an Introduction.xml cut scene for the new campaign.

-- created a default Introduction.xml cut scene for player-created custom campaigns.

-- when creating a new campaign in the map editor, it now creates the appropriate Maps subfolder for said campaign and sticks a copy of the default Introduction.xml in there.

-- the game now grays out the map and character editor buttons in the campaign editor (and won't let you click them) until you've started a new campaign or chosen an existing campaign to edit.

-- folded the Neat personality trait into Compulsive, as it overlapped Compulsive enough in practice as to make it useless as a distinct trait.

-- wrote new heal and build barks; assigned all teach lines, nickname lines, heal barks and build barks distinct IDs.
Title: Re: A new engine!
Post by: CraigStern on May 21, 2018, 05:26:20 PM
-- clicking while narration text is still animating in a static cut scene now makes the text automatically complete instead of advancing the frame; clicking will advance the frame only once the text has completed animating.

-- clicking the final frame in a static cut scene now automatically advances the game to the next scene (the one specified in nextbattle).

-- fixed a bug in the game's save system that was preventing files from loading correctly.

-- fixed the timing of heal barks in battle; they now occur just prior to healing an ally, as opposed to afterwards.

-- recruits are now automatically generated when you visit the recruitment office (as opposed to waiting for a button click).

-- updated the scaling and positioning of the options menu canvas in the daytime scene.

-- added an Exit button to the map editor, which takes you back to the campaign editor.

-- the campaign editor now remembers the currently selected custom campaign whenever you return from creating new characters or maps.

-- fixed certain text field dimensions in the New Game window and the Stats Editor window so they'll display correctly on different resolution monitors.

-- fixed a setting that was causing the campaign editor to play music upon opening.
Title: Re: A new engine!
Post by: CraigStern on May 22, 2018, 04:40:02 PM
-- integrated writer's new greeting lines into the game; greeting dialogue is now complete.
Title: Re: A new engine!
Post by: CraigStern on May 23, 2018, 04:41:57 PM
-- the character creator now has deployment bark, heal bark, build bark, and defeat bark windows where you can write the associated dialogue for your character. (Each window has a button you can use to have the game automatically generate some dialogue for you.)

-- the character creator now checks to make sure that all of the skills given to a character in both their skills and skill progression actually appear in Attacks.xml, and throws an error if they don't.

-- the character creator now has a visible "back" button which you can use instead of hitting Escape.

-- you can now cancel all the way back through the steps of character creation from the end to the beginning.

-- after getting through the defeat barks window, the game now shows you a character screen where you can review your character's information.

-- premade units now support pre-written combat barks saved right into their XML tags using the following attributes:


If editing the XML directly, make sure the individual lines within each XML attribute are delimited using a forward slash:

Quote<u category="character" is3D="false" name="Emma/Strider" loadID="Emma/Strider" spriteSet="Swordsman_Female" defaultSkillAnim="Motivate" portrait="Emma Strider" race="Human" sex="Female" charClass="Hero" moveType="Land" counterAttacks="Sword" masteries="Sword/Main Gauche/Light Armor/Small Shield" stats="Health,33/Energy,8/Speed,5/Counter Limit,1/Strength,3/Psy,1" tags="Promotable" statGrowths="Health,5/Energy,2/Counter Limit,2/Reflexes,1/Dodge,2/Strength,4/Pierce Res.,1/Slash Res.,2/Crush Res.,2" skillProgression="2,Sprint/3,Shove/3,Pull/4,Medium Armor Mastery/5,Motivate/7,Feint/10,Rapier Mastery/14,Double Strike" vicBarks="And stay down!/You deserved that./We're done here./That's enough out of you./Mess with my family? You'll have to go through me first."></u>

-- wrote some new attack and victory lines, and consolidated some existing ones as internal variations.

-- updated the "Exit to Campaign Editor" button in the character creator to match the one in the map editor.

-- fixed issues with generic golem and shadowling portrait scaling/positioning.

-- fixed an annoying graphical glitch with menu pop-up animations.
Title: Re: A new engine!
Post by: CraigStern on May 24, 2018, 02:43:08 PM
-- added the advanced Crossbowman skills Piercing Bolt and Grapeshot into the game.

-- when you press the Save Character button in the character creator, the created character is now distilled down to an XML node with all the attendant attributes and saved within PremadeUnits.xml for the current custom campaign.

-- if the game does not detect PremadeUnits.xml when it goes to save the character, it will create the file from scratch and save the character within it. If it does detect the file, it will simply add the new character on the next available line and save the file.

-- when adding a character to an existing PremadeUnits.xml, the game will check for an existing character with the same loadID; if it finds one, it will remove that character and add the new one in its place.
Title: Re: A new engine!
Post by: CraigStern on May 25, 2018, 03:01:16 PM
-- fixed a bug in the character leveler which caused low-level characters (and particularly level 1 or level 2 characters) to sometimes not receive all of their starting skills upon generation.

-- fixed a big in the "resume" button on the options screen.

-- fixed a bug that was preventing the game from displaying the images for generated main gauches.

-- fixed a crash bug when generating consumable items that grant unscaled experience.
Title: Re: A new engine!
Post by: CraigStern on May 29, 2018, 03:51:16 PM
Memorial Day weekend is over, and it's back to work!

-- created an animation showing the previous day passing into the next as each new day dawns.

-- created a new action: SetDaysPassed. This takes a single "operation string" parameter: an operation symbol, a colon, and then a value (e.g. =:2, +:1, r:10, and so on). The game applies the operation and the value to the current days passed. (Every campaign begins with days passed equal to 0 by default.)

-- created a new action: SetDate. You feed this action three integer parameters: the numbers for the day, month, and year when the game started. It then calculates the current date based on days passed, and passes the current day, month name, and year into the custom strings CalendarDay, CalendarMonth, and CalendarYear, respectively. (Note that the date generated and the names of the months are based upon the Cera Bellan calendar.)

-- renamed generated items with a GEN: prefix so as to avoid situations where a campaign-specific item of the same name overwrites it, producing errors in the shop. (E.g. the generated Kite Shield is now named GEN:Kite Shield, so that the game can distinguish it from the default, non-generated Kite Shield item that comes standard in most campaigns.)

-- if ItemGen produces a blank item (e.g. because the game couldn't find a matching item of the correct type), the shop will now skip over it instead of listing it.

--adjusted the character screen, level-up screen, and reserve supplies screen so that clicking outside the menu will register as a click to close the menu.

-- renamed the weapon properties "Well-balanced" and "Astonishing" to "Balanced" and "Peerless" for brevity's sake.

-- reduced the acceleration for screen-edge panning, and imposed a 4-second delay before allowing screen-edge panning after clicking a button in the actions bar. (These should hopefully eliminate the incidence of annoying, unwanted panning after clicking a button.)

-- fixed a bug in which the game would check to throw out a "No Targets!" message during an AI-initiated attack.

-- fixed a bug that would throw an error for players from proceeding to nighttime with 0 characters in their roster.
Title: Re: A new engine!
Post by: CraigStern on May 30, 2018, 03:36:15 PM
-- created "fade in from black" and "fade out to black" scene transition effects.

-- cut scene text only begins to animate once the fade in completes; scene transitions are now triggered at the conclusion of the fade out.

-- implemented fade-in and fade-out on all Unity scenes, providing a much smoother and more polished feel to all scene transitions.

-- created the UI framework for issuing nighttime orders.

-- implemented nighttime orders for group introductions and group practice. Both negatively impact the morale of all non-Golem units, but they provide benefits to compensate, a) making sure all units have no less than 5 familiarity with every other unit and b) giving all units 20 experience, respectively.

-- added the options menu to nighttime.

-- created a separate morale report screen for nighttime.

-- wrote a new description for nighttime for if you retire to camp alone.

-- fixed a typo in one of the approach lines, wrote new nighttime practice lines for religious characters, made some improvements to the nighttime practice lines for empirical characters.
Title: Re: A new engine!
Post by: CraigStern on May 31, 2018, 03:40:24 PM
-- created a map settings window in the map editor where you can edit the map's name, musictrack attribute, nextbattle attribute, winAura attribute, and objective(s).

-- created directional variations of every instance of the "3Tip," "XTip," "PJunc," "P2Junc," and "TJunc" terrain transitions for all basic terrain types.

-- implemented autotile detection routines for "tip" transitions (those that take account of each tile's diagonal cornering tiles).

-- the map editor now continuously monitors the map for whatever tileset is most common among all the tiles present. Whenever this "base tileset" flips to a different set, the editor now automatically re-bakes all of the tile transitions using the new set as the base.

-- fixed an issue in which the map editor would fail to select an appropriate variant for tiles bordered on an equal number of sides by two distinct tilesets.

-- the game now automatically selects the name input field when creating a new campaign in the campaign editor.

-- various bug fixes.
Title: Re: A new engine!
Post by: CraigStern on June 01, 2018, 03:12:06 PM
-- added a Surrender button to battle; when pressed, the battle is stopped, the player gets 25% of the aura he or she would have gotten if they'd won, and team morale drops by 2.

-- you can now click anywhere on the screen to remove the turn box and victory box in battle, not just on the boxes themselves.

-- cut the screen-edge panning activation areas in half; the cursor now has to be right on the screen edge to activate it.

-- fixed a bug in which players could move the camera around and interact with the things while the turn box remained onscreen in battle.

-- fixed a bug in which the game was showing the actions menu beneath the victory/defeat screen at the conclusion of battles.

-- fixed a bug where the game was clearing pop-up text before its animations finished.
Title: Re: A new engine!
Post by: CraigStern on June 04, 2018, 05:53:01 PM
-- created the New Unit selection window for the map editor. Available units are loaded from XML based on the current campaign, then displayed sequentially; clicking one selects it as the current character to be painted onto the map. (In an improvement over the original Telepath Tactics map editor, multiple pages of units are supported.)

-- filled out tile data for all of the dozens of new tile variations; corrected a numbering error with some of the existing tile data.

-- created a shadowy "portrait missing" portrait.

-- when the game cannot find a designated character portrait, instead of displaying a visually jarring white box, it now loads up the "portrait missing" portrait instead.

-- reduced the size of the map editor's palette chooser window to a more reasonable size reflecting the amount of terrain types actually available to paint.
Title: Re: A new engine!
Post by: CraigStern on June 05, 2018, 01:56:46 PM
-- rewrote a pointlessly convoluted and inefficient character lookup routine I wrote in the early stages of developing this engine, back when I was apparently on crack.
Title: Re: A new engine!
Post by: CraigStern on June 06, 2018, 05:35:18 PM
-- you can now click on tiles to place a copy of a unit there in the map editor when in New Unit mode.
Title: Re: A new engine!
Post by: CraigStern on June 07, 2018, 02:25:38 PM
-- the map editor now has a working New Object window that works in the exact same fashion as the New Unit window, but it loads destructible objects instead of characters. The selected objects can now be painted directly onto the battlefield.

-- added a "facing" field to the New Unit window. (It successfully picks the right direction if you fail to capitalize, or even if you totally mistype it, just so long as the first letter is correct.)

-- you can now paint player spawn points ("FromPlayerRoster") onto the battlefield in the map editor.

-- mousing over placed units in the map editor now produces a character tooltip, just as if they were in battle.

-- you can now click on placed units and destructible objects in the map editor to open a window that lets you edit their spawn turn, army, position, and facing, and lets you add tags and inventory items to them directly.

-- changed map editor behavior so that painting water, lava, and chasms is now super quick and easy; the maps now start out at elevation 1. Wherever you paint water, lava, or chasm tiles (provided the spot wasn't previously occupied by water, lava, or chasm tiles already), the elevation level now automatically sinks by 1, putting the waterline half a tile below ground level.

-- the map editor now properly loads tile data for tiles out of TileData.xml instead of using a hacky shortcut. (In related news, it now properly detects the appropriate height for spawning bridges over water, lava, and chasms.)

-- fixed a few outdated spriteSet values in PremadeUnits.xml.
Title: Re: A new engine!
Post by: CraigStern on June 08, 2018, 05:20:38 PM
-- the map editor now has a Conditions window within the map settings that allows you to hand-type up to 10 separate conditions applicable to the map.

-- the map editor now has working "delete units" and "delete objects" modes, in which clicking a unit / object (as the case may be) deletes it from the map.

-- updated map editor behavior with regard to placing and deleting units and objects so that you can click and drag to "paint" instead of having to individually click each tile.

-- updated map editor behavior with regard to editing tiles beneath units and objects so that you can click and drag to "paint" below them.

-- units and objects in the map editor now automatically reposition themselves to match when you adjust the elevation of the tile they are on.

-- began coding the procedure for saving maps as XML files.
Title: Re: A new engine!
Post by: CraigStern on June 11, 2018, 04:08:17 PM
-- the map editor can now save maps, correctly formatted with all relevant data (except for dialogue and scripts; I'll be adding those in later).

-- the game now successfully loads custom campaign maps!

-- the map editor, specifically, can now load custom campaign maps. It now contains a Load Map window which lets you select any map belonging to the current selected campaign (so long as it's a battle map and not a cut scene of some kind--the editor will let you know which ones are off-limits).

-- the unit properties window in the map editor now lets you add triggers to a unit.

-- alphabetized default premade objects for easier browsing in the map editor.

-- when you open a campaign in the campaign editor, it now lists your campaign's characters and maps right there on the screen; you can flip through them as "pages" to inspect them all.

-- fixed an oversight re: the game recognizing the "Either" value for the sex attribute when loading sprites.
Title: Re: A new engine!
Post by: CraigStern on June 12, 2018, 04:59:00 PM
-- you can now load existing characters to edit within the character creator! When you load a character, you can click backward through the various character creation stages to edit stuff; all of the auto-generation of stats and growths and such will be turned off, and you can save at any time.

-- there is now a New Character button in the character creator so you can make multiple new characters in a row (or simply make a new character after editing a loaded character) without having to back out to the campaign editor in between.

-- you can now select "Either" as a gender when using the character creator. This creates a character with a generic portrait whose gender is chosen at random every time they are spawned (a la the enemies in Telepath Tactics). The creator will remove the random name generation button for such characters.

-- fixed a variety of minor (and not-so-minor) bugs in the character creator.
Title: Re: A new engine!
Post by: CraigStern on June 14, 2018, 11:28:31 AM
-- the map editor will now successfully format and save Scripts contained within a map file when it saves the map.

-- the map editor will now successfully format and save Dialogue contained within a map file when it saves the map.

-- fixed a bug in which the map editor would overwrite elevation data in loaded maps with default elevation.

-- if you load a map containing units or objects not defined in the current campaign's PremadeUnits.xml file, instead of freaking out and crashing, the map editor now just skips over those units or objects and carries on.

-- fixed a small handful of bugs that were keeping the game from properly loading generic portraits for Either-gendered characters that had been loaded from PremadeUnits.xml.
Title: Re: A new engine!
Post by: CraigStern on June 15, 2018, 04:42:40 PM
-- the map editor's new object window automatically alphabetizes every object before listing them for easy browsing.

-- the map editor's new object window now has a search bar! When you type something in, the game will automatically narrow down the listed objects to a) those which start with the characters your entered in, followed by b) objects which have that sequence of characters appearing anywhere in their loadID.

-- the map editor's new object window now shows a preview of the last object whose name you moused over; this makes it a lot easier to see what you're selecting! (Unfortunately, this only works for sprite objects at the moment--there is currently no support for full 3D objects with this feature.)

-- finalized support for generated generic characters in the map editor; you can now customize more of their features as well. Generic generated can now be placed, saved, and loaded with maps.

-- unique generated characters are now loaded and saved properly in maps (though there is not yet a mechanism for actually placing them in the editor).
Title: Re: A new engine!
Post by: CraigStern on June 20, 2018, 03:26:33 PM
I've been busy with True Messiah stuff the past few days, but I did manage to spend some time looking around for artists who can do new background art in the correct style. More to come on that front later!
Title: Re: A new engine!
Post by: CraigStern on June 21, 2018, 03:17:24 PM
-- began work on the cut scene editor.

-- the campaign editor now has a button that links directly to the cut scene editor.

-- worked on the name generator XML file a bit with some new names and edits.
Title: Re: A new engine!
Post by: CraigStern on June 22, 2018, 02:19:00 PM
-- you can now load cut scenes and create new cut scenes in the cut scene editor.

-- you can now browse through the frames of the current cut scene at will using the arrow buttons in the menu bar up at the top of the cut scene editor.

-- you can now edit the narration text of the current frame, then see your changes reflected immediately in the cut scene below.

-- you can now save cut scenes after editing them.
Title: Re: A new engine!
Post by: CraigStern on June 25, 2018, 05:52:37 PM
Sent out a contract to the new artist handling cut scene backgrounds.

A bit of new coding:

-- the cut scene editor now has working New Frame and Delete Frame buttons, each of which do exactly what it sounds like they do: New Frame inserts a new frame into the narration after the current frame; Delete Frame deletes the current frame of narration, moving the player back to the previous frame if possible.

-- fixed some cut scene editor bugs.
Title: Re: A new engine!
Post by: CraigStern on June 26, 2018, 12:15:46 PM
Had to redo yesterday's work due to accidentally screwing up the project through ill-advised use of DirectoryInfo.MoveTo(). (I won't be using that command again, that's for sure.) Luckily, it's always faster redoing something you've already figured out how to do, so I had time to do some new stuff as well:

-- updated the behaviors on New Frame and Delete Frame, as they felt weird in practice. New Frame no longer auto-advances you to the new frame; Delete Frame no longer takes you backwards a frame after deletion.

-- there is now a working Background menu that shows you the currently selected background, shows you all the backgrounds currently in the game, and lets you select a new one.
Title: Re: A new engine!
Post by: CraigStern on June 27, 2018, 05:37:15 PM
-- began creating a dialogue editor. There is now a screen for it, it's possible to reach said screen via the cut scene editor, there are buttons that open windows to produce new dialogue and new scripts, said windows allow you to input the necessary parameters, and confirming after doing so creates new dialogue and new scripts, visualized onscreen as little gray boxes containing the Conversation ID or Script Name.
Title: Re: A new engine!
Post by: CraigStern on June 28, 2018, 05:12:45 PM
-- in the dialogue editor, clicking on the box for a dialogue or script now lets you edit its properties; the "add new branch or action" effect is now activated by a separate button just below the box.

-- added the OnReachingSpace dialogue trigger to the game's dialogue check system and fully implemented it in combat!

It contains the exact same parameters as before: the Y coordinate, the X coordinate, the name of the character who must trigger the conversation (if it can only be triggered by a particular character), and the army number of the character who must trigger the conversation (if it can only be triggered by a character of a particular army).

-- added the OnCharDeath and OnCharAttacked dialogue triggers to the game's dialogue check system, and fully implemented them in combat!

The first parameter of each has been changed--instead of referencing the turn number (because really, who ever used anything other than -1 for that?) it now takes the army number for whatever characters are to trigger the dialogue (by dying or by getting attacked, as the case may be). If you want to specify the triggerer using name or class instead, just leave this parameter at -1.

-- added the OnOpeningDoor, OnLockedDoor, and OnUsing dialogue triggers to the game's dialogue check system. They use the same two parameters as before, but now can take the last two parameters from OnReachingSpace as optional parameters. (Not fully implemented yet, as I haven't fully implemented opening doors and using triggered objects.)

-- implemented the r attribute for dialogue in the game. Instead of an integer, it's now just a simple boolean: false if the dialogue cannot be triggered again. If you don't use the r attribute, the game will just assume the dialogue can be triggered again over and over, ad infinitum.

-- the game now actively prevents OnReachingSpace, OnOpeningDoor, OnLockedDoor, OnUsing, OnCharDeath and OnCharAttacked dialogue from being triggered more than once in the same turn (even if it's repeatable).
Title: Re: A new engine!
Post by: CraigStern on June 29, 2018, 01:26:41 PM
-- cut scenes can now parse NewRoster tags, and will generate new rosters based on the loadIDs and num attributes they find in each.

-- the cut scene editor now has an Edit Rosters button; began work on an Edit Rosters window.

-- added the OnGrab dialogue trigger to the game's dialogue check system and fully implemented it in combat!

OnGrab contains the same parameters as before, but I've reordered them for easier usage: (1) the name of an item that must be grabbed from the sack to trigger the dialogue (important to distinguish it from other sacks); (2) the name of the character grabbing the sack (if the dialogue can only be triggered by a particular character); (3) the army number of the sack-grabber (if the dialogue can only be triggered by a character of a particular army grabbing the sack); and (4-5) the y and x coordinates from which the sack must be grabbed, if any.

-- the game now auto-replaces any ID[] tags it finds referenced in battlefield dialogue with the associated character's name.

-- during forced group introductions in camp, characters with the friendly personality trait now get a morale boost instead of a penalty (as well as a different narrative blurb).

-- adjusted object sprite positioning in battle scenes to better line up with spaces on the grid.

-- fixed a bug in which the game would not save the unityScene parameter properly for battles upon transitioning from the Daytime scene.

-- fixed a bug in which the game did not look up portrait data for generic "Either" units correctly.
Title: Re: A new engine!
Post by: CraigStern on July 02, 2018, 04:46:27 PM
Showed off the game at Indie City Games this weekend--and of course, I stumbled into something like seven different bugs while doing so. Thus, today is a bug-fixing day:


-- fixed a bug in which the game's combat AI would sometimes assign value to zero-value targets based upon damage dealt to them.

-- fixed a combat AI bug involving calculating the correct rotation direction for attack reticle patterns.

-- fixed a bug in which the character creator saved the portrait and sprite attributes for Either-gendered units incorrectly.

-- fixed a bug involving inappropriate method calls during cut scenes.

-- fixed a bug in which the game would not correctly discern all backgrounds in Resources when not in the editor. (Turns out, Unity just compiles all of the files into a giant blob, making such lookups at runtime impossible in compiled versions of the game! Lame. Changed the dynamic lookup to just a hard-coded list of backgrounds, less flexible and fancy, but it works.)
Title: Re: A new engine!
Post by: CraigStern on July 03, 2018, 02:26:05 PM
-- finished implementing the Edit Rosters window in the cut scene editor; you can now use it to set NewRoster tags for up to 9 different rosters!

-- all NewRoster tags are now properly formatted and saved with the cut scene when you save your cut scene in the editor.

-- fixed a bug in the AI which was causing the game to drastically undervalue moves that involved AOE skills targeting multiple enemies at once.
Title: Re: A new engine!
Post by: CraigStern on July 05, 2018, 04:14:35 PM
Took yesterday off for Independence Day (but still ended up spending time corresponding with artists); today, more work on the dialogue editor:

-- dialogues and scripts can now display their branches or actions (respectively), lined up in a column below (per the Telepath Tactics dialogue editor).

-- the dialogue editor now displays all dialogue and scripts already existing in the current scene when opened, complete with all of their branches/actions.

-- fixed a handful of bugs (including a particularly insidious one where the cut scene editor would load all of the dialogue and scripts from PersistentDialogue.xml, then resave them as part of the cut scene, leading to a snowball effect in which those scripts and dialogue would be re-added with every subsequent load and save of the cut scene)
Title: Re: A new engine!
Post by: CraigStern on July 06, 2018, 04:14:01 PM
-- object searches by name in the map editor's New Object window are no longer case sensitive.

-- the character creator's Inventory and Counterattacks window now has a button that will auto-generate an appropriate starting inventory and counterattack type for your character based on their masteries and their class.

-- capped unit speed at 12 in both the character creator and in the character leveling function, largely for performance reasons.

-- the character leveling function now checks for (and prevents) the acquisition of duplicate counterattack types.

-- the cut scene editor now automatically puts the cursor in the text input field when you open the Edit Narration window.

-- fixed a bug in the character creator where loading a character who was missing barks would throw an out-of-range error.

-- fixed a bug in the character creator wherein hitting New Character would not hide the character review screen from whatever character was there previously.

-- fixed a bug in the cut scene editor where the game wouldn't update the appearance (or disappearance) of frame progressions arrows after adding or deleting a frame.

-- fixed a bug in the cut scene editor where the game wouldn't update the appearance of the cut scene after hitting delete frame on the first frame in the scene, or on the last remaining frame in the scene.

-- fixed a bug in which the game would sometimes get confused by non-procedurally-generated shields in Items.xml, would treat them as procedurally generated, and then throw an error when the game couldn't find all the parameters for making proc gen shields out of them.

-- wrote some golem attack barks (which I had apparently neglected to add into the game previously?)
Title: Re: A new engine!
Post by: CraigStern on July 09, 2018, 04:55:20 PM
-- the individual characters and scenes listed for the open campaign in the campaign editor are now each individually clickable; clicking one will take you to the correct editor and automatically load whatever you clicked, allowing you to immediately begin editing.

-- you can now pan around the dialogues and scripts in the dialogue editor using the arrow keys or WASD.

-- in the dialogue editor, you can now edit the branch name, speaker name, and text in each individual dialogue branch (or, alternatively, the action type and parameters of an action) by clicking its associated box.

-- fixed a bug that was sometimes causing the dialogue editor to become trapped in an infinite loop.

-- fixed a branch numbering error in the dialogue editor.

-- fixed a ridiculous bug in which script and branch boxes within the dialogue editor would read clicks through the other UI elements which were overlaying them.
Title: Re: A new engine!
Post by: CraigStern on July 10, 2018, 04:04:41 PM
-- went through all of the script/dialogue actions I've implemented to date and catalogued them (along with descriptions of their parameters) in Actions.xml, in anticipation of putting code completion and an auto-parameter-guide into the dialogue editor. (By my count, as of this morning, we were at 44.)

-- updated the SpawnFloatingText action to take character name (or ID[] tag) for its second parameter.

-- implemented the SpawnFloatingTextAt action, which I had heretofore neglected to add. Parameters are: Text,Y coordinate,X coordinate,Color Name (optional),Frame Delay (optional).

-- implemented the PlayMusic action. One parameter: track name.

-- implemented GiveExp with a new "scale against level" parameter, allowing your experience rewards to scale up or down based upon how far from a target character level the unit is.

-- implemented FaceUnit, which behaves exactly the way the old RotateChar action did.

-- implemented FaceUnitToward, which replaces RotateCharToFace and RotateCharTowardPoint. FaceUnitToward has four parameters: the character name, the y coordinate to face, the x coordinate to face, and the name of another character to face. (The last parameter is optional; if used, it will override the coordinate parameters with the coordinates of the second named character.)

-- implemented DamageChar, which gains the new "affecting" parameter that DamageCharAt received.

-- added support for searching by ID[] tag in the Nighttime and Cut Scene scenes.
Title: Re: A new engine!
Post by: CraigStern on July 11, 2018, 02:35:10 PM
-- added a list of the most commonly used special characters in the "text" field for the Edit Branch window in the dialogue editor.

-- created plus and minus circular buttons for use in the dialogue editor.

-- created a little UI widget for the Edit Branch window in the dialogue editor that can be used to display actions and replies used in the branch; little plus and minus buttons in each widget will eventually allow you to remove or add the action or reply in the slot.

-- the dialogue editor now displays the current actions and replies (up to 6 of each) in the current branch when the Edit Branch window is opened.
Title: Re: A new engine!
Post by: CraigStern on July 12, 2018, 05:34:10 PM
-- received the first of the new cut scene backgrounds: the forest!

-- in the dialogue editor, the plus and minus buttons in the Edit Branch window's action and reply slots now actually add and remove actions and replies from their associated dialogue branch.

-- added descriptions to each of the actions listed in Actions.xml.

-- implemented NextScene.

-- implemented NewScene. It has one parameter: the name of the scene to load.

-- implemented AddObjective and RemoveObjective. Each has one parameter: the text of the objective to add/remove from the list of objectives shown to the player.

-- implemented MoveUnitBy, which replaces MoveCharBy. Same parameters: character name, spaces to move along the y-axis (negative integers move up), and spaces to move along the x-axis (negative integers move left).

-- implemented LearnSkill, which replaces the old TeachAttack and TeachAttackTemp actions. Three parameters: character name, skill name, and an optional third true/false parameter telling the game whether the skill granted lasts only for the current battle. (Delimit skills with a | in the second parameter to learn multiple skills at once.)

-- implemented IfGoneGoTo. First parameter: character name. Second parameter: branch number. Used in battle, this takes account of whether the named character is on the battlefield; used outside of battle, it checks whether the named character has a Wound Level of 0 (i.e. isn't out of commission from having been brought to 0 health or less) and is in the current roster. If the answer is no, the game goes to the specified dialogue branch.

-- implemented IfGoneRun. First parameter: character name. Second parameter: script name (or names, each delimited by a |). Used in battle, this takes account of whether the named character is on the battlefield; used outside of battle, it checks whether the named character has a Wound Level of 0 (i.e. isn't out of commission from having been brought to 0 health or less) and is in the current roster. If the answer is no, the game runs the specified script(s).

-- you can now change a unit's Sprite Set via SetStat; doing so in battle now automatically changes the unit's appearance to match its new sprite set.

-- changing a unit's Army via SetStat in battle now automatically changes the unit's color to match the new army.

-- fixed a bug in which the game would throw null errors if branch 0 of a dialogue called EndConvImmediately.

-- fixed an annoying z-sorting bug that would sometimes affect sprites in battle.
Title: Re: A new engine!
Post by: CraigStern on July 13, 2018, 03:10:09 PM
-- in the dialogue editor, clicking the main portion of the Edit Branch window's action and reply slots now open a window to edit the clicked-upon action or reply. Any edits are saved to the dialogue upon confirmation.

-- implemented the Run reply type. One parameter: script name (or multiple script names delimited by | characters) to be run when the reply is clicked. (Note that your chosen script is going to need actions like GoTo or LastBranch if you want it to actually change the dialogue branch!)

-- changed Actions.xml to ActionsReplies.xml. Added all current reply types to the file, with descriptions and parameters.

-- typing in the Action Type or Reply Type field of the Edit Action / Edit Reply windows will now produce little buttons right below the input field that predict what you're in the process of typing. Clicking one of these buttons will autocomplete the text for you, provide a description of the chosen action or reply, and fill in the parameters field with placeholder values letting you know what parameters you need (if any).
Title: Re: A new engine!
Post by: CraigStern on July 16, 2018, 05:31:58 PM
-- received the nighttime variation on the Forest background art from the background artist.

-- in the dialogue editor, you can now delete dialogues and scripts, as well as individual branches / actions belonging thereto. The remaining dialogues / scripts / branches / actions will shift to fit any gaps left by the deletion.

-- added support for the special character -BRANCH:- into the game. This replaces BNAME[], and is treated as the number of whatever branch within the current, active dialogue happens to have the branch name appearing after the colon. (Useful for the "GoTo" actions, or for storing a particular branch number as a VAL in advance.)

-- added support for the brand-new special character -PICK:- into the game! This allows you to easily make the game select at random from among multiple strings, each delimited by a | character. For example:

Bob Speakington/You are -PICK:a total jerk, you know that?|a real piece of work, pal.|the absolute worst!-

This can produce dialogue for Bob Speakington consisting of You are a total jerk, you know that? or You are a real piece of work, pal. or You are the absolute worst! Each option in -PICK:- has an equal chance to be chosen; to weight one option more than the others, simply place it in the list one or more additional times. For instance:

<Action>GenerateUnit/1,-PICK:Axefighter|Axefighter|Bowman|Spirit-,5,RANDOM,,5,4,Left</Action>

This will generate an enemy Axefighter, Bowman, or Spirit, with a 50% chance of an Axefighter and a 25% chance for each of the other two.

(Note: avoid using hyphens in the strings you're making the game pick from within this special character--they're likely to cause an error.)

-- fixed a bug in which the game would not process the text within individual dialogue replies, and would therefore ignore special characters used there.
Title: Re: A new engine!
Post by: CraigStern on July 17, 2018, 04:37:43 PM
-- added up and down arrow buttons to the ends of actions and replies in the Edit Branch window of the dialogue editor; clicking them now shifts around the position of actions or replies, letting you change their order.

-- added up and down arrow buttons by the top-right of branches and actions in the dialogue editor; clicking them now shifts around their position, letting you change their order.

-- you can now zoom in and out in the dialogue editor using the mouse wheel.

-- improved the information displayed in the delete confirmation window in the dialogue editor.

-- fixed a bug in which deleting a dialogue branch or a script's action in the dialogue editor wouldn't update the branch/action count in the box at the top of the dialogue/script's column.

-- fixed a graphical formatting issue in the Edit Branch window of the dialogue editor.
Title: Re: A new engine!
Post by: CraigStern on July 18, 2018, 04:56:50 PM
-- the cut scene editor now has a window where you can assign dialogue to the current frame of a cut scene.

-- on opening, the cut scene dialogue assignment window populates buttons with each of the dialogues present in the scene; mousing over one shows a preview of the first two branches of that conversation, and selecting one adds it to the current frame.

And with that, I have finally completed all basic functionality for the cut scene editor!

-- upon closing the dialogue editor, the scene now gets updated with all of the new and edited dialogue and scripts.

-- added the dialogue editor into the map editor as well, so that you can edit scripts and dialogue for both cut scenes and regular battles inside their respective editors.

-- fixed a bug in the dialogue editor in which the branch / action counts for a primary dialogue / script box would not update upon adding new branches / actions via the Add button.

-- I changed the syntax of the special character -PICK:- to PICK{}. This change will allow the usage of both hyphens and all non-PICK{} special characters within any given instance of PICK{}. The examples above would now be written:

Bob Speakington/You are PICK{a total jerk, you know that?|a real piece of work, pal.|the absolute worst!}
<Action>GenerateUnit/1,PICK{Axefighter|Axefighter|Bowman|Spirit},5,RANDOM,,5,4,Left</Action>
Title: Re: A new engine!
Post by: CraigStern on July 20, 2018, 04:06:16 PM
-- the inventory and counterattacks window in the character creator now has a sub-window you can open to display all non-generated items available in the current campaign. You can then flip between pages and mouse over each item to inspect their properties, and click to add them to your character's inventory auto-magically! (This way, you won't have to memorize all the item names, or have Items.xml open in a separate window just to adjust character inventory within the editor.)

-- added this item sub-window to the Unit Properties window in the map editor as well, for purposes of more easily giving units and destructible objects items in that particular scene.

-- the game now actually tries to find the named music track specified in the scene's musictrack attribute and play it when you load a battle or cut scene.

-- added null-checking to the playMusic() and playSound() methods in the game; this will prevent the game from crashing if the music or sound you try to play isn't found.

-- fixed a typo in the image names for regular and plated non-generated boots.
Title: Re: A new engine!
Post by: CraigStern on July 23, 2018, 04:30:15 PM
-- created vertical variants of the door, gate, and portcullis 3D objects.

-- created directional variants for the CastleWall, CaveWall, and HouseWall object sets.

-- halved the maximum camera pan speed to improve the feel of screen edge panning during combat.

-- fixed a bug in which the character screen displayed poison resistance, shadow resistance, and light resistance in the wrong fields.

-- fixed a bug in which the game would reset the objects shown in the New Object window of the map editor every time you opened it, even if you'd last left them narrowed by a particular search term. (This fix makes certain activities, like placing different segments of wall down, a lot quicker and easier.)

-- fixed a typo in one of the Flirtatious attack barks.

-- fixed a typo in the "dance" variant of the Joke nighttime activity.
Title: Re: A new engine!
Post by: CraigStern on July 24, 2018, 05:08:29 PM
-- winning a battle now correctly progresses the player to the next scene, as specified in the battle's nextbattle attribute.

-- the game now applies impact damage when units collide from a knockback skill. I've simplified the impact damage formula a bit from TT: the unit getting hit now simply takes Crush damage equal to 33% of the maximum health of the unit that got shoved or thrown into it (but never less than 5).

-- added dialogue trigger information to ActionsReplies.xml.

-- starting to type in a dialogue trigger in the dialogue editor now provides predictive text results in the same fashion as actions and replies; clicking a result yields the trigger's parameter information and general description.

-- if one of the predictive text matches is a 100% match, the editor now auto-selects it...but only if the parameters field is empty. (It does not do this if the parameters field has text because selecting a predicted result clears the parameters field.)

-- fixed a bug in which the game would crash when trying to proceed to the next scene from Nighttime after loading into Nighttime from a saved game.
Title: Re: A new engine!
Post by: CraigStern on July 25, 2018, 04:10:50 PM
-- got a new background: camp!

-- implemented the new camp background in the Nighttime scene; updated scene UI to work with the new background.

-- you can now access and use the Reserve Supplies screen in the Daytime scene, outside of battle.

-- wrote a new variant on the Perform Music nighttime activity for Jokester characters.

-- programmed functions for managing faction reputations.

-- fixed a bug in which certain variable values (such as the number of days passed) would be carried over when quitting an active game and starting a new game.

-- fixed a bug in which the game would sometimes sign a character up for a partnered activity when they couldn't meet the requirements for any of the corresponding activity narrations.
Title: Re: A new engine!
Post by: CraigStern on July 26, 2018, 05:07:14 PM
-- the dialogue editor now supports duplication of branches (in dialogue) or actions (in scripts); just press the plus button on the right side of the branch/action box, and the corresponding branch or action will be duplicated, then added to the bottom of the dialogue/script.

-- the dialogue editor now displays a message at the top of the screen when you move a branch or a script action to make it more clear what you did.

-- added mouseover tooltips to all of the buttons attached to each dialogue, script, branch, and action box in the dialogue editor.

-- added mouseover tooltips to all of the non-skill action bar buttons in battle (Talk, Grab, Rotate, End Turn, etc.)

-- fixed a null error caused by clicking the Talk button at inappropriate times in battle.
Title: Re: A new engine!
Post by: CraigStern on July 27, 2018, 04:16:55 PM
-- the game can now import level data for lights! These use the <Light> tag, as before--now, however, their info is contained in attributes, making them human-readable. Other than coordinates and type, their attributes are float values; the only type currently supported is "Point Light." Intensity supports values of 0-8.

This, for instance, will produce a medium-strength white-colored Point Light at 4 , 4:

<Light type="Point Light" size="1.0" intensity="4.0" y="4" x="4" A="1.0" R="1.0" G="1.0" B="1.0"></Light>

-- the game successfully loads point lights when the level loads, with all of their properties adjusted as specified.

-- implemented the Global Lighting level condition. This takes either 1 or 5 parameters; the first parameter can be either a preset (currently supported: Night, Overcast, Sunset, Indoors, and Cave) or a float value for lighting intensity. The other four parameters are A, R, G, and B values, in that order.

-- completed directional variants for the FenceStone and FenceWood object sets.

-- added action Recruit (previously called RecruitChar); adds a character to a specified roster. One parameter: the character's loadID*; second, optional parameter: the roster number to be recruited to (if not specified, the unit is recruited to the default roster: roster 0.)

-- added action Dismiss (previously called DismissChar); looks for a character that has been added to a roster before; if it finds them, it removes them. One parameter: the character's loadID*; second, optional parameter: the roster number to be dismissed from (if not specified, the unit is dismissed from every roster in which they appear.)

-- added action Transfer (previously called TransferChar); looks for a character that has been added to a roster before; if it finds them, it removes them from one roster and places them on another. Parameters: the character's loadID*, the roster number to be transferred from, and the roster number to be transferred to.

-- updated ActionsReplies.xml with descriptions and parameter guides for the new actions.

-- fixed erroneous positioning of basic cave terrain tile.

-- fixed a bug in which Unity was wiping out the rotation data on directional variations for destructible objects upon spawning them.

-- fixed a bug in which the game would not re-save saved data for characters not appearing in the previous battle.


* if the character has been spawned in battle before, you can substitute its name or an ID[] tag for the loadID--but if it hasn't, this won't work.
Title: Re: A new engine!
Post by: CraigStern on July 30, 2018, 03:39:51 PM
Got some feedback at Indie City Games this weekend, which I'll be using to make improvements going forward!

-- one of the things I noticed is that people had a tendency to exit the editors without saving their work. The map editor, cut scene editor, and character creator now track whether you've made changes since your last save, and each pop up a "do you want to save before exiting" window if you try to exit with unsaved changes.

-- pressing the New Map or New Cut Scene buttons in the campaign editor will now automatically act as though you'd clicked the New Map/New Scene buttons in-editor after you're taken to each of these editors (instead of making you find and then click New Map/New Cut Scene again within each editor after being taken there).

-- created the "Fill" tool in the map editor; changes all of the tiles on the map to one terrain type.

-- implemented global lighting in the map editor. When loading a map with a global lighting condition (or adding a new one to the current loaded map), the lighting in the editor automatically changes to match it.

-- received a new sunset variant on the camp background.

-- you can now access the reserve inventory when returning to camp in the evenings.
Title: Re: A new engine!
Post by: CraigStern on July 31, 2018, 03:57:22 PM
-- global lighting is now simulated for 2D sprites on the battlefield via color tints (this same simulation is applied in the map editor as well so you can preview the level's lighting effectively).

-- added the Lava (previously LavaDark) global lighting preset into the game.

-- received a new nighttime variant on the camp background.

-- fixed a bug in which the game had stopped fading out characters whose turns were over.

-- fixed a bug in which the game would fail to load the list of campaigns in the New Game menu unless it could find the custom campaigns directory.

-- when exiting a scene but there is no next scene specified, instead of locking up, the game will now simply return to the title screen.
Title: Re: A new engine!
Post by: CraigStern on August 01, 2018, 05:45:19 PM
-- rewrote the default Introduction.xml cut scene that every new campaign starts with so that it serves as an effective mini-tutorial to using the cut scene editor.
Title: Re: A new engine!
Post by: CraigStern on August 02, 2018, 04:50:50 PM
-- added weather effects to the game! They appear both in battle and in the map editor (as with global lighting, setting a Weather condition in map settings and confirming the change will make the map immediately preview the new weather). Weather effects currently supported: Rain, Snow, Heavy Rain, Heavy Snow, and Ash.

-- added the selfLight attribute to premade units; this functions like the old lighting attribute, but it has a few more properties you can play with. Delimited by forward slashes, the properties of selfLight are: size, intensity, R value, G value, and B value. All of these are floats, and behave the exact same way as free-floating point lights.

Lit campfire objects, for example, have this:

selfLight="2/1.5/1.6/1.2/0.7"

That's a standard smallish light, medium-low intensity, and reddish-orange in color.
Title: Re: A new engine!
Post by: CraigStern on August 03, 2018, 01:00:58 PM
-- adjusted selfLight values for different lit destructible objects.

-- fixed a bug in which self-lit character and objects would nonetheless get the global lighting tint applied to them (resulting in visual oddities like darkened campfires).

-- fixed a typo in the selfLight attributes for spirits and lit destructible objects.
Title: Re: A new engine!
Post by: CraigStern on August 05, 2018, 12:19:15 PM
- gave artist feedback.

- fixed a big in which the game would not save items transferred to characters from the reserve supplies in the shop scene.

- fixed a null error bug I accidentally introduced into the unit loading routine when I implemented unit self-lighting.
Title: Re: A new engine!
Post by: CraigStern on August 06, 2018, 02:14:45 PM
-- new dialogue/script action supported: LoadConv. This looks for a particular dialogue--if the game finds it, it immediately loads the specified dialogue, abandoning the existing dialogue. This should allow the creation of multiple independent dialogues that can all link to one another in various ways.

One parameter: the Conv ID of the dialogue to load.

-- cut scenes now have a "darkener" image that sits behind narration text to make it easier to read against lighter backgrounds. The game automatically detects if there is any non-white-space text in the current narration frame, and makes the darkener visible if there is; and hides it if there isn't.

-- standardized the UI a bit more between scenes, adding in the info bar from the top-left of the nighttime scene into the shopping and recruitment scenes.

-- updated the info bar with food and aura icons that describe themselves with tooltips upon mouse-over.

-- the shop category buttons now pop up with tooltips on mouseover.

-- added mouse-over tooltips to the Options and Reserve Supplies buttons in the shop and recruitment scenes.

-- fixed a few small UI issues in the character creator.

-- fixed a bug in which the character creator would not clear its "unsaved changes" flag after saving a character.

-- fixed a bug in which characters would be tinted black by default if a battle didn't specify a Global Lighting variable.

-- fixed a bug in which the game would freeze upon trying to run OnLoaded-triggered dialogue in battle. OnLoaded dialogue now triggers just slightly before OnTurn,0 dialogue.
Title: Re: A new engine!
Post by: CraigStern on August 07, 2018, 03:42:52 PM
Focused on further UI improvements today!

-- after a cut scene frame with narration finishes typing out the narration text, the game will now wait a few seconds and then animate some text in the bottom-right of the screen saying "Click to continue." (You would be amazed how many new players need this prompt in order to avoid getting stuck.)

-- after a dialogue window finishes typing out the text for its branch, if there are not multiple reply options, the game will now wait a few seconds and then animate some text in the bottom-right of the dialogue window saying "Click to continue." If there are multiple reply options, the game will now wait a few seconds and then animate some text in the bottom-right of the dialogue window saying "Click a reply."

-- added new hotkeys to the map editor: Shift + S for save, and Shift + L for load.

-- fixed a graphical issue that prevented the action type / reply type from showing up in their respective slots in the Edit Branch window of the dialogue editor on some displays.

-- fixed a bug in which the game would sometimes open the New Map window in the map editor when doing things in the dialogue editor.

-- received the new Clearing background! We now have 6 completed backgrounds; as many as appeared in the entirety of Telepath Tactics. :)
Title: Re: A new engine!
Post by: CraigStern on August 08, 2018, 04:56:42 PM
-- updated the Reserve Supplies screen with tooltips showing character name, class, and level when you mouse over a character's personalized inventory button.

-- the character screen now shows unit morale and explains what it does.

-- added New Scene, Save Scene, and Load Scene hotkeys to the cut scene editor; mousing over the buttons for these now displays the appropriate hotkey in a tooltip.
Title: Re: A new engine!
Post by: CraigStern on August 09, 2018, 03:20:25 PM
-- the map and cut scene editors now warn you first if you try to exit a map/cut scene without setting the Next Scene property. If you opt not to exit, the editor will take you straight to the field where you set Next Scene.

-- the map editor now supports painting and deleting free-standing point lights on maps.

-- clicking an existing free-standing point light while in New Light mode opens a properties window where you can change the properties of that light.

-- the map editor now successfully loads and saves free-standing point lights in maps.

-- fixed a bug in which the game would not notice unsaved changes from changes made in the Cut Scene Editor's scene settings window.
Title: Re: A new engine!
Post by: CraigStern on August 10, 2018, 03:12:01 PM
Today, I updated Unity to the latest version. (Up to this point, I've been building the game in Unity 5.5, now just shy of 2 years out-of-date!)

With the project now reimported for the new version, things are mostly working well, and a few things are actually working better--text, especially, looks noticeably sharper in the new Unity rendering system! A few things did break in the transition, but the only truly significant one seems to be the character sprite animations. Of all the systems for Unity to break, this is actually one of the better ones, as I never actually finished this up (and I've been needing to redo it with a new approach for a while now anyway).

-- fixed the character screen closing function, which Unity broke during the reimportation process for some reason.

-- redid all of the tile textures, as the shaders upon which many of them depended no longer worked the same way (or at all) upon reimportation.
Title: Re: A new engine!
Post by: CraigStern on August 14, 2018, 03:32:14 PM
Spent today looking into Amazon fulfillment services for True Messiah; currently awaiting a fix on the palette swapping shader I'm using from the developer.
Title: Re: A new engine!
Post by: CraigStern on August 15, 2018, 04:05:05 PM
-- added a Sell pane to the shop screen! This fills the shop screen with items in your reserve supplies. The selling price for an item is 50% of the item's value; if the item has a maxUses attribute, then the selling price is further multiplied by the fraction of usesRemaining on the item relative to the item's maxUses.

(For example: a sword that would normally cost 100 aura to buy would sell for 50 aura if it hadn't been used--but with 20 uses remaining out of 40 max uses, it would sell for 25 aura--50% of 100 aura, times 20/40.)

-- tweaked the formatting of multi-line names in item mouseover tooltips to make them look more aesthetically pleasing.

-- added two new weather types to the Weather map condition: Blizzard and Storm (which are basically just even more extreme versions of Heavy Snow and Heavy Rain, respectively).
-- fixed a bug in the weather system in which changing the weather would immediately switch the behavior and appearance of the previous weather's particles still visible onscreen, not just the new particles emitted going forward.

-- fixed a really frustrating bug in which the game kept rendering the reserve inventory screen non-interactable for seemingly no reason.

-- got the fix for the palette swapping plugin; sprites are displaying correctly again!
Title: Re: A new engine!
Post by: CraigStern on August 16, 2018, 03:53:24 PM
-- created 13 alternate greetings for the shopkeeper in the in-game shop, to be selected at random every time you visit.

-- created the greeting for the recruiter in the recruitment office.

-- created the initial conversation with the arena manager in the arena.
Title: Re: A new engine!
Post by: CraigStern on August 17, 2018, 05:15:05 PM
-- created an editable XML data format for shops so that you can create shops that are distinct from one another (as opposed to the current setup, in which there is a single, hard-coded shop).

This is how the game's default shop ("Agarwal's") looks in XML form. The cost to buy any given item is unchanged from the item's default value; the base sale price is 50% of an item's default value; item quality varies between terrible (0) and really good (4); and food costs 3.0 aura per unit, rounded to the nearest whole number. This shop has 14-19 randomly chosen weapons, 14-19 randomly chosen armor pieces, 2-5 randomly chosen pieces of Misc. equipment, food in varying quantities, and all of your basic consumables every time you visit. On any given visit, it also has a 50% chance of a battle primer; a 20% chance of 1-5 advanced weapons; a 20% chance of 1-5 pieces of special armor; and a 20% chance of an orb:

<Shop costMultiplier="1.0" baseSalePrice="0.5" itemQuality="2" qualityVariance="2" foodCost="3">Agarwal's
<Stock type="Weapons" materials="Bronze/Iron" num="14-19" chance="100">GEN:Axe,GEN:Bow,GEN:Crossbow,GEN:Knife,GEN:Lance,GEN:Mace,GEN:Spear,GEN:Sword,GEN:Wrench</Stock>
<Stock type="Weapons" materials="Bronze/Iron" num="1-5" chance="20">GEN:Flail,GEN:Halberd,GEN:Javelins,GEN:Longbow,GEN:Rapier,GEN:Throwing Axes</Stock>
<Stock type="Armor" materials="Leather/Boiled Leather/Wood/Bronze" num="14-19" chance="100">GEN:Helm,GEN:Winged Helm,GEN:Boots,GEN:Plated Boots,GEN:Vest,GEN:Mail,GEN:Plate,GEN:Small Shield,GEN:Kite Shield</Stock>
<Stock type="Armor" materials="Leather/Boiled Leather/Wood/Bronze" num="1-5" chance="20">Armored Plating,Light Plating,GEN:Main Gauche,GEN:Wing Armor</Stock>
<Stock type="Consumables" num="0" chance="100">Adrenaline Pills,Apple,Bandages,Caffeine Pills,Eye Drops,Focus Pills,Lead Ointment,Splint,Thermal Paste,Whet Stone,Wine</Stock>
<Stock type="Consumables" num="1" chance="50">Novice Battle Primer,Novice Battle Primer,Novice Battle Primer,Novice Battle Primer,Novice Battle Primer,Novice Battle Primer,Intermediate Battle Primer,Intermediate Battle Primer,Intermediate Battle Primer,Expert Battle Primer</Stock>
<Stock type="Misc." num="2-5" chance="100">Binoculars,Bowman's Gloves,Fur-Lined Cloak,Grapple Chain,Lockpicks,Shadow Cloak,Steamthopter</Stock>
<Stock type="Misc." num="1" chance="20">Blood Orb,Blood Orb,Blue Orb,Energy Orb,Energy Orb,Orange Orb,Power Orb,Power Orb,Swift Orb,Foreseeing Orb,Crystal Orb</Stock>
<Stock type="Food" num="0" chance="100">1,5,10,25,100</Stock> <!-- num="0" means "generate each item listed exactly once" -->
</Shop>


-- created new script action: ShowShop. This grabs the XML shop data for the specified shop, generates stock for it, and pops up the shop interface. (Note that this currently only works in cut scenes--calling ShowShop in battle will do nothing.)

-- fixed a bug in which the game would screw up if you left certain parameters blank in an AddPortrait action.
Title: Re: A new engine!
Post by: CraigStern on August 20, 2018, 05:07:39 PM
-- migrated the shop interface to the "Cut Scene" Unity scene so that it can be used as part of custom campaign cut scenes.

-- finished implementing the AddPortrait action in cut scenes.

-- the options menu is now accessible within cut scenes.

-- added new ShowInfoBar and HideInfoBar actions; these cause the info bar (the thing that shows the player's current aura and food, as well as the current date) to appear and disappear from the top-left of the screen during cut scenes.

-- added predictive text entries and descriptions for the new actions.

-- the dialogue menu no longer shows a "Click to Continue" message on 1-reply branches when it's opening a shop interface.

-- fixed a bug in the way that the game was capturing the shop name from within <Shop> tags.

-- received the Ship cut scene background!
Title: Re: A new engine!
Post by: CraigStern on August 21, 2018, 05:58:37 PM
-- began working on a Shop Creator within the cut scene editor.
Title: Re: A new engine!
Post by: CraigStern on August 22, 2018, 04:50:32 PM
-- the cut scene editor now successfully loads and saves shops found within a cut scene.

-- the cut scene editor now successfully displays all shops in the cut scene via the Edit Shops window, and previews their properties on mouseover.

-- when the game creates XML files, it now adds additional line break and tab formatting to produce much more human-readable files.

-- you can now create a new shop (or edit an existing shop) via the Edit Shops window in the cut scene editor. Everything except editing and manipulating stocks is currently working.
Title: Re: A new engine!
Post by: CraigStern on August 23, 2018, 04:00:49 PM
-- the cut scene editor now supports adding, removing, editing, and swapping around stocks of items for any given shop you're editing. The stock editing window comes with its own sub-window showing every item existing in the campaign for you to choose from when deciding which items the shop will stock; you can click each item to add it. (Unlike the version of this sub-window found in the character creator and map editor, this one supports placing procedural equipment!)

-- created "shadow" versions of the images for all types of procedurally generate-able equipment, used in the above-mentioned item sub-window.

-- all custom campaigns now come with a single example shop named "Default Store" in their Introduction.xml file, ready to use in the campaign (or simply use as an example).

-- fixed a bug in which the cut scene editor would sometimes trigger menu hotkeys while one was typing things into input fields.
Title: Re: A new engine!
Post by: CraigStern on August 24, 2018, 04:55:18 PM
-- added the game's first-ever cut scene Condition: Calendar. It comes with two parameters: (1) an operation to change the number of days passed (consisting of an operator, a colon, and the amount); and (2) true or false, telling the game whether or not to automatically advance to the next scene after displaying the calendar. For instance, this will call up the calendar while advancing in-game time by a single day, and then proceed to the next scene:

<Condition>Calendar,+:1,true</Condition>

-- the item box in the edit stock window for the shop editor now auto-sorts the items based on the stock type. (If it's a Weapons stock, for example, it'll sort the items so that weapons all appear first.)

-- the item box in the edit stock window no longer lists items with a useableWith of "automatic," as those are items specifically meant to trigger scripts when picked up on the battlefield (e.g. coin sacks).

-- created a missing "shadow" graphic for generated plated boots.

-- tweaked a bunch of item descriptions to better fit within their tooltips.
Title: Re: A new engine!
Post by: CraigStern on August 27, 2018, 05:43:45 PM
-- implemented the AddTag script action. I rewrote this one so that it takes a single character name (or ID[]) parameter, followed by the tag written out just as you'd normally write it anywhere else: namely, with the tag name and any tag parameters, delimited by commas. For instance, this will stick a TargetValue,0.5 tag on the character Bob Sneakyface:

AddTag/Bob Sneakyface,TargetValue,0.5

In this way, AddTag now supports an arbitrary number of parameters, depending entirely on how many parameters the tag you're using requires! (Note that AddTag will work even if the target character is not present on the battlefield, just so long as the targeted character appeared in the player's army in a previous scene!)

-- implemented the RemoveTag script action. This removes all tags matching the parameters provided, but ignores tags added via character equipment. Thus, this will remove all TargetValue tags from Bob Sneakyface...

RemoveTag/Bob Sneakyface,TargetValue

...except for those which are granted to him via his equipment (such as an equipped Shadow Cloak).

-- stock slots in the shop editor window within the cut scene editor now display the % chance to appear alongside their categories, making it easier to keep track of what's what.
Title: Re: A new engine!
Post by: CraigStern on August 29, 2018, 04:39:58 PM
-- got a new background; the outdoor market! It's now been implemented for the daytime selection scene. (See screenie below.)

-- the game now saves and loads the current campaign's start date in addition to days passed, allowing campaigns that begin at differing points of time.

-- I've removed the SetDate action from the game and replaced it with two separate actions:

    -- SetStartDate lets you change the start date for the campaign from the default date (the 1st of Unimensis, 4452) to something else. Takes three parameters, each of them an integer: (1) day (2) month (3) year.

    -- GetDate lets you grab the day, month, and year for any point in time relative to the start date, then save it under the custom string variables CalendarDay, CalendarMonth, and CalendarYear. Takes one parameter, an integer: number of days away from the start date (positive for number of days afterward, or negative for number of days prior to it).

-- new special character: -DAYSPASSED-. In dialogue, actions, replies, etc. the game will automatically replace this with the current number of days that have passed in the campaign since it began. (If no days have passed yet, this will be 0.)

-- improved the appearance of pop-up text in combat; the text now looks much more crisp.

-- the options button is now hidden in cut scenes when auto-advancing after showing the calendar.

-- the game no longer shows the previous day during the initial calendar animation unless time is actually passing via the Calendar condition; if not, it simply shows the current day rising up from the bottom of the screen.

-- added functionality to the Resume and Quit buttons in the cut scene's options screen.

-- fixed a bug in which the game would always display a single day passing during calendar cut scenes (and not even the right ones).

-- fixed a bug in which the info bar would sometimes appear in cut scenes without having been summoned via the ShowInfoBar action.

-- fixed a number of typos.
Title: Re: A new engine!
Post by: CraigStern on August 30, 2018, 04:22:09 PM
-- created some nice, smooth appear and disappear animations for the darkener behind narration text.

-- the game now smoothly transitions between backgrounds when they change during cut scene narrations, fading from one into the other.

-- new action: NewBackground. Initiates a cut scene background transition independent of any narration. It takes one parameter: the name of the background to shift to. (If no valid background name is used, the background will shift to darkness instead.)

-- implemented access to the reserve inventory screen in cut scenes.

-- fixed a bug in which certain UI animations would start to loop before transitioning to a new state.


All in all, I'm feeling quite good about the integration of shops into cut scenes; the combination of cut scene dialogue and background-setting functionality in concert with the new shop UI results in a very solid experience.
Title: Re: A new engine!
Post by: CraigStern on August 31, 2018, 12:29:29 PM
-- added support for memories on characters. (A memory records an event that the character considers significant; when and where it happened; with whom; and an emotion the character associates with the memory, like happiness or sadness.)

-- proc gen characters now automatically get a memory of the day they're recruited.

-- all characters now automatically get a memory when they first meet an ally, when they give or receive a nickname, when they fall in battle, when they accidentally injure an ally with an attack, and when they defeat an enemy who is more than 5 levels higher than them.

-- when editing the background for a frame in the cut scene editor, if the background wasn't set in the current frame but there's one carrying over from an earlier frame, it now shows the carry-over background in the "current background" swatch, but partially faded out.

-- added in the remaining completed backgrounds to the cut scene editor.

-- wrote a bit more character dialogue.
Title: Re: A new engine!
Post by: CraigStern on September 04, 2018, 05:16:04 PM
-- new script action: AddMemory. This lets you give a character a custom memory. Six parameters: (1) character name (or ID[] tag), (2) what the memory is of, (3) what emotion the character feels when recalling the memory, (4) where the remembered event occurred, (5) who the memory concerns, and (6) the days passed relative to the campaign start date when the remembered event occurred. Parameters (3-6) are optional.

So, for example, if you want to give the character Jenny McDougal a memory of being attacked by wolves in the woods outside her home exactly two months before the start of the campaign:

AddMemory/Jenny McDougal,was attacked,anxious,the woods outside her home,a pack of wolves,-56

("What is even the point of this?" you might ask. Baaaaasically, it's gonna tie into a system that I'm hoping to add in later!)

-- spent hours replacing all of the item tooltips in the game yet again--this time, to accommodate 3x longer item descriptions!

-- fixed a bug in which the reserve supplies would not update to reflect items newly bought or sold while shopping.

-- fixed a thing where I accidentally deleted all instances of the character screen and level-up screen from every part of the game. (Oops.)
Title: Re: A new engine!
Post by: CraigStern on September 05, 2018, 05:03:13 PM
Gave artist feedback. Also:

-- new mechanic: when skills force a character's Energy below 0, the excess drain gets rolled over into regular Health damage. (For instance: a spirit with a psy stat of 10 uses Drain, dropping Bob's Energy by 20 points. Let's say that Bob had 10 Energy beforehand--it goes from 10 to -10. Since energy can't go below 0, he takes the 10 rollover points as damage to his Health.)

-- fixed a bug in the character creator wherein certain fields wouldn't be reset properly when hitting New Character after loading an existing character.

-- fixed a null error in the dialogue editor that occurred when editing a new script action that you'd just created.

-- fixed a bug in the dialogue editor in which the predictive text and parameter autocomplete feature would disregard actions with identically named analogues among the game's triggers or replies (most prominently, Run).

-- got a new background!
Title: Re: A new engine!
Post by: CraigStern on September 06, 2018, 05:03:25 PM
-- I finally added in support for onDeath skills! These are the skills a unit automatically uses upon death, centered on itself (such as the Explode skill which Charges unleash on reaching 0 health). However, new to this engine: units can have more than one onDeath skill! (Just delimit each onDeath skill with a forward slash.)

-- got 6 new portraits from Matt Pichette for villagers native to the isle of Dese.

-- got 3 new female human hairstyles: side ponytails, a face-framing bob, and layered mid-length wavy hair!

-- got 4 new male human mouth types, each sporting a new style of mustache!

-- generated positional portrait data for the new villagers, hair styles, and mouths.

-- fixed a bug in which particle effects would sometimes render behind things that are actually behind them on the battlefield.

-- fixed a bug which caused created objects to spawn on the battlefield with a facing direction other than None.

-- fixed a bug in which the game would try to save objects the player created on the battlefield at the conclusion of a battle.

-- fixed some minor UI display issues in the Character Creator and the recruitment scene.
Title: Re: A new engine!
Post by: CraigStern on September 07, 2018, 03:27:38 PM
-- created a proper Arena scene to mediate between visiting the Arena and fighting an appropriate battle.

-- embellished the introduction with more detail and appropriate background transitions.
Title: Re: A new engine!
Post by: CraigStern on September 10, 2018, 04:34:17 PM
-- new script actions: IfTagGoTo and IfTagRun. These check to see if a specific character or army possesses a tag type--if the game finds that they do, it then goes to the specified branch/runs the named script. Parameters: (1) character name (or ID[] tag), or army number; (2) tag type; (3) branch number/script name; and optionally, (4) the tag's first parameter, if one exists and you want to use it to narrow things down.

-- items now support mastery requirements that can be met by several different masteries! (To have an item that can be used by units with one of several masteries, delimit the masteries in masteriesReq with a forward slash.)

-- extended the range of possible quality levels up to 10 for generated items (thereby supporting values of 0 through 10).

-- new script action: GiveItem. Gives a character an item, or else spawns it in a particular roster's reserve supplies. Parameters: (1) character name (or ID[] tag), or roster number; (2) item name; (3) material; (4) quality level; and (5) auto-equip. The last 3 parameters are optional, with 3 and 4 being specifically for generated equipment. (Note that if this is used for a named character in battle, it won't work unless the named character is present on the battlefield.)

-- new script actions: IfItemGoTo and IfItemRun. These check to see if a specific character or army possesses a named item--if the game finds that they do, it then goes to the specified branch/runs the named script. (This action actually checks for whether there is an item name containing the search term, so searching for Iron Boots will return true if the character has, for example, "Superb Iron Boots.")

Parameters: (1) character name (or ID[] tag), or army number; (2) item name; (3) branch number/script name; and optionally, (4) if the item must be equipped for it to count (true or false). If the fourth parameter is left blank, the game will treat it as false.

-- fixed a bug in the game's script action queueing-and-execution system in which it would fail to execute actions queued up after switching to a new dialogue branch mid-queue.

-- fixed a small but crucial typo in the ActionsReplies parameters guide for SetVal.

-- added missing ActionsReplies documentation for the AddTag action.
Title: Re: A new engine!
Post by: CraigStern on September 11, 2018, 05:07:20 PM
-- reworked the dialogue screen layout a bit to avoid unwanted overlap between character dialogue portraits in the corners of the screen and reply options dropping down from the dialogue window.

-- did more work implementing army deployment; laid the groundwork to support deployment of multiple armies in the same battle.

-- changed the parameters for the Deployment condition a bit. The condition parameters are now: army number, roster number, and deployment music (optional).

This, for example, will enable manual deployment for army 0 using the troops contained in roster 0, and will play the music track Battle Prep while the player deploys:

<Condition>Deployment,0,0,Battle Prep</Condition>

-- expanded the Arena intro with a bit of branching dialogue.

-- changed the special character -BRANCH:- to BRANCH[], as the former formatting did not play nice with the use of -STR:- and -VAL:- variables.
Title: Re: A new engine!
Post by: CraigStern on September 12, 2018, 03:43:02 PM
-- basic deployment is now functioning! The game lays down deployment tiles on the battlefield, a deployment screen shows your roster, you click a unit to select, and then you click a deployment tile to set them to spawn there. When you're done, you click the "Done" button and everyone spawns right where they were deployed.
Title: Re: A new engine!
Post by: CraigStern on September 13, 2018, 03:26:11 PM
Continued improvements to the deployment system today, along with a host of new skills:

-- deployment tiles now have their own material distinct from the move tiles, one whose shape works better in conjunction with the character portraits.

-- the deployment screen now displays instructions and error messages during the deployment process to guide players.

-- you can no longer finish deployment when 0 units are deployed.

-- you can no longer finish deployment when you haven't deployed units named in the deploying army's Protect Char conditions.

-- mousing over a destructible object covering a deployment tile now displays the info for the unit held in the deployment tile instead of the object.

-- created a new Light skill: Dazzle! Dazzle is essentially the photokineticist's answer to Terror. Though it deals no Health damage, it drops the target's light resistance and has a chance to blind the target 1-2 times and distract them 1-3 times. Range 1-3 spaces, free targeting, cost 6.

-- created a new Shadow skill: Miasma! Miasma is a fairly weak attack with a chance to Immobilize and Soften that can be followed up with movement and a different attack on the same turn. Any generated unit who learns Miasma will subsequently learn to counterattack with it as well. Range 1-2 spaces, constrained targeting, cost 2.

-- created a new Heat skill: Overheat! This damages the Energy of targets in a 3x3 area by 120% of the user's Psy. (If this would drop a target's Energy below 0, any roll-over is translated into Health damage, making it very effective against low-energy units like golems and cavalry). Range 2-4 spaces, free targeting, cost 18.

-- created a new Cold skill: Frost Army! This is the game's first mass buff, granting Hardened status in a 3x3 area. Range 0-2 spaces, free targeting, cost 18.

-- created a new Shield skill: Far Shield! Exactly the same as Mind Shield, but it has a range of 2-4 instead of 0-2.

-- created the icon for Throw Knife (an as-yet unimplemented skill, as it would require new character sprite animations).

-- skills now have an img attribute separate from their names, which the game now looks to (instead of the skill's name) to determine the image to use for the skill. This permits the creation of skills with new names that reuse existing icons.

-- got a new background: the Dese shop! Implemented it in the shop scene.

-- added the new shop and tavern backgrounds to the cut scene editor list of available backgrounds.
Title: Re: A new engine!
Post by: CraigStern on September 14, 2018, 04:32:25 PM
-- new script action: Teach. This causes the game to select a skill that one character knows and the other does not, but has the ability to learn; the second character then learns it. (The game will prioritize lower-cost skills that meet the criteria over higher-cost ones.) If no such skill exists, the game instead finds a stat the first character has that is higher than it is for the second character; the second character gains proficiency in it. Two parameters: the teaching character's name, and the learning character's name.

-- characters who have grown very close to one another can now get dialogue at night in which they teach one another a skill or proficiency using Teach.
Title: Re: A new engine!
Post by: CraigStern on September 17, 2018, 02:19:19 PM
-- added support for custom lists to the game! Much like the arrays of Telepath Tactics, these lists will take any sort of string as an entry (but entries from these lists can often be used as integers, since all integers used in the dialogue system are converted to ints from strings at runtime anyway).

-- new action: SetList. This creates a new, empty list variable (or clears an existing list variable of entries). One parameter: list name.

This, for instance, will create a new, empty list called Names:

SetList/Names

-- new action: AddToList. This adds a new entry to a list variable. (If the named list doesn't exist, the game will create it before adding the new entry). Three parameters: list name, the entry to be added, and (optionally) a boolean stating whether to add it to the beginning of the list. (If the last parameter is left blank, the entry will be added to the end of the list.)

These will add the values "Bertha" and "Ned" to the end of the Names list. Lists always count upwards from zero--thus, Bertha will end up at position 0 and Ned at position 1:

AddToList/Names,Bertha
AddToList/Names,Ned


-- new action: RemoveFromList. This removes one or more entries from a list variable. Two parameters: list name, and either (a) the integer position of a single entry to remove, or (b) a string value to cull from the list wherever it appears.

-- new action: ShuffleList. This reorders all of the entries within a list variable at random. One parameter: list name.

-- new special character LIST{}, which takes two parameters--the name of the list and the position in the list to display, like so:

QuoteYou want to talk to LIST{Names,0}, eh?

If we don't remove from or shuffle the example list above, this will end up displaying "You want to talk to Bertha, eh?"

-- new special character LASTINLIST[], which the game automatically replaces with the number of the last position in the list containing an entry. (If there are no entries in the list, this will display as -1.) Takes one variable: the name of the list.

If we don't remove anything from the example list above, this will be replaced with a 1:

LASTINLIST[Names]

This can be used in a SetVal action to obtain a random position in a given list, like so...

SetVal/RandomPosition,r:LASTINLIST[Names]

...and then the val can be used as part of a LIST{} special character to display the randomly chosen entry!

LIST{Names,-VAL:RandomPosition-}

(See the image attached to this post for a more full-featured example.)

-- the r operation now produces an integer number between 0 and the chosen number (before, it produced an integer between 1 and the chosen number).

-- added a new, optional third parameter to the Teach action; a boolean variable which, if set to true, causes the game to pop up the leveling screen with a summary of what the learning character just learned. (If not used or set to false, the game will stay quiet about the event.)
Title: Re: A new engine!
Post by: CraigStern on September 18, 2018, 02:44:41 PM
-- fixed a bug that would very rarely produce incomplete characters in the procedural character generator.

-- fixed a variety of bugs that were messing up the operations of the Recruit and Dismiss actions.

-- fixed a bug that was preventing character portraits from appearing during the "approach" portion of character dialogue during nighttime.
Title: Re: A new engine!
Post by: CraigStern on September 20, 2018, 05:32:26 PM
After taking a couple of days off to deal with True Messiah shenanigans, we're back!

-- added in the warning for when you're about to attack an ally or heal an enemy; you can then proceed anyway, or cancel the move. It ignores "falling"-type moves like Shove, Pull, and Throw entirely. (Note that the warning also won't appear for skills aimed at mixed targets--the game assumes that you intend friendly fire in the name of hurting the enemy, and only checks to make sure you're not making a mistake if your targets are entirely of the wrong sort!)

-- characters with a wound level of 2 or greater now have a 1-in-5 chance of quietly not progressing in their recovery on any given evening, and a 1-in-5 chance of simply passing away. (The most likely occurrence, with a a 3-in-5 chance, is that the character will reduce their wound level by 1.)

-- if a unit passes away, everyone on the team loses 1 morale, plus 1 per point of friendship they had with that character. (Sensitive characters will have their morale loss doubled.)

-- began coding mid-battle saving!
Title: Re: A new engine!
Post by: CraigStern on September 21, 2018, 03:40:26 PM
-- mid-battle saving and loading are now working! :D While not trivial, this was easier to implement than I had feared (albeit almost entirely so because of some smart changes I made to how I save and track data in the new engine).

-- new script action: SortList. Has two parameters, the second of them optional: (1) the list name, and (2) whether the list should be sorted in descending order (true or false). If the second parameter is left blank, the game will treat it as false.

-- new script actions: IfListHasGoTo and IfListHasRun. Both have 3 parameters: (1) the list name, (2) the entry value, and (3) the branch number to go to / script to run if the specified entry value is found anywhere in the named list.

(To GoTo or Run based on the value of a specific place in a list, use the IfString or IfVal actions in combination with the LIST{X,Y} special character.)

-- got a new background: entrance to the arena! Integrated it into the arena entrance scene.

-- added mouseover tooltips to the "toggle generic" and "pick expression" buttons on the portrait editing screen in the character creator for greater comprehensibility.

-- fixed a bug in which the game would reset all damage, drain, and other "tracker" stats at the start of each battle.
Title: Re: A new engine!
Post by: CraigStern on September 22, 2018, 03:07:53 PM
-- added an optional boolean fourth parameter to IfListHasGoTo and IfListHasRun; if set to true, the script action checks for whether the value is absent from the list instead of present in order to trigger the GoTo / Run result.
Title: Re: A new engine!
Post by: CraigStern on September 24, 2018, 04:30:25 PM
-- new nighttime group action available: hold gathering. This will take up the evening and use up a whole lot of food (as of right now, 50 units of food plus however much your characters were going to consume anyway) all at once in order to boost everyone's morale by 2. An important tool to have if morale starts slipping too much--but burning through that much food is expensive, enough so that you won't want to just spam "hold gathering" all the time.

-- nighttime "group meal" actions (like holding a gathering or cooking for the team) now trip a flag to tell the game not to run the hunger event if the group runs out of food that evening (since they technically ate as part of the night's activities).

-- reduced the morale gain/loss from winning/losing a battle from 2 to 1 to make winning battles less of a factor in maintaining team morale.

-- added new portrait facial expressions: Sleepy and Unhappy.

-- wrote more branching dialogue for the arena entrance.
Title: Re: A new engine!
Post by: CraigStern on September 25, 2018, 04:20:52 PM
-- moved the recruitment interface into the cut scene Unity scene so that recruitment can be integrated with narration, dialogue, scripts, and all that other good cut scene stuff.

-- new script action: ShowRecruits. This calls up the recruitment interface in a cut scene, generates a certain number of characters, and populates the recruitment interface with them. Parameters: (1) number of recruits to generate, (2) base level of generated recruits, (3) name of a custom list containing the species available (optional -- if left blank, all species will be available and equally probable), and (4) name of a custom list containing any excluded classes (optional -- if left blank, all possible classes for a given recruit's species will be potentially available).
Title: Re: A new engine!
Post by: CraigStern on September 26, 2018, 04:12:12 PM
-- the map editor now successfully auto-tiles basic transitions between land and hazard tiles (i.e. water and lava)!

-- fixed a bug caused by rewriting the combat code to accommodate a "bad targets" warning which caused the game to effectively freeze up following delivery of an attack bark.

-- fixed a bug in which the actions menu would appear after concluding dialogue while still in the midst of a combat sequence.

-- fixed a bug in which, on dialogue branches with multiple replies, the initial click on a reply would immediately trigger the reply even if the dialogue hadn't finished animating. It now behaves like clicking on a branch without multiple reply options: the first click skips the animating dialogue to the end, and any click after it's finished selects the reply.

-- fixed a bug in which clicking and item and then the Give button within a unit's inventory sub-window within the reserve inventory screen would cause them to "give" themselves another copy of the item, thus enabling infinite item duplication.
Title: Re: A new engine!
Post by: CraigStern on September 27, 2018, 02:58:44 PM
-- when painting ordinary terrain over hazard tiles in the map editor, the editor now auto-adjusts the new terrain to the correct height.

-- created cliff-edge variants that transition properly to adjacent chasm spaces.

-- fixed a null error which sometimes occurred when painting terrain in the map editor.
Title: Re: A new engine!
Post by: CraigStern on September 28, 2018, 03:28:14 PM
-- nighttime actions with the creates attribute (e.g. Bake, Create Art, Carve Wood) now generate items of the appropriate type and stick them in the current roster's reserve supplies.
Title: Re: A new engine!
Post by: CraigStern on October 01, 2018, 04:20:04 PM
Hired an artist to create new item sprites; gave artist feedback to the music and background artists.

-- received the new tent interior background, along with a nighttime variant! Implemented them in the cut scene editor.

-- reviewed the existing list of 29 life skills; took out the merchant and banker (the only ones remaining without effects implemented in the game).
Title: Re: A new engine!
Post by: CraigStern on October 02, 2018, 04:28:17 PM
-- received new cliff-edge assets that smoothly transition to adjacent chasm tiles. Chasm transitions are now in-game and working smoothly with the autotiling algorithm.

-- finished implementing character projects! The game now supports long-term projects that characters can work on for their evening activities. These take longer to produce benefits than other activities do, but the benefits are generally much more significant.

-- converted the gardening activity to a project that reliably produces a bunch of food upon completion (and not before).

-- created a new project type, Write Novel. The character will labor over (and eventually, create) a novel that appears in the group reserve supplies. A novel can be used up to 5 times to improve a unit's morale, or it can be sold for several hundred aura.

-- created a couple of new variant colorations for the Book item image.

-- fixed a bug in which it was possible to perform the Bake activity even if you didn't have the extra food on hand necessary to do so.

-- fixed a bug in which procedurally generated equipment would spawn without item descriptions. Special modifiers (like Poisoned, Burning, and Gap-seeking) now have special descriptions added on to explain what they do.

-- fixed a bug in which it was possible to still click on things in a scene while the game was in the middle of fading out, sometimes leading to null errors.
Title: Re: A new engine!
Post by: CraigStern on October 03, 2018, 04:43:21 PM
-- the "duplicate nighttime activity limit" now scales with the size of your unit roster, allowing no more than 1/3rd of the roster to each perform the same activity each evening.

-- implemented a new interface feature: custom cut scene menus! These are groups of buttons that hang out onscreen in cut scenes, show tooltips on mouseover, and run scripts when pressed. They're a way to give players options outside of the dialogue context, complete with explanations, and without obscuring quite so much of the background--ideal for "menu towns" and such.

Menus look a lot like shops in the scene's XML file, but with Btn nodes instead of Stock nodes. Each button gets a name (the text displayed on it), an explanation (text shown in its mouseover tooltip), a runScript attribute naming the script to run when the button is clicked, and optional parameters to either gray out the button (rendering it inoperable) or give the player a warning (in which case they may choose to proceed anyway) when they click it if a certain value (daysPassed, rosterSize, food, aura, or a -VAL:-) is either equal to an integer or within a range.

For example:

<Menu txt="It is a new day. How will you spend the daylight hours?">Town
<Btn name="Arena" explanation="Fight in the Arena|Visiting the arena will allow you to battle. (Victory will earn you aura and impart a morale boost to your team.)" runScript="GoToArena" grayOut="rosterSize/0/You must have at least one character on your team to fight in the arena! Visit the recruitment office." warn="rosterSize/1-4/It is strongly recommended that you have at least 4 characters on your team to fight in the arena! Are you sure?"></Btn>
<Btn name="Recruit" explanation="Recruit Characters|Hiring characters is essential to winning the tournament. The bigger your team, the more options you'll have." runScript="GoToRecruitment"></Btn>
<Btn name="Shop" explanation="Go Shopping|Visiting the shop will let you spend aura on food, items, and equipment. Keep your team well-fed and well-equipped if you want to succeed!" runScript="GoToShop" grayOut="daysPassed/0/All of the shops appear to be closed today. Perhaps it is a holiday of some kind?" warn="aura/0-9/You have very little money for shopping! Are you sure?"></Btn>
</Menu>


-- new script actions: ShowMenu and HideMenu. ShowMenu displays a menu contained in the current scene, and takes one parameter: the menu name. (In the example above, that would be "Town".) HideMenu takes no parameters, and simply hides the menu interface.
Title: Re: A new engine!
Post by: CraigStern on October 04, 2018, 04:09:46 PM
Today was wasted trying to fix the stupid "installer is damaged" error with Telepath RPG: Servants of God. (The installer isn't actually damaged, of course--it's just that Adobe made the brilliant decision to make signing certificates expire, thereby breaking every single AIR program at once in October 2017.) If nothing else, today served to once again make me very glad I switched over to Unity.
Title: Re: A new engine!
Post by: CraigStern on October 05, 2018, 04:28:31 PM
-- the cut scene editor can now load custom menus in scenes, and will respond appropriately to cut scenes that immediately call the ShowInfoBar action.

-- the cut scene editor now has a "menus" window that displays all menus in the current cut scene and provides a summary of each upon mouseover.

-- began work on allowing editing of menus within the cut scene editor.

Meanwhile, more UI polish:

-- cut scene menus now have a nice little fade-in when they appear in cut scenes instead of just abruptly popping into existence.

-- the text above the buttons in a cut scene menu now animates typing itself out instead of just appearing all at once.

-- a few seconds after displaying an error message due to clicking an unavailable button option, the text above the buttons in a cut scene menu now reverts to its default message. (The longer the error message, the longer the message remains onscreen before reverting.)

-- character portraits added in dialogue now perform a quick fade-in instead of just abruptly popping onto the screen.

-- dialogue menus now fade out when they close instead of just abruptly vanishing.

-- updated the item description for procedurally generated wing armor to make it clear that it's used by spriggats, specifically.

-- fixed a bug where the "Click to continue" text would show up in the corner of cut scenes even when in a cut scene menu.
Title: Re: A new engine!
Post by: CraigStern on October 08, 2018, 04:25:57 PM
-- commissioned the 3D cave tileset; got the first draft in.

-- added a little explanatory window to the Edit Menu Button window explaining how the Gray Out and Warning fields work.

-- fixed a bug in the map editor: opening up the Fill palette, then opening the Paint palette and selecting a swatch will no longer cause the map to behave as if you'd selected a fill.

-- fixed a bug in which Unity would fail to display the blinking cursor when entering text into text input fields.
Title: Re: A new engine!
Post by: CraigStern on October 09, 2018, 05:34:57 PM
Gave artist feedback today. In other news:

-- generated portrait data for placement of moles and facial tattoos on generated characters.

-- human character portraits now each have a chance to be generated with a facial tattoo, mole, hair accessory, and/or a scarf or necklace.

-- received a new background: the Dese throne room!
Title: Re: A new engine!
Post by: CraigStern on October 10, 2018, 05:32:02 PM
-- received a nighttime variant on the Dese throne room background.

-- integrated the new throne room backgrounds into the game.

-- added a new, separate img attribute to accessories in portrait data, permitting multiple instances of the same accessory with differing placement in the portrait (e.g. allowing the mole graphic to appear in different spots on the face on different portraits).

-- created variable mole placement data for human portraits.
Title: Re: A new engine!
Post by: CraigStern on October 11, 2018, 04:28:42 PM
-- created "spiny beard" and tattoo placement data for lissit portraits, as well as a third mole position for human portraits.

-- lissit portraits can now be generated with accessories, similarly to human portraits.

-- received new item graphics: a mango, a drawing, a figurine, a cake, a pie, 3 cookies, and a talwar.
Title: Re: A new engine!
Post by: CraigStern on October 12, 2018, 04:32:51 PM
-- created a chin cleft feature for human portraits; created portrait placement data for the chin cleft for male humans.

-- created portrait placement data for tattoos and scars for shadowling portraits. Shadowling portraits can now generate with accessories.

-- fixed a bug that was causing generated shadowling portraits to not show up.

-- fixed a crash bug that showed up after a character delivered a victory bark in combat.
Title: Re: A new engine!
Post by: CraigStern on October 14, 2018, 07:53:52 PM
-- fixed a typo that was producing the "you should have 4 units" warning when entering the arena with exactly 4 units (and failing to produce it when entering with only 1 unit).
Title: Re: A new engine!
Post by: CraigStern on October 15, 2018, 03:27:44 PM
Commissioned more portrait accessories!

-- created portrait position data for some spriggat accessories.

-- added text explaining what the "Either" gender signifies within the character creator.

-- fixed a bug in the character creator in which it would lock a character into "generic" mode if you selected "Either" as their gender, even if you went back and changed the character's gender to something more specific.

-- fixed a typo that was preventing the game from creating spriggat portraits using the 9th head shape.
Title: Re: A new engine!
Post by: CraigStern on October 16, 2018, 04:51:39 PM
Artist feedback! (Unfortunately, that's all I got done today.)
Title: Re: A new engine!
Post by: CraigStern on October 17, 2018, 03:00:51 PM
-- updated in-game portraits so that they swap army palette colors on the second foreground hair layer, permitting palette swapping in hair accessories; and also swap hair palette colors on the "scar or blemish" layer, permitting goatees and other facial hair "accessories."

-- received 16 new human portrait accessories: flowers, hair combs, hats, necklaces, pendants, scarves, and tattoos.

-- created human portrait position data for new flowers, hair combs, and tattoos.
Title: Re: A new engine!
Post by: CraigStern on October 18, 2018, 05:33:15 PM
-- received revisions on the new accessory graphics.

-- created human portrait position data for the new necklaces, pendants, and scarves.
Title: Re: A new engine!
Post by: CraigStern on October 19, 2018, 04:01:14 PM
-- updated the default Introduction.xml file for custom campaigns with a default menu.

-- the campaign editor now visibly labels scenes as either battles or cut scenes while browsing, making it easier to distinguish scenes from one another.

-- the skills window in the character creator now has a sub-window that lets you browse through all available skills in the game, mouse over them to see what their properties would be if used by the current character, and then click them to add them to the character's list of skills.

-- added mouseover tooltips to all of the buttons in the map editor's unit properties window, map settings window, and map conditions window.
Title: Re: A new engine!
Post by: CraigStern on October 22, 2018, 04:47:04 PM
-- added in falling damage to the combat engine!

Falling is much more dangerous in this new engine. Any time a character is thrown (or a non-flying unit is pushed/pulled) from one elevation to an elevation at least 2 levels lower, they now take damage equal to 20% of their total health multiplied by the number of elevation levels they fell (thus, they take 40% damage for a 2-elevation fall, 60% for a 3-elevation fall, and so on). For every elevation level they fall beyond the first, they take 1 turn of Stunned status.

e.g. A Bloodbeard's Bandit with 25 health is pushed off of a small cliff (elevation 3) and lands on the ground below (elevation 1). The bandit fell 2 levels--he takes 10 falling damage (representing 40% of his health) and is stunned for 1 turn.

-- when a unit is shoved into other units, the impact damage is now applied to the original shoved unit as well.

-- during deployment, battlefield objects overlapping deployment spaces are now partially faded out for easier viewing of deployed characters.
Title: Re: A new engine!
Post by: CraigStern on October 23, 2018, 04:13:08 PM
-- mostly finished integrating camp activities into cut scenes, thereby permitting much greater flexibility for how, where, and when character camp activities occur in campaigns!

-- new script action, cut scene only: ShowCampActivities. Generates a narrative sequence in which the current roster of characters engages in camp activities. One parameter, optional: forced activity. If used, this forces all characters who are not wounded, at <26% health, or about to resign to engage in the specified camp activity. (The special ones supported right out of the gate: GroupIntros, GroupPrac, and Gathering.) If the optional parameter is not used, characters will pick a camp activity themselves based on their life skills and personality.

-- new script action, cut scene only: ShowMoraleReport. Opens up the morale report screen.

-- new script action: ShowReserveSupplies. Opens up the reserve supplies screen.

-- new menu warning type: foodMinusAppetite. This behaves like the food warning, but it factors in the food your characters will consume for that day in advance.
Title: Re: A new engine!
Post by: CraigStern on October 24, 2018, 04:49:43 PM
-- finished integrating camp activities into cut scenes!

-- the Camp cut scene now visibly transitions from evening to night as the evening's activities conclude.

-- new script actions: HideOptionsButton and ShowOptionsButton. Hides or shows the button that allows the player to open the options screen. (The button is visible by default in all scenes, but I'm using these to turn it off during camp activities to reduce the temptation to save scum/encourage players to accept and work around whatever circumstances arise.)

-- fixed a formatting issue with text fields in cut scene menu button tooltips that would cause text to cut off on certain displays.

-- fixed a bug in which the game was labeling every save file as being in Slot 0.
Title: Re: A new engine!
Post by: CraigStern on October 25, 2018, 03:23:48 PM
-- got a new background: Dese palace hallway! Integrated it into the game.

-- the game can now load custom player-created camp activities narration from CampActivities.xml in a custom campaign's main folder.

-- you can now input custom camp activities for a character in the Character Creator; the game now parses camp activities from units loaded out of PremadeUnits.xml.

-- improved the look of the camp activities UI during fade-in.

-- fixed a text formatting issue that was preventing the game from displaying the second line of description in skill tooltips.
Title: Re: A new engine!
Post by: CraigStern on October 30, 2018, 05:30:42 PM
I took yesterday to write a yearly round-up (http://indierpgs.com/2018/10/the-past-year-in-indie-rpgs/) on IndieRPGs.com; today, it's back to the grindstone.

-- gave artist feedback.

-- added support for multiple "pages" of recruits in the recruitment interface, permitting way more recruits to be generated at a time.

-- bumped up the number of recruits generated in the Recruitment office from 6 to 12.

-- prettied up the "highlight" mouseover effect with units in the recruitment menu.

-- fixed a few UI glitches in the recruitment menu.
Title: Re: A new engine!
Post by: CraigStern on October 31, 2018, 03:11:02 PM
-- the game now creates Item Images and Skill Images subfolders when the player creates a new campaign, and saves appropriate Blank.png images in each of them for the player to use in creating their own custom item graphics and skill graphics.

-- the game now recognizes custom item graphics where the image attribute for an item starts with Custom/, and will attempt to load the image name that follows from the custom campaign's Item Images folder.

-- the game now recognizes custom skill graphics where the img attribute for a skill starts with Custom/, and will attempt to load the image name that follows from the custom campaign's Skill Images folder.

-- there is now an example skill contained within the default Attacks.xml file in custom campaigns; its img is Custom/Blank.

-- fixed a typo in the image name for Grape Shot.

-- began scripting a randomized nighttime event system.

-- new special characters: -FOOD-, -AURA-, and -ROSTERSIZE-, each returning an integer value: how much food you currently have, how much aura you currently have, and how many units are in the current roster, respectively.

-- new special character: RANGE[]. The game replaces this with an integer value chosen at random within the range selected. (For example: RANGE[2-4] might get replaced with 2, with 3, or with 4.)
Title: Re: A new engine!
Post by: CraigStern on November 01, 2018, 03:49:52 PM
-- fixed some scripting errors in the new nighttime event system. There are now 4 types of random events that can trigger.

-- new script action: RosterToList. Two parameters: (1) list name, and (2) roster number(optional--if not used, the game will just use the current selected roster.) This action will set a new list and fill it with the names of every character currently on the roster. Handy for running script actions targeting characters with procedurally generated names!

-- options button is now hidden during the recruitment scene once the recruits are shown in order to deter save scumming.

-- both participants of a camp activity conversations are now always onscreen during dialogue (i.e. post-approach).

-- fixed a bug in the recruitment interface wherein recruiting a character, switching pages, and trying to recruit another unit in the same "spot" would result in nothing happening.

-- fixed a bug in which campaign-specific PersistentDialogue.xml dialogue and scripts would be overwritten by the (largely empty) default PersistentDialogue.xml data every time the game tried to import it.

-- the game now prevents the loading of identically ID'd dialogue and scripts from the same source, giving priority to campaign-specific dialogue and scripts over default ones.

-- fixed a bug in the map editor that was preventing Fills from working properly.

-- fixed a bug in which the dialogue menu would stick around onscreen if branch 0 called an outside script that then called EndConvImmediately.

-- fixed a bug that was sometimes causing background transitions to conclude with the background semi-transparent.
Title: Re: A new engine!
Post by: CraigStern on November 05, 2018, 03:52:39 PM
-- added two optional parameters to the LoadConv script action: character 1 name and character 2 name. These will cause the game to load up the named characters' data for use in processing the dialogue text using their personal info (e.g. pronoun replacements, -TIC- text, and so on).

-- did a bunch of work writing new random nighttime events.

-- received new background: town!
Title: Re: A new engine!
Post by: CraigStern on November 07, 2018, 05:28:00 PM
-- there is now an optional, second parameter for the SetList action: a string of entries (delimited by the vertical bar | symbol) to populate the new list with. Thus, instead of this...

<Action>SetList/Numbers</Action>
<Action>AddToList/Numbers,0</Action>
<Action>AddToList/Numbers,2</Action>
<Action>AddToList/Numbers,3</Action>
<Action>AddToList/Numbers,4</Action>
<Action>AddToList/Numbers,7</Action>


...you can now do this:

<Action>SetList/Numbers,0|2|3|4|7</Action>

-- the game now processes in all dialogue special characters that were originally limited to generated dialogue, such as the special auto-pronouns heshe, himer, and hiser, as well as -LIFESKILL-, -LIFESKILLING-, -LIFESKILLCLASS-, -TIC-, and -LAUGH-. This is useable in combination with a LoadConv call where you've specified the Character 1 data to be used, thereby allowing dialogue to be tailored to various different characters on the fly.

-- updated existing event dialogue to take advantage of this new functionality.

-- created new camp narration for the activity "Rained Out."

-- fixed some UI transition animation bugs that had crept into camp activities.
Title: Re: A new engine!
Post by: CraigStern on November 08, 2018, 04:56:34 PM
-- began creating a tutorial battle explaining the basic game controls. It currently covers how to select characters, move, undo a move, and end the turn.

-- added new dialogue trigger: OnCharSelected. Has 3 parameters, only the first of which is required: (1) army number, (2) character name, and (3) character class. Any of the three parameters can be denoted -ANY-. When a character matching all of the specified parameters is selected, the game triggers the associated dialogue.

-- fixed an oversight: the OnReachingSpace dialogue trigger now supports ID[] tags for the name parameter.

-- the game now supports the ShowActionsBar script action: makes the game display the actions bar at the bottom of the screen during dialogue. Battle only; no parameters.

-- added a new stat that can be changed with the SetStat action: Turn Ended. Takes true or false.

-- changed the camp activity scripting so that it will never trigger events while the player has a roster of 0 characters.

-- fixed a bug in which using the WASD or arrow keys in the map editor's dialogue editor would also move the camera around in the map editor, and using the WASD or arrow keys in the map editor would also move the camera around in the map editor's dialogue editor.

-- fixed a bug in which the game would fail to remove non-repeatable dialogue from scenes after it triggered, permitting it to re-trigger over and over.
Title: Re: A new engine!
Post by: CraigStern on November 09, 2018, 04:40:10 PM
-- made further progress on the tutorial level; it now explains what skills are, how to determine where they can reach, and how to use them to attack.

-- the game now fully supports spawning reinforcements mid-battle.

-- when the game encounters an ID[] in dialogue outside the context of script actions (e.g. in the speaker name, replies, or in the dialogue text), it now attempts to swap it out for the name of the character possessing the associated script ID tag.

-- the game now processes text in the battlefield text overlay for special characters (such as ID[]).

-- fixed a bug that was causing the text overlay to sometimes not appear when called.

-- fixed a bug that was causing the second character in generated conversations to use their own name when they should have been using the first character's.

-- fixed a bug in which the dialogue editor camera would start moving around when hitting WASD or arrow keys in the Edit Branch window after closing an Edit Action or Edit Reply sub-window.

-- fixed a bug in which the save file text fields in the New Game and Load Game windows would fail to show up under certain display conditions.
Title: Re: A new engine!
Post by: CraigStern on November 12, 2018, 05:40:37 PM
Got some playtesting in this weekend with a couple of friends--and in the process, I collected a nice little haul of bugs to fix.

-- got a new background: the European-style tavern!

-- fixed a bug in which Mental and Shield skills would be affected by the relative elevation of the skill-user and the target(s), resulting in weird results like Mind Shield healing 30% less if it targeted an ally on higher ground.

-- fixed a bug in which using a knockback skill (like Shove or Kinetic Pull) on a non-moveable object would cause the game to freeze as it waited for the thing to move...even though it wasn't ever gonna move.

-- fixed a bug in which bridges were failing to spawn at the correct elevation in battle.

-- fixed a bug in which attack tiles and attack reticles were failing to display over water tiles that lacked bridges.

-- fixed a bug in which the Click to Continue text would sometimes show up in cut scenes with narration even while in the midst of camp activities, or while the calendar animation was playing.

-- fixed an issue in which people could click around outside the level-up screen in cut scenes and advance things while the level-up screen remained in place blocking most of the screen.

-- fixed a bug in which loading a game saved on a cut scene, then having a character level-up would result in the game failing to correctly display that character's skills in the level-up screen.

-- fixed a bug in which Unity unexpectedly started compressing the blank item and skill images for custom campaigns, thereby sabotaging itself whenever it needed to save them, throwing errors.

-- fixed a bug in which Morale could be set to more than 10 or less than -10 in the character creator.
Title: Re: A new engine!
Post by: CraigStern on November 13, 2018, 04:25:32 PM
-- in recruitment, the Counter Limit stat is now displayed as "Counterattacks" to the player.

-- new script action: RemoveConv. Removes a dialogue tree from those loaded up in the scene, ensuring that it cannot be triggered unless and until the game loads a new scene where the dialogue appears. One parameter: the Conv. ID of the dialogue tree to remove.

-- new dialogue trigger: PostCharAttacked. Exactly the same as OnCharAttacked, but it triggers after the attack instead of before.

-- sped up the animated bar animations for health, energy, and experience changes by 25% to ensure that they complete prior to fading out.

-- wrote a bit more random dialogue for the shopkeep.

-- fixed a bug where you couldn't select Yes to proceed with an attack against an ally.

-- fixed an issue in the map editor where 2D units were showing up unlit.

-- fixed an issue where the character screen was not reliably closing upon player click.

-- fixed a null error that could sometimes occur while the game was calculating knockback paths.
Title: Re: A new engine!
Post by: CraigStern on November 14, 2018, 05:21:25 PM
-- created objective reticles! They gently pulse, drawing the player's attention to important battlefield objectives.

-- the game now supports the script action AddObjectiveReticle. Places an objective reticle on the battlefield. Two parameters: y coordinate and x coordinate.

-- the game now supports the script action RemoveObjectiveReticle. Removes an objective reticle from the battlefield. Two parameters: y coordinate and x coordinate.

-- new supported dialogue trigger type: None. The trigger type ensures that the dialogue simply cannot be triggered on its own--it must be triggered externally, via a LoadConv action or cut scene narration.

-- the "Click to continue" message on the "New Turn" box no longer appears during CPU-controlled turns (as clicking won't do anything during these turns anyway).

-- adjusted AI behavior so that it would not cut short the "New Turn" box during enemies turns with no viable AI moves found.

-- adjusted the visual appearance of attack reticles to make their contents easier to read when not on top of red attack tiles.

-- the player now has 1 day before events start to occur in the evenings (they'll start to show up on or after Day 2).

-- fixed a bug in which the Recruitment scene could glitch out if you clicked twice really quickly while the recruitment interface was coming up.
Title: Re: A new engine!
Post by: CraigStern on November 15, 2018, 02:21:13 PM
-- rewrote the replacement procedure for RANGE[] and PICK{} so that you can use them multiple times with the same parameters in the same place (dialogue text, action, whatever) and the game will successfully replace each instance of it independently of the others.

-- commissioned some new weapon item graphics.

I'm off to Dreamhack for the weekend, so expect development to resume next week!
Title: Re: A new engine!
Post by: CraigStern on November 20, 2018, 05:39:50 PM
Back after spending the weekend showing True Messiah at Dreamhack; I have just today until I leave to celebrate Thanksgiving. This is just plain going to be an unproductive week, it seems!

-- camp activities now support the bg attribute, displaying an alternate cut scene background for just that activity.

-- the game no longer spawns characters with a wound level above 0 in battle.

-- the game no longer includes characters with a wound level above 0 in the deployment screen.

-- added a third parameter to the RosterToList action: an optional boolean "include wounded." By default, it is false; but if set to true, the list will include characters who have a wound level above 0.

-- when loading battles with a spawn for a specific named character, the game now checks to see if the character has appeared in battle before; and if they have, the game loads the saved version of that character instead of defaulting to recreating them from XML.

-- gave artist feedback on two backgrounds, new weapon icons, and a new battle track.

-- outlined a complex new random event.

-- fixed a bug that was sometimes causing it to "stick" when characters received wound levels from falling in battle.
Title: Re: A new engine!
Post by: CraigStern on November 21, 2018, 02:20:55 PM
-- new item type: practice staff.

-- did some more work on the tutorial battle.

-- new backgrounds: Shop and Cave!

-- fixed bugs in which the game would throw null errors when initially loading characters with empty skill progressions and inventories from XML.
Title: Re: A new engine!
Post by: CraigStern on November 26, 2018, 04:46:44 PM
Annnnd I'm back from visiting the family for Thanksgiving!

-- gave artist feedback.

-- the dialogue editor now contains a field for editing whether dialogue trees are repeatable (i.e. whether they can be triggered more than once without reloading the scene) or not.

-- added a few new character names and nicknames to the proc gen character names list.

-- swapping a character into another character's space during deployment now resets the swapped-out character in the deployment screen.

-- fixed a bug in which the camp activity UI would start to fade in and then immediately fade back out whenever the first night activity involved character dialogue.

-- fixed a timing issue that would sometimes cause pop-ups to disappear offscreen before completing their animations in battle.

-- fixed a bug in which the text overlay showing an attack name would flicker in and out while mousing over different attack tiles.

-- fixed an annoying behavior in the dialogue editor wherein the predictive text guide for a dialogue tree's trigger would immediately show up when you clicked to edit dialogue that already had a fully formed trigger.
Title: Re: A new engine!
Post by: CraigStern on November 28, 2018, 02:29:43 PM
Out sick yesterday with a cold I picked up from my little sister over Thanksgiving. (Blegh.) Yesterday and today were spent largely wrestling with True Messiah stuff and site issues. Still, some new progress:

-- three new backgrounds: the mine tunnel, as well as a sandstone variation for the cave and a sunset variation for the forest.

-- received graphics for all remaining talwars.

-- the game now supports procedurally generated talwars (which are identical to regular swords in all aspects but their appearance). Agarwal's shop now sells generated talwars in lieu of swords.
Title: Re: A new engine!
Post by: CraigStern on November 29, 2018, 03:49:03 PM
Spent pretty much all of today fixing website stuff. (The forums are now back up to date, though! Woohoo!)

-- new script action: RemoveCondition. One parameter: condition type. This will remove all conditions of the chosen type. (Battle only.)

Currently supported: remove a victory condition (Protect Char, Capture Char, and Defeat Army), and the battle will respond accordingly; remove a weather or lighting condition, and the game will reset to default weather or lighting; remove Delay Maneuvers, and all delayed armies will start moving as normal; remove Kill-All Victory, and it will be set to its default value of true.

-- new script action: AddCondition. Just type in the condition and its parameters like normal, and the game will load it! Currently supported: victory conditions (Protect Char, Capture Char, and Defeat Army), Weather conditions, Global Lighting conditions, Delay Maneuvers, and Kill-All Victory.
Title: Re: A new engine!
Post by: CraigStern on December 04, 2018, 04:19:47 PM
-- finished the initial draft of the Qualifier battle!

-- received new generated portrait accessories from Matt: chin hair and Ravinale necklaces! Created positional data for each new accessory for each human face shape. Turned up the incidence of one accessory in human portraits to 35%, and 2 accessories to 15%.

-- fixed a bug in which the game would still try to display "empty" skills.

-- fixed a bug in which the game would return false positives for dialogue triggers using a script ID parameter where multiple characters with different script IDs nonetheless shared the same name (e.g. multiple OnCharDeath dialogues triggered by the scriptID of particular barrels would all be triggered by the scriptID for one of them because all shared the name "Barrel").

-- fixed a bug in which the game wouldn't trigger OnCharDeath or PostCharAttacked dialogues for destructible objects.
Title: Re: A new engine!
Post by: CraigStern on December 05, 2018, 04:05:52 PM
-- got a new background: castle!

-- created directional variants for all of the different chunks in the Cave tileset so that they can be painted in the map editor with auto-tiling support.
Title: Re: A new engine!
Post by: CraigStern on December 06, 2018, 04:20:07 PM
Spent most of today setting up some of the requisite systems to be able to sell True Messiah via the Sinister Design website! I did still get a bit of work done on the video game, though:

-- created tile data for all of the new cave tiles.

-- created a new cave "cliff fill" tile.

-- gave artist feedback on a few missing cave tile transitions.

-- fixed a bug where the map editor would not register a change in the map's "base" tileset when using a flood fill.
Title: Re: A new engine!
Post by: CraigStern on December 07, 2018, 04:09:37 PM
-- laid the groundwork for character Moods, which last for a set number of days and can override the character's normal array of activities. They can also add little descriptors onto existing activity narration and impose enduring status effects.

-- created a new Status Effect (accompanying icon): Sick. Sick characters have doubled Energy costs for skills, and do not regain energy while resting in battle.

-- the AddStatus script actions now have two additional, optional parameters: Force Length and Force Power. These let you edit the length and power of the status effect being conferred from their default values.

-- updated certain camp activities with alternate backgrounds.
Title: Re: A new engine!
Post by: CraigStern on December 10, 2018, 05:26:19 PM
-- got moods working!

-- obtained the handful of missing cave tiles; implemented them in-game.

-- wrote new event: Sick (a character comes down with an illness for 1-3 weeks).

-- fixed a few dumb bugs I'd accidentally introduced.
Title: Re: A new engine!
Post by: CraigStern on December 11, 2018, 03:32:37 PM
-- received and integrated the sunset variant for the Clearing cut scene background.

-- created water and lava transition tiles for the cave tileset.

-- the character creator now correctly saves and loads accessories with Custom portraits.

-- the game now supports custom pronouns for characters (they can be set during the "gender" step in the character creator). Characters using custom pronouns will have their pronouns appear as a three-entry, /-delimited list under the pronouns attribute in their entry in PremadeUnits.xml. (Characters lacking a full set of 3 custom pronouns will simply use the traditional pronouns for their sex.)
Title: Re: A new engine!
Post by: CraigStern on December 12, 2018, 05:11:47 PM
-- added two new optional parameters to the ShowRecruits script action: base cost and cost variance. Both are integers; the first adds a set amount to the salary of all recruitable units generated, while the second randomly adds or subtracts a number between 0 and its value to the salary of each unit generated.

-- generated characters now have a "Salary" stat equal to their recruitment cost. (Like all other stats, it can edited with SetStat.)
Title: Re: A new engine!
Post by: CraigStern on December 13, 2018, 03:01:27 PM
-- reworked the ShowRecruits salary variability parameter so it operates as a percentage increase or decrease instead of behaving as a flat addition/subtraction.

-- used the new ShowRecruits parameters to add random variability to recruit salaries in the campaign; they can vary by as much as 25% in either direction from the game's baseline calculation of how much the unit is "worth."

-- base cost and % cost variability parameters have now been added onto the GenerateUnit and GenerateUnique script actions, with identical effects upon the salaries of their generated units.

-- base cost and % cost variability parameters have now been added onto Generate: and Unique: unit tags in battle maps, allowing units generated in this fashion to also access the corresponding salary calculation parameters.

-- Shops now support the use of -VAL:- characters when defining their basic parameters (costMultiplier, baseSalePrice, itemQuality, qualityVariance, and foodCost)! This allows you to change a shop's parameters dynamically throughout the game by reference to other variables you might be tracking.

E.g.

<Shop costMultiplier="-VAL:ItemPriceLvl-" baseSalePrice="0.5" itemQuality="-VAL:ItemQuality-" qualityVariance="2" foodCost="-VAL:FoodPriceLvl-">Agarwal's

Item quality and quality variance are integers, so the game just plugs in the integer value for whatever -VAL:- variable you pick. However, the other shop parameters take float values with decimals, so they're a little trickier to set with -VAL:-. To get the integer from -VAL:- into a useful float format, the game divides the value by 100 (thus, effectively treating it like a percentage). So for example: suppose you have a shop with costMultiplier that references -VAL:CostMult-. If you wanted to increase the cost multiplier by 0.1 during the game (say, because the player did something to piss off the shop owner), you'd use SetVal to add 10 to CostMult.

-- finally implemented costMultiplier and baseSalePrice as a factor in setting item values in-engine.

-- used the new -VAL:- character support in Shops to perform preliminary work allowing changes in item price and quality over the course of the game.

-- added a difficulty selection to the start of the game, with two modes: "Relaxed" or "Challenging." As of right now, the choice impacts base prices for recruits, items, and food. Eventually, my intention is that it will impact the likelihood of bad events occurring during the game as well as how smart the AI is during fights.

-- fixed an obscure and insidious bug wherein the game would sometimes change the order of the actions in a script that had been called by another script action. (This would result in disastrous situations like scripts that ended with NextScene instead running NextScene first, thereby ensuring that the remainder of the script never executed at all.)

-- fixed an exceedingly dumb bug in which the game would not properly parse special characters which placed hyphens right next to one another; the issue was, it would go through and replace the -- with an em-dash beforehand, and therefore wouldn't recognize the special characters of which each hyphen was a part. (Among other things, this made it impossible to use -NL- to start a new line beginning with -NAME- or any sort of variable value.)
Title: Re: A new engine!
Post by: CraigStern on December 14, 2018, 04:27:51 PM
-- rewrote character mood code to support more than one concurrent mood, permitting correct handling of multiple different mood-related status effects. (The game will still only reference the mood with the highest power rating during camp activities, but weaker moods with longer durations will resume after the strongest one ends.)

-- mood durations now tick down in accordance with the Calendar condition in cut scenes.

-- mood durations now automatically tick down in accordance with the number of days passed when passing > 0 days using the SetDaysPassed script action.

-- new special character: -DAYOFTHEWEEK-. Returns an integer value between 0 and 6 representing whatever day of the week it currently is in-game.

-- new supported custom cut scene menu warning parameter: dayOfTheWeek. Allows you to gray out a menu button (or display a pop-up warning) for certain days of the week.

-- main body text in custom cut scene menus now supports the use of special characters! For example:

<Menu txt="It is LIST{WeekdayNames,-DAYOFTHEWEEK-}. How will you spend the daylight hours?">Town
...


-- came up with names for all the days of the week in the game world, ones just similar enough to real-life day names to be intuitive: Moonday, Truthsday, Weddingsday, Starsday, Fireday, Shadowday, Sunday.

-- used new -DAYOFTHEWEEK- functionality to make the in-game item shop give the player a 10% price discount if they visit on Weddingsday.
Title: Re: A new engine!
Post by: CraigStern on December 16, 2018, 03:44:06 PM
-- new special character: -DAYOFTHEMONTH-. Returns an integer value between 0 and 27 representing whatever day of the month it currently is in-game.

-- new special character: -PAYROLL-. Returns the current combined monthly salary for everyone in the current roster.

-- new special character: -APPETITE-. Returns the current combined daily food consumption for everyone in the current roster.

-- added all existing special characters into ActionsReplies.xml for future in-game documentation purposes.

-- scripted a monthly payment system, along with periodic reminders to the player as payday approaches and a custom event for failing to pay everyone that results in morale taking a massive -10 hit across the board.

-- new random event: a travelling merchant visits the camp, offering the opportunity for a "free" shopping timeslot (albeit at the cost of substantially higher prices).

-- new random event: a travelling mechanic visits the camp, offering the opportunity for a "free" recruitment timeslot purchasing golems.
Title: Re: A new engine!
Post by: CraigStern on December 17, 2018, 05:09:39 PM
-- created an 8th chin hair variant: a braided goatee.

-- received, added the new night variant for the Clearing background.

-- implemented the Dese villager portrait assets in-game.

-- wrote some new last name beginnings and endings for generated characters.
Title: Re: A new engine!
Post by: CraigStern on December 18, 2018, 03:58:21 PM
-- received, added new castle throne room background.

-- received, added new night and sunset variants for the Ship background.

-- updated the AddPortrait action so you can use generic portraits with it. To do so, start with Generic| for the portrait name parameter; then add the class name, then cap it off with _M or _F. For instance:

AddPortrait/Mechanic Spearman,Generic|Spearman_M,right
Title: Re: A new engine!
Post by: CraigStern on December 19, 2018, 04:22:46 PM
-- coded basic autotiling for elevated spaces. This automatically subs in more natural-looking cliff edge tiles for the blocky default tiles when painting terrain of varying elevations in the map editor.

-- added support for camp activities changing the mood of one or more characters.

-- fixed a few oversights in the tile data.

-- fixed a bug in which character portraits would sometimes inappropriately remain onscreen during camp activities when transitioning from a non-dialogue activity to a dialogue activity.

-- fixed a bug in which reverting to the default menu text after receiving a menu button warning would undo the processing for special characters in the default text.

-- fixed a crash bug that would sometimes during camp activity text where a character directly addresses the player.
Title: Re: A new engine!
Post by: CraigStern on December 20, 2018, 04:40:40 PM
-- when characters aren't paid, they now get one of several negative moods that can last for as long as a week.

-- did some work creating new premade enemy units for the new campaign.
Title: Re: A new engine!
Post by: CraigStern on December 21, 2018, 03:44:15 PM
-- created an original battle to serve as the first "real" arena fight in the game.

-- took a stab at recreating one of the early fights from TPA1 (http://www.sinisterdesign.net/TelepathPsyArena.html) in the new engine to serve as arena fight #2.

-- updated the arena scene with new dialogue and scripting leading to the new fights.

-- new dialogue trigger: OnVictory. One parameter: army number (or -1 for any army). Triggers dialogue as soon as the specified army wins the battle, before the victory splash shows up.

-- received, integrated the nighttime variant for the Dese Market background.

-- commissioned some new unit portraits.

-- gave artist feedback on new battle music (which is very close to finished!)
Title: Re: A new engine!
Post by: CraigStern on December 24, 2018, 02:04:49 PM
-- tweaked a bunch of little UI things to make sure text shows up correctly on different displays.

-- fixed a bug where the game would incorrectly save a character's skills used mid-battle.

-- fixed the ID[] tag not working right on destructible objects as the target of script actions bug again after unintentionally breaking the previous fix.
Title: Re: A new engine!
Post by: CraigStern on December 26, 2018, 02:33:50 PM
-- reduced the movement speed of all characters in the game by 1. This will make it easier for players to gauge who can move where, will increase the importance of movement skills, will make it easier for me (and others) to design maps, and will reduce strain on the AI when calculating possible moves.

-- the Move Bonus status effect now grants +50% speed instead of +40% speed.

-- new script action: MoveCam. Two parameters: y coordinate and x coordinate. Moves the camera over to a point centered on the provided coordinates.

-- new script action: EndTurn. No parameters. Clears the script action queue, ends the conversation, and immediately ends the turn for the current player.

-- used the new OnVictory trigger to update the battle progression system such that the player progresses to the next fight only when he or she wins the last one.

-- units can now take fall damage from being dropped a single level of elevation (equal to 20% of their maximum health). Reduced the minimum fall damage from 5 to 4.

-- added tutorials on elevation effects and hazard tiles to the Dry Mounds and Oasis battles.

-- made it so the "no tutorials" choice from the qualifier battle carries over to subsequent fights.

-- received, integrated new backgrounds: arena night variant, town sunset and night variants, and dese palace night variant.

-- fixed a bug in which Jokester characters would sometimes take totally inappropriate actions during camp activities.
Title: Re: A new engine!
Post by: CraigStern on December 27, 2018, 04:20:11 PM
-- received tiles for existing tile sets with cave transitions.

-- created directional variants for cave tile transitions from every other tileset (except for castle).

-- created tile data for all of the new tile variants.

-- created a new beginner-level fight: Battle at the Overgrown Garden.
Title: Re: A new engine!
Post by: CraigStern on December 31, 2018, 03:20:24 PM
Gave a bunch of artist feedback on tiles, backgrounds, portraits, and new destructible object images. Also:

-- created a new UI feature in battle: the icon for the active status effect on a character is automatically displayed over that character's shoulder. If the character has multiple active status effects, then then icon continuously rotates through them all at a rate of one per second.

-- finished up the directional cave transition variants with the castle tileset, then created the corresponding tile data.

-- fixed a couple of mis-formatted new tiles.
Title: Re: A new engine!
Post by: CraigStern on January 02, 2019, 04:11:19 PM
Happy new year! :)

-- received new desert-themed destructible objects; created stat data for them all, integrated them into the game.

-- made edits to the Dry Mounds and Qualifier battles, including swapping in new destructible objects.

-- status effects displayed over characters in-battle now actively blink, making them more noticeable.

-- fixed a couple of bugs in the game's cliff-generating algorithm.

-- fixed a bug in which the game would freeze mid-attack if a) the player used a skill (like Feint) which always does 0 damage and b) the skill's associated status effect failed to take hold on the target.
Title: Re: A new engine!
Post by: CraigStern on January 03, 2019, 03:51:59 PM
Gave artist feedback.

-- added the "equipped" symbol to item buttons. Equipped items now display the symbol, and others do not. Equipping and unequipping toggles the symbol on and off.

-- the character screen in the Character Creator now takes account of the effects from the current character's equipped items.

-- added sound effects to the title screen interface.

-- increased the amount of experience characters get from the Practice camp activity.

-- created new surname beginnings and endings; reduced the likelihood of a character being generated with a one-part last name.

-- fixed a bug where the game wasn't saving the script IDs for units during mid-battle saves.

-- the character creator now recognizes when a character wth a unique portrait has been loaded for editing, and will block off the individual feature selectors in the portrait editor. To create a new, custom portrait for a character who has a unique portrait, you can hit the randomize button.

-- fixed a bug where the character creator would overwrite the portrait name for characters with a unique portrait with an improperly formatted custom portrait upon saving the character.

-- fixed a bug where the game would consistently generate units 1 level higher than they were supposed to be.

-- fixed a bug where inspecting an enemy's character screen during deployment would cause the screen to show up below the deployment window, and would open the actions bar upon closing.

-- fixed an AI bug where psy healers would choose to heal allies who had not been damaged.

-- fixed multiple AI bugs that negatively impacted the game's decision-making when determining which way to rotate units at the end of the turn to minimize potential danger.
Title: Re: A new engine!
Post by: CraigStern on January 04, 2019, 01:56:14 PM
-- received, implemented new nighttime variant for the Castle background.

-- you can now specify species on GENERATE: and UNIQUE: characters (avoiding situations where the game randomly creates a shadowling for a psy user class when you wanted a human, and vice versa). The "force species" parameter now goes between name and sex--if you want the game to just pick one for you, leave it blank.

This will generate a psy healer that can be any species supporting the class:

<Unit>0,1,Generate:Psy Healer/RANDOM//Either//1,3,11,Left,None</Unit>

This will generate a human psy healer, specifically:

<Unit>0,1,Generate:Psy Healer/RANDOM/Human/Either//1,3,11,Left,None</Unit>

-- added a "force species" parameter to the GenerateUnique and GenerateUnit script actions, right between the name and sex parameters.

-- added a couple more surname beginnings and endings.
Title: Re: A new engine!
Post by: CraigStern on January 08, 2019, 05:36:28 PM
Yesterday was dedicated to True Messiah stuff and giving more artist feedback.

-- it is now possible to have a text input field show up on a branch of dialogue! The field has a 24-character limit; as soon as the player clicks any reply, the text entered in the field will be saved under the custom string _INPUT. (If the player clicks a reply with no text entered, however, the game will ignore the click and wait for text to be entered.)

The attribute to make the text input field show up on a given dialogue branch is inputText; set it to true, a la:

<Branch num="3" name="Registration" inputText="true">

-- used the new input text field in-game to let the player name their team.

-- added an eyedropper tool to the map editor. This puts the map editor into eyedropper mode--the next tile you click on will made the clicked-upon tileset the select terrain type to paint and automatically put you into paint mode.

-- added new hotkeys to the map editor: Alt enters eyedropper mode, Shift+P opens the paint palette and enters paint mode, and Shift + F opens the paint palette and enters fill mode. The new hotkeys are displayed with tooltips upon mousing over their respective buttons.

-- got rid of the "Fill Cliffs" button from the map editor. (Cliffs are now filled in automatically with every elevation change, rendering the button pointless.)
Title: Re: A new engine!
Post by: CraigStern on January 09, 2019, 04:16:44 PM
-- created a new status effect: Talkable. It doesn't have any actual effect on the character, but rather, can be used as a visual cue (via the AddStatus script action) to indicate that the character can be talked to.

-- the map editor and cut scene editor now both successfully load and save dialogue while preserving the inputText attribute.

-- added more tutorial guidance to Battle at the Overgrown Garden.

-- tweaked the Insomniac's Practice camp activity to grant more experience from staying up late practicing, but to also sap the character's Energy going into the next day.

-- added the sunset Castle background variant to the game.

-- spent time trying to get a Mac test build working.

-- took a stab at fixing a weird palette-swapping bug that affects the character selection circles (but only on specific computers); not totally sure yet if I succeeded!
Title: Re: A new engine!
Post by: CraigStern on January 10, 2019, 05:20:36 PM
-- received, created data for, and implemented new portraits: traveling Dese merchant, Mechanic, and Dese royal guard. (For those counting, this brings the game up to 127 distinct portraits, including generics but not including procedurally generated portraits!)

-- during a mid-battle save, the game now saves all dialogue that has been removed from the scene, whether because of RemoveConv or because it's non-repeatable and it was triggered; and upon reloading the save file, those dialogue trees are removed. (Thus, the game will remember which dialogue not to repeat upon reloading the file.)

-- during a mid-battle save, the game now saves all current objectives; and upon reloading the save file, only those objectives are loaded. (Thus, mid-battle changes to objectives are preserved.)

-- during a mid-battle save, the game now saves all active conditions present on the battlefield; and upon reloading, only the active conditions are loaded. (Thus, mid-battle changes to weather, lighting, and win/lose conditions are preserved.)

-- added a third dummy to the qualifier tutorial battle.
Title: Re: A new engine!
Post by: CraigStern on January 11, 2019, 05:16:04 PM
-- some AI changes to prevent healers from placing themselves in danger for no reason. Healers now weight the danger from enemy units way more heavily when they have no one to heal and are calculating a move simply advancing up the battlefield--and if they have no offensive skills, they will never move toward a space within move-and-melee range of an enemy.

-- for healers determining moves when at low health, the AI no longer counts the healer itself when determining proximity to healers.

-- the AI now weights danger more heavily for units in general when calculating short-term moves, by default.

-- the AI now has units face toward the enemy even if every enemy unit is seemingly out of range to attack them.

-- the AI now affords a much lower score to defensive facing that relies on placing one's back against non-wall objects, allies, and fly-only spaces if it detects enemies with ranged attacks in range.

-- scripts run via script actions and Run-type replies in dialogue now inherit dialogue tree data, allowing the scripts to correctly employ a variety of special characters relating to the current dialogue tree (such as BRANCH[] and -NAME-).

-- scripted the Recruitment scene so that on the first day of recruitment, if being played on the easier difficulty setting, the game's more complicated classes (e.g. engineers, bowmen, cavaliers, kineticists...) are excluded from showing up in favor of classes that are easier for new players to learn how to use.

-- coded a failsafe for edge cases where the only available classes for a character being generated happen to be on the excluded classes list; the game will simply assign the character a default class for that species (with a preference for utility classes so they aren't so hampered by inappropriate stat growths).

-- if generated units are placed into a map without the correct number of attributes, the game will now simply not load them in lieu of crashing.

-- fixed a map editor bug that would paint objects onto the battlefield with facing other than None.
Title: Re: A new engine!
Post by: CraigStern on January 13, 2019, 02:21:15 PM
-- when you load a scene, the map editor and cut scene editor play the music for whatever scene you're now editing; if you create a new scene, it will stop playing whatever music was playing previously. If you change the scene's music in the map/scene settings, it will start playing the new music as soon as you confirm the changes.

-- fixed: the game will no longer throw an error if it loads a scene with a music attribute that does not correspond to a track existing in the game.

-- added a new parameter to Generate: and Unique:, as well as to the GenerateUnit and GenerateUnique script actions--a boolean value telling the game whether you want the unit to be generated with any equipment you didn't specify. Generic units will have this set to false by default; unique units, to true. In each instance, the new parameter goes right before the salary parameters.

-- for generated generic units (i.e. non-uniques), if you tell the game not to generate a weapon and they have no forced inventory equipped, the game will detect the fact that they have no weapon and will compensate for that by giving them a Strength bonus appropriate to weapons at their level as well as natural access to the granted base skill for their class.

-- updated the map editor to support the new force species, generate inventory, add to salary, and salary variance parameters when dealing with generated units.

-- the character generator now ignores the force species parameter when generating a unit of the parameter does not list a valid species.

-- fixed a map editor bug in which the game would ignore your chosen facing when painting FromPlayerRoster units onto the map.

-- fixed: the game will no longer throw an error if you use Either in the force gender field in the generate unit window in the map editor.

-- fixed: the game will no longer add empty tags to characters.

-- fixed a typo in the tile data affecting a particular grass-dirt transition.
Title: Re: A new engine!
Post by: CraigStern on January 14, 2019, 05:19:38 PM
-- created the first optional quest in the game.

-- laid groundwork for characters to have passive abilities with distinct names and images, viewable by the player in a unit's character screen.

-- gave Pessimistic characters an automatic +10% to their base Dodge to make them more worthwhile.

-- upped the number of deployment points in the first few battles to 6.

-- further improved the formatting of maps saved in the map editor for human readability.

-- fixed a bug in which the map editor would fail to paint transitions properly on maps with the majority tiles belonging to the wood or castle tile sets.
Title: Re: A new engine!
Post by: CraigStern on January 15, 2019, 04:11:02 PM
-- tested and dramatically improved the first optional quest.

-- new special character: -ARMY-. The game replaces it with the army number of the character that triggered the dialogue.

-- items with a useableWith attribute of "automatic" are now automatically used when grabbed from an item sack, just as in Telepath Tactics.

-- updated the scripts run by "coins" items to work with the new scripting engine. (They now use SetAura, but first check to make sure the grabbing character is on army 0.)

-- increased the damage threshold for successive wound levels when going below 0 health from 10% of max health to 10% of max health plus 2 (effectively setting the smallest possible wound level increment at 2, but more realistically at 3 or 4).

-- fixed a bug that was causing characters to spawn below bridges at the start of battle instead on top of them.

-- fixed a bug that was preventing the game from applying the LevelUp tag correctly at the start of battle.

-- fixed a bug that would sometimes cause the game to freeze when evaluating a knockback skill that would knock a character off the map.

-- fixed a bug that caused the game to ignore the forced delay parameter with SpawnFloatingText and SpawnFloatingTextAt.
Title: Re: A new engine!
Post by: CraigStern on January 16, 2019, 05:32:09 PM
-- the info bar now displays your projected total payroll costs for the end of the coming month.

-- tweaked the placement of a couple of objects in the first optional quest battle to make it safer and easier to break open the treasure chest.

-- fixed another bug affecting the timing of pop-up text.
Title: Re: A new engine!
Post by: CraigStern on January 17, 2019, 05:02:20 PM
-- implemented the ItemDrop script action. Generates an item sack with 1 or more items inside and drops it at a random point on the map a certain minimum distance away from all character spawn points (with locations more distant from all spawn points, on average, receiving preference). 2 parameters minimum, but you can use more to add more than 1 item: (1) the minimum distance--can be set to below 0 to make the game calculate one on its own; and (2+) either the name of an item, or an integer commonality range (e.g. 10-22) representing a pool of possible items to choose from at random.

-- used ItemDrop to script an event where a fan throws a random item onto the battlefield during Battle at the Dry Mounds. (I expect I'll be reusing this one periodically!)

-- improved the tutorial at Battle at the Dry Mounds, tweaked enemy placement to make it easier to take advantage of elevation differences.

-- redesigned info bar to accommodate extra payroll text, and to avoid overlapping the dialogue window.

-- updated mouseover toolltips for aura and food icons in the info bar to explain what the values in parentheses indicate (monthly payroll projection and estimated daily food consumption).

-- added a bit to the list of combinatorial last name possibilities.

-- fixed a bug in the character generation process that would cause the game to freeze when an excluded class was detected among possible classes and more excluded classes remained to check.

-- fixed a typo in one of the Sensitive greeting lines.

-- fixed palette swapping on the Dese townsperson portraits.
Title: Re: A new engine!
Post by: CraigStern on January 18, 2019, 03:50:00 PM
Commissioned some new backgrounds (including Somnus and the Psy Academy!), plus some new portrait assets. Additionally:

-- the camera now pans around intelligently during AI-controlled turns to properly frame character moves and attacks.

-- you can now invoke MoveCam without parameters to make the game auto-pan over to the army whose turn it currently is; or else add a character name as the third parameter to pan the camera to center on the named character.

-- new script actions: IfStringContainsGoTo and IfStringContainsRun. These behave exactly like IfStringGoTo and IfStringRun, except that instead of checking for an exact match against a string value, they check for the existence of a given substring within the string variable. If it's found, the GoTo/Run portion of the action is executed.

For instance:

IfStringContainsGoTo/PlayerName,fuck,BRANCH[Naughty Word]

This will check the string variable PlayerName to see if the substring "fuck" appears anywhere within it--if it does, it'll proceed to the dialogue branch named "Naughty Word". (Note that this functionality is case-insensitive, so the above example will also return true for "FUCK", "Fuck", "fUcK", and so on.)

-- when mousing over units in army 0, the game now tells you in parentheses how much experience the character has, and how much total experience they need to level up.

-- got a variant to the throne room background with way less sinister lighting.

-- fixed a bug in which the game's AI routine would run before OnTurn dialogue, and thus not take account of any changes wrought during that dialogue (such as changes to Passive tags, addition or removal of characters, etc).

-- fixed a bug in which the Actions Menu would sometimes show up without displaying the control buttons (Settings, End Turn, etc.) at the start of a human player's turn.

-- fixed a bug in which the Escape key would not advance through dialogue or close a Level-up screen popping up during an AI-controlled player's turn.
Title: Re: A new engine!
Post by: CraigStern on January 20, 2019, 09:50:01 AM
-- the money, payroll, food, and appetite counts in the info bar now animate counting up or down when you buy/recruit stuff.

-- character tooltips in the reserve supplies screen now display the unit's masteries on mouseover.

Bug fixes!

-- if a unit inventory sub-window is open in the reserve supplies screen, clicking the background of the reserve supplies screen now closes the sub-window instead of exiting the reserve supplies screen entirely.

-- fixed: when in the reserve supplies screen in cut scenes, the escape key didn't behave like clicking the background of the screen.

-- fixed: the recruitment screen didn't update with your group's new daily food consumption when you recruited units.

-- fixed: the factors weighing against aggressive short-term moves in the default AI were too high, leading enemies to sometimes run around instead of attacking when faced with an unfavorable counterattack.

-- fixed: the game wasn't bringing the Actions Window back onscreen after canceling an attack that would hit an ally/heal an enemy.

-- fixed: the game would reset character experience to 0 when entering a new battle. (Oops).

-- fixed: it wasn't showing the "Save Game" tooltip when mousing over the button to save mid-battle in the turn box.

-- fixed: it would play the "wood block" sound every time the AI selected a new unit (which got annoying pretty fast).

-- fixed: the dialogue menu now produces a "clicked" sound when selecting from among multiple replies.

-- fixed: mousing over units beyond the fifth character in the deployment screen would not produce tooltips.

-- fixed: it was possible to select a character during the fraction of a second between the start of a turn and the appearance of the turn box announcing the new turn, which would cause unwanted UI elements to show up behind OnTurn dialogue.
Title: Re: A new engine!
Post by: CraigStern on January 21, 2019, 04:31:54 PM
Posted a (slightly belated) new year's update (https://www.kickstarter.com/projects/1426761469/telepath-tactics-a-strategy-rpg/posts/2390941) to the Telepath Tactics Kickstarter summarizing the past year's progress--and despite its length, I definitely left things out. It's satisfying to take a step back and see how much progress I've made, even if we remain some ways away from completion. :)

-- at the start the player's turn at the start of each battle, if there's no OnTurn/0 dialogue to preempt it, the game will check for a character who has deployment lines--the chosen character will then say one of their deployment lines, commenting on the coming fight.

-- added a little extra code into the character generator to prevent the game from selecting a first name that one of your existing characters already has, or that another character in that same recruitment set has.

-- generic units are now always generated with Morale of 0 by default (i.e. totally neutral, with no effect on combat performance). This can, of course, be altered later via script actions!

-- wrote a bunch of new lissit names.

-- fixed a graphical glitch in the treasure chest sprite.

-- fixed an AI bug that was causing the game to incorrectly weigh the effects of counterattacks when evaluating a move.

-- fixed a bug that was causing the game to not recognize when it had ended camp activities in a cut scene.
Title: Re: A new engine!
Post by: CraigStern on January 22, 2019, 03:36:48 PM
-- added Undo button to the map editor.

-- the map editor now successfully supports undoing of Paint actions.

-- the map editor now successfully supports undoing of Fill actions.

-- the map editor now successfully supports undoing of Elev+ and Elev- actions.

-- the map editor now successfully supports undoing of New Unit and Delete Unit actions.

-- the map editor now successfully supports undoing of New Object and Delete Object actions.

-- the map editor now successfully supports undoing of Edit Unit/Object Properties actions.

-- the map editor now successfully supports undoing of New Light and Delete Light actions.

-- the map editor now successfully supports undoing of Edit Light Properties actions.

-- tweaked the Sunset global lighting preset to make it less aggressively orange-red; added new Dawn global lighting preset that's a bit more yellow in color.

-- fixed: changing the coordinate properties for a point light in the map editor did not result in the light moving positions.

-- fixed: clicking a light that had moved positions would not enable you to edit its properties.
Title: Re: A new engine!
Post by: CraigStern on January 23, 2019, 05:30:32 PM
Lots of artist feedback today! Beyond that:

-- created missing directional variants for the cave wall fill objects, cave wall tunnel objects, and lit cave wall tunnel objects.

-- added 'Z' as hotkey for Undo in the map editor; added the + and - keys as hotkey shortcuts for Elev+ and Elev- in the map editor.

-- added mouseover tooltips to the Undo, Elev+, and Elev- buttons displaying the new hotkey shortcuts.

-- fixed an out-of-range error in the map editor.
Title: Re: A new engine!
Post by: CraigStern on January 24, 2019, 05:18:44 PM
-- added a new battle to the game with tutorials on busting open treasure chests and grabbing item sacks.

-- spruced up a couple of the other, pre-existing battles to make them more interesting.

-- wrote more Arena dialogue.

-- created a save menu that lets you choose what slot to save your game in (instead of having to overwrite the slot you began the game in).

-- the mid-battle save button now opens the new save menu instead of just automatically overwriting your previous save from the start of the battle.

-- created a "check box" UI element for handling simple boolean values.

-- implemented the check box in the dialogue editor to enable the toggling on or off of (a) dialogue tree repeatability and (b) whether the input text field should be shown on a dialogue branch.

-- implemented the check box in the cut scene and map editors as a way to set scenes to "unsaveable," meaning that the game won't auto-save during them and the player won't be offered the option to save manually. Intended for use during "Game Over" scenes, end credits scenes, and other scenes that would render the save file unusable if the game were saved in them.

-- created a "number picker" UI element for allowing the player to increment and decrement integer values.

-- redesigned the mechanism for switching between rosters in the Edit Rosters window using the number picker (unsurprisingly, testers had found the old design--which used a text field--to be unintuitive).

-- the game now saves a saveability attribute for scenes, and loads it when scenes are loaded. (If the game doesn't find the attribute, it just assumes the scene is saveable by default.)

-- updated the font on the input text field to match the font used everywhere else in the game.

-- changed the inventory input field in the Unit Properties window in the map editor to multiline.

-- fixed: when a cut scene with an active dialogue window was open in the cut scene editor and the player tried to load a new cut scene, the game would fail to refresh the cut scene preview in the editor.

-- fixed: the map editor would ignore your chosen facing when painting a generated unit onto the map.

-- fixed: the map editor would swap the values for each unit's inventory and triggers when first loading up a map.
Title: Re: A new engine!
Post by: CraigStern on January 25, 2019, 04:05:23 PM
-- implemented the Post-Battle Looting condition in-game! If set to true, all loose item sacks on the battlefield are gathered up and put into the player's reserve supplies after the player wins the battle.

-- added a new, optional 16th parameter to the script actions GenerateUnit and GenerateUnique: auto-recruit. Takes an integer from 0-9. If used, it recruits the generated unit to the specified roster as soon as the unit is generated.

-- GenerateUnit and GenerateUnique can now be used in cut scenes! The easiest way to make units generated in this fashion usable will be to auto-add them to a roster; however, when a unit is generated via GenerateUnique in a cut scene, the game will set the custom string _GeneratedUnit equal to their name, enabling you to easily reference the new character for other purposes (like dialogue and a subsequent AddSpeakerPortrait action, for instance).

-- the game will now no longer generate characters with the same first name as any other saved character (i.e. any character that's in the player's army), or as any other character in the same recruitment line-up.

-- fixed: the cut scene editor threw a null error when trying to add the "Click to continue" text at the bottom of cut scene narration in the preview pane.

-- fixed: you couldn't select empty save slots to save in mid-battle.

-- fixed: when, multiple pages into the new object window, you started typing to narrow down the listed objects, the game would display the same (usually blank) page of the narrowed results instead of showing you the first page of results.
Title: Re: A new engine!
Post by: CraigStern on January 26, 2019, 11:08:37 PM
-- improved the stat modification effects of "superb" and "peerless" quality on generated shields and main gauches by 1 and 2, respectively.
Title: Re: A new engine!
Post by: CraigStern on January 27, 2019, 12:27:47 PM
-- I decided that RosterToList was not robust enough for all of my purposes, so I've created an additional script action that lets you drill down and create a List of units who meet a variety of specific criteria: UnitsToList! UnitsToList has 4 parameters: (1) the name of the list to populate with the results; (2) the army number (if in battle) or roster number (if not in battle) to draw from; (3) a list of stat conditionals all of the units have to meet to get on the list, delimited with bars (|); and (4) a list of attribute or tag conditions all of the units have to meet to get on the list, delimited with bars (|).

    -- each stat conditional in UnitsToList functions like the first 3 parameters in IfStatRun; each contains three parts (though in this case, delimited with colons): the name of the stat to check:the comparison method:the value to check it against. (To get units with Level greater than 5, for instance, you'd use Level:g:5). You can use string stats here as well, though the comparison method becomes true or false. (To get units whose Class is not Axefighter, for instance, you'd use Class:false:Axefighter).
    -- the attribute/tag conditionals in UnitsToList function similarly to the string stats in the stat conditionals; but instead of specifying a stat name, you'll use Personality, Physical, Life Skill, or Tag. (To get characters with a Serious personality trait, for instance, you'd use Personality:true:Serious.) Tags can take an additional part, for matching tags with a particular value assigned to them. (To get characters with a TargetValue,2 tag, for instance, you'd use Tag:true:TargetValue:2.)

So! Let's say that you've got a battle, and you want to run a custom event on turn 12 where a bunch of units are hit with a status effect due to some sort of crazy psy-related event. Suppose you need a List of every character in army 0 who has Mental Resistance less than or equal to 25, is not a Golem, and lacks the custom tag EventImmune. That's one army number, two stat conditionals, and one attribute conditional. Here's how you'd use UnitsToList to create that List of units to affect:

UnitsToList/AffectedUnits,0,Mental Res.:l=:25|Race:false:Golem,Tag:false:EventImmune

Given how complex UnitsToList can be to use, I've left RosterToList in the game as a quick-and-easy alternative for times we just need to quickly get a list of the player's characters outside of battle without being too picky about it.
Title: Re: A new engine!
Post by: CraigStern on January 28, 2019, 04:42:30 PM
-- when mousing over unit portraits in the deployment screen, the game now shows tooltips with more detailed unit information (such as current experience, health, and energy) of the sort shown when mousing over a unit during the battle.

-- you can now right-click each unit portrait in the deployment screen to open up the unit's character screen for detailed information on their stats, skills, and inventory.

-- fixed: units with 0 health (but no remaining wound levels) were included in deployment, even though they'd just poof off the battlefield the moment the first turn started.

-- fixed: a bug where an animation event at the conclusion of the pop-up damage "bounce" wasn't firing correctly.
Title: Re: A new engine!
Post by: CraigStern on January 29, 2019, 02:17:49 PM
-- the presence of an item sack on a space now impacts the AI's decision whether to move there (proportionately to how full of items the sack is).

-- ditched the morale report screen (and the ShowMoraleReport action) in favor of a generalized report screen that can be summoned via the new, more flexible ShowReport action. The new action takes two parameters: (1) report title and (2) report text. (You can break the report text into different pages using the verticle bar character as a delimiter.) ShowReport can summon a report screen in both cut scenes and battle.

-- implemented the objectives window in battle via the report screen. The objectives window can now be called up in battle via the Settings menu.

-- new special character, the double-semicolon (;;)! When this character is detected in text, the game swaps in a comma. This allows you to use commas in your script action parameters without totally screwing things up! (The game uses actual commas to delimit script action parameters--using the double-semicolon in script action parameters allows you to sidestep this effect.)

So, for instance, you can create an objective containing a comma using AddObjective in this fashion. This...

AddObjective/Experiment with the Undo button;; then end the turn.

...becomes what you see in the screenshot below.

-- new script action: ListToString. This joins together all the entries of a List, in order, to create a single custom string value. Three parameters: (1) list name, (2) connector, and (3) custom string name.

Suppose you had a list named Letters with three entries (A, B, and C)--if you did this...

ListToString/Letters,-,LtrString

...it would create a custom string LtrString with the value A-B-C. Or, if you used the new ;; special character...

ListToString/Letters,;; ,LtrString

...it would create a custom string LtrString which displays as A, B, C.

-- the RemoveObjective action no longer requires an exact match with the parameter--instead, it will check to see if the objective contains the parameter string as a substring. (For instance, to remove the objective "Find Nathalie," you can call RemoveObjective/Find or RemoveObjective/Nathalie.)

-- battle objectives now support special characters and custom variables; these are processed appropriately when displaying the Objectives Screen.

-- fixed: the game wasn't supplying a second character for purposes of processing special characters in Attacking and Healing combat barks.
Title: Re: A new engine!
Post by: CraigStern on January 30, 2019, 02:04:30 PM
-- created a new Army Overview interface that lays out all the units in a given roster in table format, displaying their name, species, class, level, experience, morale, current/max health, current/max energy, daily food consumption, and monthly salary. Mousing over a unit's row in the table highlights it; units that have 0 health remaining have their rows redded-out. Mousing over the icons at the top of the table offers an explanation of what the numbers mean.

-- new script action: ShowArmyOverview. Cut scene only; it displays the army overview interface for a given roster of units. One parameter, optional: roster number. (If not used, the game displays the current roster by default--which, at the moment, is always 0.)

-- implemented two new special characters offering support for • and ♥ in text. These, are, respectively:
[*]
-HEART-
Title: Re: A new engine!
Post by: CraigStern on January 31, 2019, 09:15:40 PM
-- music can now play continuously between scenes rather than automatically cutting out at every scene change! When changing from one scene to a second scene that uses the same background track (or has a blank musictrack attribute), the game continues playing the existing music from the initial scene.
Title: Re: A new engine!
Post by: CraigStern on February 01, 2019, 04:28:50 PM
-- for all combat barks except for deployment barks and defeat barks, the dialogue window now now auto-closes a couple of seconds after it finishes typing out the dialogue so as to render barks less obtrusive to the flow of battle.

-- created a little inspector window in both battle and in the map editor that tells you the coordinates, terrain type, and elevation of every tile as you mouse over it. (In battle, it's turned off by default, but can be toggled on with Shift + T.)
Title: Re: A new engine!
Post by: CraigStern on February 03, 2019, 10:34:52 PM
-- the game now animates the energy bar refilling when characters regain energy at the start of a turn.

-- added a "level up" sound effect to the game accompanying the appearance of the level up screen.

-- added deployment music to the game.

-- added placeholder title screen music to the game.

-- fixed: it was possible to "skip" cut scene menus using the escape key.
Title: Re: A new engine!
Post by: CraigStern on February 04, 2019, 05:20:38 PM
-- clicking on a unit's row in the army overview interface now opens up their character screen for a more thorough inspection.

-- the AI now grays out units once it's done with them, making computer turns much easier to follow.

-- implemented a 2-second delay in the AI system between an AI character getting killed/Stunned/Frozen/Enthralled during its turn, and the AI going off to the races with new moves. (This makes it much easier to follow what's going on in these situations.)

-- the level-up screen got a bit of visual polish; it now fades out instead of just insta-vanishing when dismissed, and uses bolded arrow symbols instead of > symbols to denote stat changes.

-- fixed: clicking (or hitting escape) on the level-up screen when there was a message there showing new skills and/or proficiencies would close the whole screen instead of closing the message.

-- fixed: the descriptions in the resistance stat mouseover tooltips in the level-up screen could sometimes get cut off.

-- fixed: the name and class/level/experience lines on unit mouseover tooltips could sometimes get cut off.

-- fixed: the status effect icon would not go away on the same turn a status effect wore off.

-- fixed: mousing over units while moving would cause their health bar to display in the wrong spot.

-- fixed: the AI would wig out whenever one of its units acquired Stunned or Frozen status mid-AI-turn, as it would attempt to continue executing the old list of moves even as it recalculated its moves. (This one took a stupidly long time to fix due to the difficulty of tracking down and killing the offending coroutines at the right place in the code.)
Title: Re: A new engine!
Post by: CraigStern on February 05, 2019, 03:09:41 PM
-- the AI now accounts for the fact that backstabbed targets can't counterattack.

-- made a version of the the terrain inspector for battle; it drops the coordinate display in favor of displaying any damage from the space, the element of the damage, and any stat bonuses or penalties the space provides.

-- created a Drowning element symbol for purposes of correctly displaying drowning damage from water tiles.

-- added a button to toggle the terrain inspector on and off during battle to the Action bar.

-- added the 'G' hotkey as a shortcut to the Grab button, and the 'T' hotkey as a shortcut to the Talk button in battle.

-- added the shortcuts to the tooltips for all the major Action Bar buttons in battle.

-- added a tutorial bit about regaining energy in battle to Battle at the Oasis.

-- increased the Energy cost for Pinning Shot from 2 to 4 to make it less overpowered as a tool in smaller battles.

-- fixed: the terrain inspector would remain visible onscreen during dialogue, combat exchanges, and enemy turns.

-- fixed: if you were on the "Sell" page of the shop and you moved items around between units and the reserve supplies, the shop would not auto-update the listed items you could sell unless you clicked on the "Sell" category again.

-- fixed: the game would sometimes freeze in combat due to inappropriately paused pop-up text that it would then wait to complete animating before proceeding (which the pop-up text would never do, of course, because it was paused).

-- fixed: returning to the title screen and triggering a sound effect would produce an error as the game attempted to refer to the old audio source.

-- fixed: script actions, items, and equipment that boost character Speed were not boosting the character's maximum steps along with it.
Title: Re: A new engine!
Post by: CraigStern on February 06, 2019, 04:07:00 PM
-- the game now notices when you right-click empty spaces on the battlefield, and treats it as though you'd pressed the Escape key.

-- you can now close the character and level-up screens by clicking anywhere onscreen, not just on the specific area of the screen covered by the UI.

-- wrote a new event where one of your characters comes to you to ask for a raise.

-- updated some item descriptions.

-- caffeine pills now cure Immobilized status as well as Slowed.

-- added a camera panning tutorial to the start of the Overgrown Garden fight.

-- added mouseover tooltips to all the menu buttons on the title screen.

-- fixed: in the Oasis battle, enemies were improperly named and the chest was left empty.

-- fixed: a typo was preventing the traveling merchant event from executing properly in camp.

-- fixed: I accidentally made it so the level-up screen wouldn't appear when it was supposed to in cut scenes.

-- fixed: units were turning to face the right whenever they used a skill on themselves.
Title: Re: A new engine!
Post by: CraigStern on February 07, 2019, 02:58:35 PM
-- a fun new feature I threw into the game: skills can now have scripts attached to them via the runsScripts attribute, just like items!

When used, a skill with runsScripts on it will run each script once for each target that the skill hits. (For purposes of special characters in skill-initiated scripts, the game will treat the attacker as the triggering character, and each individual unit hit by the attack as though it is the secondary character.)

Here's an example skill using runsScripts: Cheer Up! When used, it runs CheerUpSkillScript on every unit surrounding the skill-user:

<Atk element="Shield" name="Cheer Up!" img="Stimulate" cost="2" minRange="0" maxRange="0" runsScripts="CheerUpSkillScript" shkMag="0.1" shkDur="0.2" psyDmgFactor="0" backstabFactor="1" sidestabFactor="1" accMod="0" affects="None" afterAtk="Use Once"  AOE="3/1,1,1,1,0,1,1,1,1" particles="Sparks" targeting="constrained" moveType="Normal" knockback="0" dependsUpon="" impactFrame="-9" soundAndFX="SFX[Charge Up:0],SFX[Mind Blast:8],VFX[MentalEffect:OnTargets:12]" desc="+1 morale, +2 energy."></Atk>

In turn, CheerUpSkillScript (which resides in PersistentDialogue.xml) adds a flat +1 to Morale and -2 to the target's Drain:

<Script>
CheerUpSkillScript
<Action>SetStat/-FNAME2-,Morale,+:1</Action>
<Action>SetStat/-FNAME2-,Drain,-:2</Action>
<Action>SpawnFloatingText/Cheered up!,-FNAME2-,Yellow,45</Action>
</Script>


Amusingly, I've also used this new functionality to mock up a rudimentary but perfectly adequate version of Juxtapose...

[spoiler]Here's the skill:

<Atk element="Shield" name="Juxtapose" img="Next Character" cost="4" minRange="1" maxRange="2" runsScripts="JuxtaposeSkillScript" shkMag="0.1" shkDur="0.2" psyDmgFactor="0" backstabFactor="1" sidestabFactor="1" accMod="0" affects="None" afterAtk="Use Once" AOE="1/1" particles="Smoke" targeting="free" moveType="Normal" knockback="0" dependsUpon="" impactFrame="-9" soundAndFX="SFX[Charge Up:0],SFX[Mind Blast:8],VFX[MentalEffect:OnTargets:12]" desc="Switch spaces with target character."></Atk>

And here are the scripts:

<Script>
JuxtaposeSkillScript
<Action>SetStringByStat/TargetCategory,-FNAME2-,Category</Action>
<Action>IfStringRun/TargetCategory,character,Juxtapose</Action>
</Script>

<Script>
Juxtapose
<Action>SpawnParticlesAt/Smoke,-Y-,-X-</Action>
<Action>SpawnParticlesAt/Smoke,-CHAR2Y-,-CHAR2X-</Action>
<Action>SetVal/Y1,=:-Y-</Action>
<Action>SetVal/X1,=:-X-</Action>
<Action>SetStat/-FNAME-,Coords,-CHAR2Y-:-CHAR2X-</Action>
<Action>SetStat/-FNAME2-,Coords,-VAL:Y1-:-VAL:X1-</Action>
</Script>

[/spoiler]

-- new special characters: -FNAME2- and -LNAME2-. Same as -FNAME- and -LNAME-, but for the secondary character.

-- new special character: -DMG-. When used in a script run by a skill, the game will sub in the final damage done to the skill's target after accounting for resistance, backstab effects, elevation, and so on.

-- changed the scripting on battles with OnTurn/0-triggered tutorial conversations so that if tutorials are turned off, the player will hear deployment barks instead.

-- proc gen units are now generated with 2 deployment barks instead of 1, to avoid excessive repetition.

-- fixed: the Escape key wasn't closing the new turn box in battle.

-- fixed: OnLoaded dialogue wasn't being run during battle.

-- fixed: the game was making the Actions Bar show up beneath the New Turn Box following OnLoaded dialogue.

-- fixed: AddStatusAt would make the game freeze if used on a space without a character, and wouldn't work on spaces containing only destructible objects.

-- fixed: SpawnParticlesAt was spawning particles in totally the wrong locations.
Title: Re: A new engine!
Post by: CraigStern on February 08, 2019, 04:25:27 PM
-- developed a new Engineer skill using the new skill script capability: Place Lit Charges. It's essentially the same as Place Charges, but it runs a script that gives the charges Burning status right after they're created. (Left to their own devices, the charges will explode on their own 2 turns after being placed due to Heat damage from Burning.) Very simple, but very handy! :)

-- officially implemented Juxtapose as a Move skill with moveType of Special. Which brings me to...

-- new supported movement type for Move skills: Special. As with Teleport, this tells the game to ignore intervening obstacles; however, it also tells the game, when placing down red attack tiles, to ignore the presence of a character on the target space (which would otherwise prevent the game from placing a tile down there). Further, it tells the game not to actually move anything on its own when the skill is used--for a Special Move skill, all movement is instead expected to be handled via scripts!

-- generated Engineers will now learn either Build Stone Barricade or Place Lit Charges as an advanced skill--but not both. (Which one they'll eventually learn is chosen randomly at the moment they're generated.)

-- generated Spirits will now learn two of the following three as advanced skills: Possess, Drain, and Juxtapose. (The two they'll eventually learn are chosen randomly at the moment they're generated.)

-- premade units now support the attribute statFXImmunities, rendering them immune to certain types of status effects (e.g. Golems and Spirits can be rendered immune to Poisoned). To impart multiple immunities, delimit with a forward slash.

-- went through and made every destructible object in the game immune to "mental state" status effects: Alert, Blinded, Distracted, Enthralled, Focused, Lucid, and Stunned.

-- dropped the base Energy regen from neither moving nor acting from 5 back down to 4, thus making rest and good morale more important (a character with good morale will regain 5 energy from standing still for a turn due to the +1 boost).

-- when right-clicking an object, the game now shows the object sprite in the character screen wherever the character portrait would be.

-- the reserve supplies screen now instructs the player to give items to characters first when they try to use or equip them within the actual reserve supplies.

-- two new special characters for use with skill scripts: -ATKX- and -ATKY-. These return not the coordinates of the attacker, not the coordinates of the current target, but the coordinates of the red attack tile that was clicked in order to launch the attack. (Useful for scripting custom effects for AOE skills relative to the skill's "center"!)

-- the campaign editor now supports deleting scenes! (The game will prompt you first to make sure you intended the click before deleting anything.)

-- fixed: the game would not let you choose an empty save slot when doing a mid-battle save.

-- fixed: the game would freeze if a dead unit killed another unit with its onDeath attack (e.g. explosive charges killing other explosive charges with Explode).
Title: Re: A new engine!
Post by: CraigStern on February 10, 2019, 06:56:23 PM
-- the AI now notices when a skill has scripts attached to it, and will treat that skill as having some effect even if the skill deals 0 damage and imparts no status effects directly!

-- new tag: SkillPreference. This lets you place a proverbial finger on the scales with a unit's AI, making the unit more (or less) likely to use a particular skill. Two parameters: (1) skill name, and (2) an operation (i.e. operator:operand). Unlike operations elsewhere in the game, this one uses a float for the operand instead of an integer (because it touches on the AI), and doesn't support floor/ceiling operators (because it's not working with integers).

For example: suppose you wanted to double the AI's internal "score" for moves involving Mind Shield on a certain unit; you'd give that unit the following tag: SkillPreference,Mind Shield,*:2.0

-- there is now a separate window of all browsable in-game skills that you can use to populate the Skill Progression field in the character creator. The window checks to ensure that the character is learning skills at a specified level above 1, and that the character does not already start with the skills selected to learn later.

-- the character editor now throws an error if you try to proceed from the skills screen with the same skill in both Skills and Skill Progressions.

-- improved the camp activity narration for the "Alone" activity.

-- made Dialogue and Script boxes different colors in the dialogue editor to make them easily visually distinguishable.

-- fixed some hair alignment issues with a few of the female human hair types.

-- fixed a variety of not-terribly-interesting bugs.
Title: Re: A new engine!
Post by: CraigStern on February 11, 2019, 05:34:56 PM
-- conditions now support the use of custom variables! Which is to say, you can slot in -VAL:-, -STR:- and LIST{} special characters to set Condition parameters on a map based on player decisions from prior scenes--or even just at random.

-- moved the triggering of OnLoaded dialogue forward so that it triggers before most starting battlefield conditions (all of them except for NewArmy, SetArmyAlliance, SetArmyColor, Deployment, and RosterNumber) go into effect. This provides an opportunity to shift variable values impacting battle conditions at the very start of the battle!

Here, for instance, is OnLoaded dialogue that successfully randomizes Global Lighting for a map with a Global Lighting,-STR:Lighting- condition:

<Dialogue trigger="OnLoaded" convID="Random Lighting" r="false">
<Branch num="0" name="">/
<Action>SetStr/Lighting,PICK{Daylight|Overcast|Night|Sunset|Dawn|Lava}</Action>
<Action>EndConvImmediately/</Action>
<Reply>Done./EndConv</Reply>
</Branch>
</Dialogue>


-- implemented the Roster Number condition in both battle and cut scenes, allowing switching of the current roster for purposes of recruitment, camp activities, and battle deployment.

-- implemented the Fatigue condition in battle, allowing different armies to start with varying amounts of Energy missing.

-- implemented the Space Bonus and Space Damage conditions in battle, allowing the editing of individual space properties.

-- implemented the new Death Rules condition, replacing the old Permadeath condition. Death Rules takes one of the following four strings as its sole parameter: Permadeath/Wound Level/Back at 1/Back at Full.

If Death Rules are set to Permadeath, fallen characters are immediately removed from all rosters, per the Telepath Tactics default; if set to Wound Level, fallen characters  are gone until recovered (whether via camp activities or a SetStat action); if set to Back at 1, fallen characters return in the next scene with 1 health; and if set to Back at Full, fallen characters return in the next scene at full health.

Death Rules can also be set to some other, arbitrary string, in which case death will have no inherent effect whatsoever beyond the character being removed from the current battle. (Note that regardless of what Death Rules are in play, you can still institute custom effects for fallen characters via OnCharDeath dialogue.)

-- implemented a third difficulty setting, "Brutal." The three difficulty settings, in addition to changing prices for recruitment and items, change the Death Rules for the campaign (Relaxed = Back at 1, Challenging = Wound Level, and Brutal = Permadeath).

-- created documentation for all existing operators in the game.

-- began documenting all existing conditions in the game.

-- began work in an in-game scripting reference allowing the player to browse all supported Actions, Replies, Conditions, Triggers, Tags, Operators, etc. in-game while editing a campaign.

-- fixed: the game would crash when loading a non-deployment battle with unused FromPlayerRoster spawn locations.

-- fixed: the AI wouldn't bother attacking with Blinded characters due to their zeroed-out accuracy. This was unsatisfying, so the AI now ignores Blinded status for purposes of weighing whether to attack with someone. :)

-- fixed: a few annoying timing errors during AI-controlled turns.

-- fixed: temporary status effects were not getting removed from characters after battle.
Title: Re: A new engine!
Post by: CraigStern on February 12, 2019, 05:30:33 PM
-- new background received and added to the game: prison!

-- fixed: the game was only applying space damage to spaces possessing a phase attribute of liquid.

-- fixed: the terrain inspector window wouldn't update with space properties when mousing over a space containing a unit or a UI tile.
Title: Re: A new engine!
Post by: CraigStern on February 13, 2019, 05:06:33 PM
-- created a new custom variable type: the Area! Areas are rectangular spaces with bounds corresponding to coordinates on the battlefield.

-- new script action: SetArea. Takes 5 parameters: (1) Area Name, (2) topmost Y coordinate, (3) bottom-most Y coordinate, (4) leftmost X coordinate, and (5) rightmost X coordinate.

-- new script actions: IfInAreaGoTo and IfInAreaRun! These check to see if a character is present on the battlefield, and if so, whether the character is within a defined area--if so, the associated thing (going to the branch or running the script) happens. Takes 5 parameters: (1) Area Name, (2) Character Name, (3) Branch Number/Script Name, and (4) Check For Absence (true or false -- optional). If (4) is set to true, the thing will happen only if the character is present on the battlefield and not within the specified area.

These replace the (far more cumbersome) old IfOnCoordsRun action.

-- new dialogue trigger: OnReachingArea! This works exactly like OnReachingSpace (which it is replacing) did, except that it takes the name of a custom area instead of coordinates. Parameters: (1) Area Name, (2) Character Name (or -ANY-; optional), and (3) Army Number (optional).


-- new script action: SkillsToList. Three parameters: (1) Character Name, (2) List Name, and (3) Natural Only (true or false -- optional). Creates a list with the names of all skills the character currently possesses. If the third parameter is left blank (or set to false), the list will include both natural skills and skills granted by the character's equipment; but if set to true, the list will only include natural skills (i.e. nothing deriving from an equipped item).

-- new script action: RemoveSkill. Two parameters: (1) Character Name and (2) Skill Name. Removes the specified skill from the specified character's natural skills.

-- new script action: InvToList. Two parameters: (1) Character Name (or Reserve Supplies, or a roster number), and (2) List Name. Creates a list with the names of all items in the specified inventory; each named item's position in the list corresponds to its position in the inventory. (Using Reserve Supplies as parameter 1 will select the current roster's reserve supplies, while using a number will select the reserve supplies of the specified roster.)

-- new script action: RemoveItem. Two parameters: (1) Character Name (or Reserve Supplies, or a roster number), and (2) Item Position or Item Name. Removes the item specified from the specified inventory.

Using Reserve Supplies as parameter 1 will select the current roster's reserve supplies, while using a number will select the reserve supplies of the specified roster; using a number for parameter 2 will remove from the selected position n the inventory, while using a string will search for the first item whose name contains the string.

-- fixed: you could use Give Item to get more than 12 items into a character's inventory.

-- fixed: a Kill-All Victory could trigger while enemy reinforcements remained waiting to spawn.
Title: Re: A new engine!
Post by: CraigStern on February 14, 2019, 04:19:14 PM
Gave artist feedback on internal wood floor tiles with "house wall" sides and new, 1-width cliff terrain tiles.

-- the recruitment screen now has a button providing fast access to the Army Overview interface so you can make more informed decisions while recruiting!

-- when accessed with no units in the player's current roster, instead of remaining confusingly blank, the Army Overview screen now displays the message "No characters to display."

-- the terrain inspector in the map editor now displays coordinates in y , x order to be consistent with the order used in script actions. Further, it now labels the x and y coordinates for greater clarity.

-- the character creator now checks to ensure that all counterattacks given to a character are real skills that exist, and throws an error if they don't.

-- new script action: MasteriesToList. Two parameters: (1) Character Name and (2) List Name. Creates a list with the names of all equipment masteries the named character possesses.

-- new script action: LearnMastery. Two parameters: (1) Character Name and (2) Mastery Name. (For multiple masteries, delimit Mastery names with vertical bars.) The named character learns the named mastery/ies.

-- new script action: RemoveMastery. Two parameters: (1) Character Name and (2) Mastery Name. Removes the specified mastery from among the specified character's equipment masteries.

-- made lissit somewhat less common during recruitment in the main campaign.

-- fixed: the game would not show the effects of newly recruited characters' equipment on their stats and skills in the character screen until they first appeared in a battle.

-- fixed: some issues with the display of weather effects.

-- fixed: the UV-free tiling shader on water and lava tile materials somehow got switched out for a mobile diffuse shader.
Title: Re: A new engine!
Post by: CraigStern on February 15, 2019, 03:22:18 PM
-- designed and implemented a "space selector" UI element that shows the space you're currently moused over at all times during your turn. This should eliminate any ambiguity about what you're about to click during your turn (and also constitutes a necessary precondition to adding in controller support).

-- removed those ugly placeholder asterisks denoting spaces you'll be moving through and replaced them with slightly less placeholder-y, less ugly directional arrows.

-- reduced the opacity of enemy move range tiles to make it easier to see your own movement tiles when they overlap.

-- fixed: cliff fill tiles weren't set as children of the battlefield in either the main game or the map editor, cluttering up the base level of unity's hierarchy whenever they were instantiated.
Title: Re: A new engine!
Post by: CraigStern on February 18, 2019, 04:58:34 PM
-- on the title screen Load Game menu, the game now detects the most recently saved saved game and automatically opens to the page where that save file appears.

-- in the mid-battle Save Game menu, the game now detects the most recently used save game slot (for either saving or loading), and automatically opens to the page where that save slot appears.

-- the space selector element is now hidden during dialogue, during attacks, in between turns, and throughout AI turns.

-- during deployment, the space selector now appears only over valid deployment tiles.

-- new script action: AddReply. This adds a new reply to a specified branch of a specified dialogue tree. Three parameters: (1) Conv ID, (2) Branch Name or Number, and (3) Reply Text|Reply Type|Reply Parameters. If parameter 1 is left blank, the game will apply this action to the current dialogue tree. The vertical bars in parameter 3 will be converted into forward slashes, and whatever is typed there will be treated as a normal reply.

-- new script action: RemoveReply. This removes a specified reply from a specified branch of a specified dialogue tree. Three parameters: (1) Conv ID, (2) Branch Name or Number, and (3) Reply Number or Reply Containing Text. If parameter 1 is left blank, the game will apply this action to the current dialogue tree. If a number s not entered for Parameter 3, the game will find the first reply containing whatever text is entered as a substring.

-- the main campaign now remembers when you ask peoples' names in the Recruitment and Arena scenes, and removes the reply options allowing you to trigger the introductory name dialogue again from future interactions.

-- removed the Order Introductions button from camp; the character intros are a really important part of learning about the characters and who they are, and I wasn't satisfied with the player experience of getting to know one's characters when they were taken out of the equation.

-- the character creator now throws an error when you try to proceed with a character inventory containing more than 12 items in it, and explicitly tells you to reduce the number of items to 12 or less.

-- fixed: due to some outdated code, the game would refuse to show dummy tiles when mousing over skill buttons in the Actions Bar after a character screen had been opened and closed.

-- fixed: the title screen wasn't letting the player select a save slot for a new game beyond the first page of slots.

-- fixed: the game would display the victory screen at the same time as a level-up coinciding with the battle-winning attack, provided that that was the only level-up queued to occur at that moment.
Title: Re: A new engine!
Post by: CraigStern on February 19, 2019, 05:01:14 PM
-- the engine now parses the soundAndFX attribute on skills, stores information about the sound and visual effects associated with queued attacks, then queues up said effects with their associated timing info as soon as each queued attack launches. Then, the game checks a counter for each queued-up effect on each frame.

-- the game now plays skill sound effects on their associated frames in combat.

-- the game now tries to play skill visual effects of the OnTargets type on their associated frames in combat. (Only a fraction of these are actually currently implemented, as I have to create each animation by hand.)

-- added all the old sound effects into the gameso that they can be called at runtime.
Title: Re: A new engine!
Post by: CraigStern on February 20, 2019, 05:32:18 PM
-- the game now tries to play skill visual effects of the OnSelf and OnCenter types on their associated frames in combat.

-- created skill effect animations for Mind Blast, Mind Shield, Mind Shock, and for the final ("impact") portions of Pyro Blast, Cryo Blast, Light Blast and Shadow Blast.

-- restructured the visual effects class in order to allow visual effects to move over time and emit light onto the scene.

-- the game now marks visual effects complete after they're done animating, and removes completed visual effects from the scene.

-- worked on fixing some issues with visual effect positioning, with limited success.
Title: Re: A new engine!
Post by: CraigStern on February 21, 2019, 04:21:11 PM
-- the sound manager now has 12 distinct one-shot sound effect channels.

-- added 4 looping sound effect channels to the sound manager.

-- the sound manager now auto-assigns each one-shot sound effect and loop to the first unused channel of its type, allowing different sound effects and loops to overlap each other.

-- new script action: PlayLoop. Plays a sound effect on a loop. One parameter: the name of the sound effect to loop.

-- the sound manager now tracks which sounds are being played in which channels, allowing them to be looked up by name and affected during playback.

-- new script actions: StopMusic, StopLoop, and StopSound.

StopMusic simply stops the current music; no parameters needed.

StopLoop and StopSound each take one parameter: the name of the sound effect to stop. (If left blank, all looping/one-shot sound effects will stop playing when the respective action is called.)

-- added a tutorial about ranged attacks to the Overgrown Garden battle.

-- added a bowman to the Overgrown Garden battle, demonstrating how ranged attacks work to reinforce the tutorial (and also making the fight a little more interesting in the process).

-- moved the "scouting out enemies" tutorial to the Grabber's Grove fight, where it's more relevant.

-- changed the sorting of battle UI elements so that text overlays no longer cover over dialogue, character, reserve supplies, or level-up screens.

-- made further progress on the proper positioning of skill visual effects.
Title: Re: A new engine!
Post by: CraigStern on February 22, 2019, 04:27:22 PM
-- the game's sound manager now supports distinct global volume settings for music, sound effects, and dialogue.

-- new script action: PlayDialogue. This is exactly the same as PlaySound, except that it marks the sound effect as voice-over dialogue. The game will use the global volume setting for dialogue instead of the global volume setting for sound effects.

-- it is now possible to alter the volume of individual music and sound effects in the game programmatically; these volume changes occur relative to the associated global volume level.

-- three new script actions: SetMusicVolume, SetLoopVolume, and SetSoundVolume.

SetMusicVolume has one parameter: a float value (i.e. a decimal) between 0 and 1. Setting it to one 1 makes the current music track play at 100% of the global music volume level; setting it to 0 makes it play at 0% of the global music volume level; setting it to 0.5 makes the music play at 50% of the global level; and so on.

SetLoopVolume and SetSoundVolume behave the same way, but have two parameters: (1) the name of the sound effect to alter the volume of (as in the "Stop" actions) and (2) the volume level (as above).

-- the sound manager now supports tracks fading between volume levels over time.

-- three new script actions: FadeMusic, FadeLoop, and FadeSound.

FadeMusic has two parameters: (1) a float value (i.e. a decimal) between 0 and 1 representing the target volume to fade to, and (2) a float value representing the rate at which the music fades toward the target volume. (A rate of 1.0 is fairly slow.)

FadeLoop and FadeSound are the same, but start with an optional sound name parameter. As with the other actions, if this parameter is left blank, the game will fade all currently playing loops / one-shots toward the target volume at the specified rate.

-- the main campaign now fades out the music from camp as the calendar scene plays leading into the next day.

-- added a second music channel as a necessary precondition to support cross-fading music tracks in the future.

-- added a new "biographical details" reference to characters. Once fully implemented, this will allow me to have the game generate dialogue for them exploring various aspects of their past on the fly.

-- fixed: generated characters newly recruited via the Recruitment interface wouldn't appear in the Army Overview (or become usable in general) until after you switched scenes.
Title: Re: A new engine!
Post by: CraigStern on February 26, 2019, 03:36:46 PM
-- created a handful of new passive abilities; added a new "category" attribute to passive abilities to determine how the engine behaves with them.
Title: Re: A new engine!
Post by: CraigStern on February 27, 2019, 04:24:29 PM
-- created a handful of new passive abilities; the list of (not actually implemented yet) passive abilities now tops 40.

-- added a new "reqStats" attribute to passive abilities to permit passives that only take effect when the character is at a certain stat threshold (e.g. when below 50% health).

-- new script action: CompatibleUnitsToList. This creates a list containing the names of all characters who are romantically compatible with a specified character. Parameters: (1) list name, (2) character name, (3) army number/roster number (optional), and (4) ignore genes (optional).

If parameter 3 is -1, the game will check all rosters (if in a cut scene) or armies (if in battle); if not, it'll check the specified roster or army. Parameter 4 is false by default, imposing a roughly 50% chance that two characters won't find each other attractive even if they are the same species and meet one another's gender preferences--if set to true, the character will be listed as romantically compatible with every character that matches species and gender preferences.

-- fixed: the delay between queued pop-up messages on the same space would increase with each subsequent message.

-- fixed: the "Grabbed Sack!" pop-up message would appear simultaneously with pop-up messages associated with automatic-type items from within the grabbed sack.

-- fixed: the game was still displaying pop-up messages for status effects that the target was immune to (and therefore did not actually receive).
Title: Re: A new engine!
Post by: CraigStern on February 28, 2019, 04:54:55 PM
-- new script action: RecruitByName. Two parameters: (1) Character name or ID[] tag and (2) Roster number. This allows dynamic recruitment of a particular character who does not possess a distinct Load ID (or indeed, possess a Load ID at all) outside the context of the recruitment menu.

Unlike its sibling action Recruit, RecruitByName will not work on characters who are not saved from a prior battle (if used in a cut scene), and it will not work on characters who are neither saved from a prior battle nor present in the current battle (if used in a battle). 99 times out of 100, you're going to want to use this action for in-battle recruitment of generic or procedurally generated units, as Load ID does not serve as a marker of individual identity for such units.

A couple of new script actions to make scripting using lists easier and more robust:

-- new script action: CombineLists. Sets a list to contain copies of all the entries from List 1 and all the entries from List 2, in that order. Three parameters: (1) List 1 name, (2) List 2 name, and (3) destination list name (optional). If the third parameter is blank, List 2's entries will simply be added onto the end of List 1.

-- new script action: CullListByList. Compares two lists: all entries in List 1 that are also found in List 2 will be removed from List 1. Three parameters: (1) List 1 name, (2) List 2 name, and (3) check for absence. The third parameter is a boolean and optional; if set to true, List 1 entries will be removed only if not found in List 2.

-- new supported comparison method for actions (and other things in the game engine) that compare integer values: !=  As you might expect, this stands for "not equal to." As long as the values being compared aren't equal, this comparison method will return true.

-- created documentation for all of the comparison methods supported in the engine.
Title: Re: A new engine!
Post by: CraigStern on March 01, 2019, 03:59:11 PM
-- the shop now reds out each item with a price greater than you can currently afford, and grays out each item that you can afford but which no character in your roster has the correct masteries to actually equip. This makes it much easier to narrow down relevant equipment at a glance!


The game is now up to 12 orbs:

-- added the Black Orb and the White Orb to the game, granting +50% shadow resistance and +50% light resistance respectively.

-- added the Azure Orb to the game; it grants a character the Levitate skill, as well as causing Levitate to cost 0 energy for that character.

-- added the Rejuvenation Orb (i.e. the Yellow Orb) to the game; it grants a character +2 to energy regeneration each turn in battle.

-- on a related note, the game supports a new tag: ModFocus. This lets you alter the amount of energy a character regenerates each turn in combat. Takes one parameter: an operation (e.g. +:2).

-- elemental resistance orbs remain equippable on the Off Hand, but all other orbs are now equipped on the Weapon Hand, allowing a psy user character with Orb Mastery to equip two orbs at the same time (but only one elemental resistance orb, per series tradition).

-- added all new orbs to the shop in the main campaign, where they may occasionally appear for sale!


And two more script actions to further increase the ease of using lists:

-- new script action: CullDuplicatesFromList. Removes all entries in the specified list which duplicate an earlier entry in the list. One parameter: list name.

-- new script action: CloneList. Creates an exact copy of an existing list. Two parameters: (1) name of the list to clone, and (2) name of the new list.
Title: Re: A new engine!
Post by: CraigStern on March 04, 2019, 05:33:42 PM
-- when clicking on a character's space (but not directly on the character itself) in combat, the game now behaves as if you'd clicked the character.

-- fixed: a graphical glitch in which attack tiles would sometimes overlay the space selector.

-- fixed: certain script actions would produce null errors when run in the editor due to the nonexistence of saved characters in that context.

-- fixed: the undo stack was not getting cleared between player turns, or following Create skills that placed holds onto the battlefield.

-- fixed: a bunch of the input text fields in the character creator were inappropriately set to "Single Line" mode.

-- fixed: if multiple copies of a saved unit were placed onto the battlefield, the game would treat them all as if they were the same unit--even if they belonged to different armies! The game will now only load the saved version of a character for the first copy of such a character that it places onto the battlefield, and rely upon new copies loaded from XML for the rest.
Title: Re: A new engine!
Post by: CraigStern on March 05, 2019, 05:08:02 PM
-- created a game settings window with separate selectors to change global music, sound effect, and voice-over dialogue volume.

-- the new game settings window is now directly accessible from the title screen, and via the options window in both cut scenes and battles.

-- the game now saves all global volume settings to a file whenever they are changed, and successfully loads global volume settings whenever the game loads.

-- new script action: GetDistBetweenUnits. Battle only. Set an integer variable equal to the distance (in spaces) between two units, ignoring terrain and obstacles. Parameters: (1) character 1 name or ID[], (2) character 2 name or ID[], and (3) variable name. Parameter 3 is optional; if not used, the variable set will be _Dist.

-- new script action: GetDistToSpace. Battle only. Set an integer variable equal to the distance (in spaces) between a unit and a space, ignoring terrain and obstacles. Parameters: (1) character name or ID[], (2) Y coordinate, (3) X coordinate, and (4) variable name. Parameter 4 is optional; if not used, the variable set will be _Dist.

-- improved the game's behavior concerning multiple load IDs that match a saved character. Unless the spawning unit is spawning for an army matching the last army the saved character appeared in, the game simply will not use the saved version of the character; it'll convert from XML instead, and assign the new copy of that character a new unique ID in the process. (All units assigned to a roster in a cut scene that have not yet appeared in battle have a default "last army" of 0.)

Independent of the above, if the game ever creates a character and it detects another unit with the same unique ID already on the battlefield, it now assigns the new character a different unique ID. (Note: while this will allow the battle to proceed as normal, if the game saves a copy of a character that has been assigned a new unique ID, this will cause other characters to regard them as a stranger going forward. For this reason, it is generally a bad idea to spawn multiple copies of a character that is on a roster, or is otherwise saved as part of the player's army!)
Title: Re: A new engine!
Post by: CraigStern on March 06, 2019, 03:33:58 PM
-- created a neat little "expanding ring of sparkles" visual effect for when a character levels up!

-- there is now an animation showing you which character is currently selected during your turn: a little spark running around the circumference of the character's "ring."

-- in the shop interface, when you click on equipment that no one in your roster can use, the game now pops up a warning about it and provides you a chance to cancel the purchase.

-- the shop in the main campaign now prompts you to distribute items and equip equipment before you leave, with an option to immediately open the reserve supplies screen for that purpose.

-- the camp scene in the main campaign now displays the Hold Gathering button grayed-out after an event; if clicked, it explains that there is no longer time to hold one.

-- removed some incorrect information in the documentation for the ShowReserveSupplies action.

-- fixed: the game would remember which units had ended their turn when the previous battle concluded, and in subsequent cut scenes, the reserve supplies screen would prevent those units from interacting with their items (because their "turn ended" marker was still set to true).

-- fixed an off-by-1 math error that was causing the game to incorrectly position the reticles for certain AOE skills (and in the process, made the AI occasionally attack spaces that made no sense).

-- fixed: AOE reticle patterns that extended in whole or in part off the edge of the map were being pushed backward onto the map (and thus, appearing on the wrong spaces) instead of simply truncating the bits extending off the map. This, too, was causing the AI to sometimes target the wrong spaces with attacks.
Title: Re: A new engine!
Post by: CraigStern on March 07, 2019, 03:59:25 PM
-- the map editor now supports procedurally generated unique characters, not just generics.

-- the space selector has been added to the map editor, making it way easier to tell what space you're painting or mousing over.

-- began designing the first boss battle of the game.

-- the game engine now supports movement sounds for characters (something I never got around to adding in on Telepath Tactics!)

-- created several movement sounds.

-- generated characters now receive move sounds appropriate to their species and class.

-- went through all premade characters and assigned them appropriate moveSound attributes.

-- two new string stats supported: Load ID and Move Sound. (When setting a new Load ID with SetStat, use a colon in place of a forward slash.)

-- when saving a scene to a file, the game now strips all forbidden characters out of the filename and replaces them with underscores.

-- fixed: after editing the properties of an object, the map editor would always set its army to 2.
Title: Re: A new engine!
Post by: CraigStern on March 08, 2019, 05:29:51 PM
Spent some time updating the web site and preparing an ad campaign to try to sell off the remaining stock of True Messiah. With my remaining time available today:

-- implemented two new tags: BackstabFactorPlus and SidestabFactorPlus. These take two parameters (1) the name of the skill that gets this bonus, and (2) a decimal float value. The float value gets added to the backstab/sidestab multiplier attributes for attacks with the specified skill (or, if parameter 1 is left blank, for attacks with every skill).

(Procedurally generated "Gap-seeking" weapons give the character these.)

-- implemented a new tag: DmgIgnoreRes. This takes two parameters (1) the name of the skill that gets this bonus, and (2) a decimal float value. The float value gets multiplied by the target's relevant resistance--this portion of the target's resistance is ignored for attacks with the specified skill (or, if parameter 1 is left blank, for attacks with every skill).

(Procedurally generated "Armor-piercing" weapons give the character this.)

-- implemented a new tag: ModSkillPower, which replaces the old ModDmgForAttack tag. ModSkillPower affects a skill's base damage for the character with the tag. (The tag's effects are calculated after all other base damage factors, but before anything relating to the skill's target--distance, elevation, the relevant resistance, etc.) Like ModSkillCost and ModSkillRange, ModSkillPower takes the skill name and the operation to perform on its base damage (e.g. +:1) as parameters.

-- implemented new tags: ModDmgVsClass, ModDmgVsMoveType, ModDmgVsSpecies, ModDmgVsTag, and ModPowerVsWeapon. Unlike the old ModDmgFor tags that they replace, these can operate on particular skills used by the character with the tag. Parameters are: (1) skill name (leaving this blank will apply the effect on all unit skills), (2) the particular class/gender/move type/species/tag/weapon type that triggers the operation, and (3) the operation. And unlike the ModSkillPower tag type, these affect final damage, after all other factors have been accounted for (including resistances).

For instance--for whatever character has this tag, no matter what skill they use, the game doubles the damage it does to units who are equipped with a weapon with a name containing the substring "Axe":

ModPowerVsWeapon,,Axe,*:2

For the character with this tag, the game adds 99 to the damage done by the skill Death Gaze to units with the tag Vulnerable to Gaze:

ModPowerVsTag,Death Gaze,Vulnerable to Gaze,+:99

And so on.

-- added two new weapon modifiers to the item generator: "Anti-mount" (deals +6 damage to cavaliers) and "Flashy" (increases AI target value by 15%).
Title: Re: A new engine!
Post by: CraigStern on March 09, 2019, 02:25:47 PM
-- created new attributes for procedurally generated armor: Padded (+20 Crush Res.), (Insulated +15 Heat and Cold Res.), Lead-lined (+15 Shadow and Light Res.), Gleaming (+7 Dodge), and Gaudy (wearer is 20% more heavily weighted as a target by the AI).

-- when dealing with generic units who don't have weapons equipped, the game now checks for the corresponding weapon skill for purposes of ModPowerVsWeapon. (For instance: Bloodbeard's Bandits don't generally have axes equipped, but they do know the Axe skill naturally. This change means that ModPowerVsWeapon,,Axe,+:5 will still result in +5 damage to them.)

-- fixed: the game wasn't assigning a base class to procedurally generated characters.

-- fixed: the game was calculating distance past minimum for player-initiated ranged attacks incorrectly.

-- fixed: the game wasn't turning off the "selected" animation for characters who were simply deselected.
Title: Re: A new engine!
Post by: CraigStern on March 11, 2019, 05:05:57 PM
-- created a new battle immediately preceding the league 1 qualifier, "Battle on Sandy Isles," introducing flying enemies and golems.

-- new script action: SetNextScene. Changes the scene's nextbattle attribute to a different scene, but does not immediately transition to that scene. One parameter: scene name.

-- created a scene in the main campaign that schedules league qualifier matches for particular days.
Title: Re: A new engine!
Post by: CraigStern on March 12, 2019, 04:51:00 PM
-- wrote dialogue for the League 1 Qualifier battle, including an optional recruitment conversation.

-- new special characters: -TIC2- and -LAUGH2-. These get replaced with the tic and laugh lines for the second character in the conversation.

-- the second parameter of SetString now supports the use of ID[] characters.

-- the "generate unit inventory" field in the map editor's generate unit window has been changed to a check box (which is decidedly easier to interact with than typing out "true" or "false" every time).

-- fixed: the game would fail to add custom tags and triggers to unique procedurally generated characters.

-- fixed: you could force the game to use an unsupported species for procedurally generated instances of the spirit, spriggat, and golem classes, which would ultimately produce a null error.

-- fixed: the dialogue menu would only successfully reference saved characters when processing text in battle (as opposed to any unit on the battlefield).

-- fixed: the game would throw a null error if you tried to use AddStatus on a character that didn't exist, or SetStat in a cut scene before any characters existed among the saved units yet.
Title: Re: A new engine!
Post by: CraigStern on March 13, 2019, 05:11:00 PM
-- the game now plays the Telepath victory fanfare when the victory box appears at the end of a successful battle.

-- the parameters for Generate: and Unique: spawns in battle now support special characters (most significantly, the PICK{}, -STR:-, -VAL:-, and LIST{} special characters).

-- tuned the game's default AI to make enemies less likely to retreat in lieu of making a sub-optimal short-term move.

-- fixed: a custom variable in the main campaign wasn't being set properly.

-- fixed: AI-controlled units that were Stunned or Frozen were being removed from the AI's internal list of its own army entirely.

-- fixed: the level-up handler class was inappropriately saving stat increases from prior character level-ups and applying them again with subsequent level-ups.

-- fixed a typo in certain camp activity narrations.

-- fixed: the recruitment interface was producing large relative level variations for recruits at low levels. It now permits a variation of 1 level per 4 base levels it generates with, but no variation for units generated at level 3 or less.

-- fixed: the game was not properly saving the Death Rules condition during mid-battle saves.
Title: Re: A new engine!
Post by: CraigStern on March 14, 2019, 05:10:14 PM
-- the game now actively prevents the camera from panning more than a little bit off the edge of the level. (I finally gave up on using a fancy physics-based solution and just went with magic numbers--no sense sinking more time into a fancier solution than the game needs when there's so much else to be done!)

-- the game now actively shifts character tooltips around to keep them entirely onscreen when mousing over units near the screen's edges during battle.

-- for mid-battle saves, all of the game's save and load game screens (as well as the slot selection screen when starting a new game) now display the turn number on which the battle was saved.

-- created alternate versions of the healing tutorial in the main campaign based on the selected difficulty (and the corresponding Death Rules).

-- fixed: the game would sometimes lock up when an AI character grabbed an item sack, then immediately turned and attacked an adjacent enemy.

-- fixed: the AI would sometimes run two character's moves concurrently if an experience bar stopped animating midway through the first character's move.

-- fixed: the game would sometimes lock up when the player completed a battle.

-- fixed: the experience bar and level-up animations did not reflect the lower level-up threshold for characters possessing points of Aptitude.
Title: Re: A new engine!
Post by: CraigStern on March 15, 2019, 04:25:30 PM
-- the game now counts down status effects on destructible objects (and, where appropriate, damages them) at the end of each round in battle.

-- the battlefield camera boundaries now shift dynamically to accommodate things like the deployment screen and camera zoom-in during attacks.

-- shoving a unit into a liquid tile now treats the fall height as 1 unit lower for purposes of falling damage and stunning.

-- added a new tile phase to the game: void. Like liquid phase tiles, these get positioned a half-step lower than solid tiles on the battlefield; but unlike liquid phase tiles, they don't soften the landing for units shoved into them. To the contrary, any fall into a void tile is automatically treated like a 25-height fall (meaning that it does an immediate, unavoidable 100 damage and 24 continuous turns of Stunned status!)

-- chasm tiles are now void tiles.

-- reduced the default value of the accuracy constant in the game's AI so that AI-controlled characters won't choose heavily armored targets over targets with Dodge so consistently.

-- fixed: the game would sometimes act as though the player was clicking an object instead of the character standing on top of it.

-- fixed: the game wasn't saving the runsScripts property of items contained in unit inventories.

-- fixed: the game was inappropriately detecting a mid-battle save when saving at the conclusion of a battle.

-- fixed: the game wasn't displaying the status effect indicator on status-effect-bearing units after reloading a mid-battle save.

-- fixed: the game was treating empty bridge spaces as full for purposes of building non-bridge destructible objects with Create skills.
Title: Re: A new engine!
Post by: CraigStern on March 17, 2019, 02:54:47 PM
-- fixed: the game wasn't saving triggers on units, causing traps to cease functioning upon reloading mid-battle saves.

-- fixed a null error involved in loading reserve supplies brought about by Friday's fix re: saving of the runsScripts property on items.
Title: Re: A new engine!
Post by: CraigStern on March 18, 2019, 05:21:34 PM
-- new script action: ShowCharacterScreen. Automatically opens the character screen for a unit. Takes one parameter: the character's name. (If the named character is not found in the scene or among saved characters, the screen simply doesn't open.)

-- new script actions: ChangeTriggerCharacter and ChangeSecondaryCharacter. These let you swap out the the units whom the dialogue considers the triggering and secondary characters, thereby allowing you to use special characters with different units. Each takes one parameter: the character's name.

-- right-clicking bridge segments now only brings up their info screen only if the bridge segment clicked is above liquid or a chasm; if right-clicking a bridge that overlaps a solid terrain tile, the game treats it as a right-click on the terrain (i.e. a cancel click).

-- fixed: wasn't saving active holds on spaces for mid-battle saves.
Title: Re: A new engine!
Post by: CraigStern on March 20, 2019, 04:01:53 PM
-- new script action: ChangeNarration. Cut scene only; replaces the narration text for the current frame of the cut scene. Takes one parameter: the new narration text to display.

-- new script action: GoToFrame. Cut scene only; jumps to the specified frame of the cut scene. Takes one parameter: frame number.

-- new script action: DismissByName. Works just like RecruitByName, but it dismisses the character from one or more rosters instead of adding them. Two parameters: character name and roster number (optional; if not used, dismisses from all rosters).

-- scripted a new (somewhat involved!) random event that can happen in camp.

-- units now possess a boolean property internal to themselves that lets the game know if they are generic or unique. The game now uses this property to decide which characters gain experience during battle, not whether they are on a player-controlled army. (Only non-generic characters gain experience.)

-- the game now assigns generic or non-generic status to proc gen units as appropriate.

-- the character creator now starts off the character creation process by giving the player a clear choice between creating a unique character or a generic unit type, with an explanation of how they differ. (The "generic" option is no longer an ill-explained button hidden in the portrait creator.)

-- the game successfully parses the isGeneric property for pre-made units. The character creator now successfully loads and saves the isGeneric property for characters.

-- fixed: the folder and portrait data for the generic Dark Spriggat portraits were mislabeled.

-- fixed: in rare instances, it was possible to select an object by clicking on a space where a character stood on top of an object.

-- fixed: the AI was not removing dead units from its internal list of allied healers when they died.
Title: Re: A new engine!
Post by: CraigStern on March 22, 2019, 04:25:56 PM
Artist feedback! Also:

-- began writing out the first big plot-advancing encounter of the game.

-- fixed a few scripting issues in the new random event.

-- fixed: if a character leveled up with the battle-winning blow and the experience bar / glowy ring animations didn't complete before the level-up screen popped up, they would remain frozen onscreen below the victory box even after the level-up screen was closed.

-- fixed: saved game slots for mid-battle saves were displaying the turn number in a way that was technically correct from the standpoint of how the code works (starting from 0 and counting as of the last completed turn), but nonsensical from the perspective of the player.

-- fixed: the game was not culling melee attacks from non-flying units across elevation differences greater than 1.

-- fixed: the AI was calculating the value of using Health and Energy-restoring consumables incorrectly.

-- fixed: the AI was incorrectly adding to item score by acting as though there were a granted skill on items that grant no skills.

-- fixed: the AI algorithm for determining whether to use an item was not being applied to long-term moves.

-- fixed a null error arising out of the procedure for re-adding battlefield holds when loading up a mid-battle save.
Title: Re: A new engine!
Post by: CraigStern on March 24, 2019, 05:22:13 PM
-- added error sound effects for clicking Action Bar buttons while they are redded out.

-- you can now use -1 as the Y or X coordinate in the SpawnUnit and GenerateUnit script actions to make the game spawn the unit on a randomly chosen space a suitable minimum distance from all other armies.

-- created a quasi-randomized battle for the main campaign. (The map and player starting positions are designed, but the types of enemies that spawn--and where they spawn--are quasi-random, as is some of the foliage). This battle is now used for pick-up fights between when the League 1 qualifier is scheduled and when it occurs.

-- the level parameter in GenerateUnit now supports the use of a numerical range in the same manner as generated units added directly to battlefields do.

-- when using an item, the character screen now automatically closes so the player can see the relevant pop-ups.

-- when using an item, the actions bar is now updated to reflect any changes (new skills, changed ability to use existing skills due to changes in energy, etc.)

-- fixed: the Undo button would leave dummy attack tiles visible on the battlefield if pressed while also moused over a skill button.

-- fixed: the game wasn't redding out the Rotate button after a character turn automatically ended following an End Turn skill.

-- fixed: description text in tooltips for the icons in the army overview screen cut off on certain displays.

-- fixed a null error lurking in the dialogue tree editor related to sound playback.
Title: Re: A new engine!
Post by: CraigStern on March 25, 2019, 04:22:46 PM
-- you can now dismiss units from your roster on the army overview screen. (The game will give you a confirmation pop-up to confirm so you don't dismiss characters by accident.)

-- wrote a handful of unhappy little monologues for characters to deliver when you dismiss them; they now deliver said monologues if you go through with their dismissal.

Morale around camp is affected when a character is dismissed--just like when a character dies, each other character loses 1 morale, plus 1 per point of friendship they had with the dismissed character. (If a character had negative friendship with the unit, this will cancel out morale loss for that character--or even boost their morale!) Morale effects from dismissal are doubled on sensitive characters.

-- new script action: SwitchRoster. Just like the Roster Number battle condition, this changes the current roster. One parameter: roster number.

-- new supported weapon modifier for proc gen weapons: "Shredwing." Causes the weapon to do +8 damage to spriggats.

-- increased the damage modifier on Anti-mount weapons to +8.

-- further increased the effect of positive quality modifiers on armor.

-- fixed: camp activities would use all saved characters for activities, whether they're on the current roster or not!

-- fixed: the army overview screen was not registering changes to character morale within the same cut scene.
Title: Re: A new engine!
Post by: CraigStern on March 26, 2019, 04:41:41 PM
-- received new character portrait: Praetor Nero. Created his portrait data.

-- added the three cave entrance backgrounds into the game.

-- running out of food will now give all characters in camp a negative mood for 0-3 days.

-- moods can now be tied to specific character memories (meaning that the game can know why a character is in the mood it's in).

-- if a character has a sufficiently negative reaction to an ally's death, they now get a memory of that character's death as well as the mood "Mourning" for a number of days proportionate to the depth of their grief. The mood is tied to the memory.

-- if a character has a sufficiently negative reaction to an ally's dismissal, they now get a memory of that character's dismissal as well as the mood "Upset" for a number of days proportionate to the depth of their reaction. The mood is tied to the memory.

-- wrote more dismissal monologues for characters with different personality traits, as well as for golems and spirits.

-- fixed: the game wasn't increasing character movement after equipping items that boosted speed.
Title: Re: A new engine!
Post by: CraigStern on March 27, 2019, 03:55:36 PM
-- updated the attack sequence panning-and-zooming code so that so that everything remains clearly visible onscreen even with attacks targeting far away for the attacker. The game pans closer to the target as the attack is targeted further away, and when targeted beyond 4 tiles away (as with super-long-range skills like Arced Shot), the camera now simply doesn't zoom in at all.

-- sick characters will no longer engage in forced group activities--they will instead rest.

-- busy characters will no longer engage in forced group activities.

-- wrote some new procedural character dialogue.

-- wrote a new camp event in which a character develops romantic interest in another character.

-- events that don't eat up time (like a character falling ill or developing a crush) no longer prevent the player from throwing a gathering.

-- in the AI, characters that can move after using a skill now weigh the danger of their destination space less heavily in direct proportion to the amount of steps they'll have left.

-- updated the sprite-set naming for premade Dark Spriggat units.

-- fixed: red spriggats were using the dark spriggats sprites for some reason.

-- fixed: the LASTINLIST[] special character could sometimes return a list length of -1.
Title: Re: A new engine!
Post by: CraigStern on March 28, 2019, 05:11:54 PM
Gave artist feedback on new cut scene backgrounds in progress for the Psy Academy and Somnus. :)

-- units now take damage from being shoved/thrown/kinetically gusted/etc. against the edge of a level.

-- for the map editor, created new Edit Unit and Edit Object modes so you can start editing unit and object properties without having to open (and then immediately close) the New Unit or New Object windows.

-- implemented the RemoveUnit script action, which replaces RemoveChar and KillChar. Takes two parameters: (1) unit name (or ID[]) and (2) whether to treat the removal as the unit dying (true or false -- if true, the unit's health will be automatically set to 0 before removal, they will drop an item sack, and death rules not dependent upon the amount of damage taken* will apply).

-- fixed: running multiple scripts at once with the same Run command would queue up their actions in the wrong order.

-- fixed: if under Permadeath rules, the death of a destructible object associated with an army would produce a morale loss among characters in that army as though it were a character.

-- fixed a really stupid typo in the map editor code that would prevent you from placing objects or characters on spaces with a y coordinate greater than the map's width.

-- started working on a unique script action: ForLoop. If you know programming, then you already know exactly what this does: it lets you set up a counter that runs a specified action a set number of times, with the ability to use the counter's value within the action itself. Parameters: (1) Integer Name (a string that must be a unique sequence of characters and cannot contain commas or forward slashes); (2) Integer Range (start and end values delimited by a hyphen, e.g. 0-5); (3) Increment By (the value added to the integer with each iteration of the loop); and (4+) simply type out the name and parameters of another action, delimiting each with a comma.

For instance:

ForLoop/-A-,1-3,1,SetVal,Number-A-,=:-A-

This will run SetVal three times, producing three custom values: Number1 with a value of 1, Number2 with a value of 2, and Number3 with a value of 3.

This one is still in progress, so there might be changes pending further testing.


* i.e. you'll still need to set wound levels or make the character lose morale yourself using SetStat
Title: Re: A new engine!
Post by: CraigStern on March 29, 2019, 04:46:20 PM
-- the ForLoop action (discussed in the last post (http://sinisterdesign.net/forum/index.php?topic=1769.msg52086#msg52086)) is working!

-- scripted a new event type that occurs at the end of the evening instead of at the beginning.

-- created a new quasi-randomized battle for a late-night event in which the camp is attacked by thieves.

-- new script action: SetListEntry. This changes the value of an existing entry within an existing list at a specified position within the list. Three parameters: (1) List Name, (2) Entry Position, and (3) New Value or Operation.

You'll most likely be using SetListEntry in combination with ForLoop (and ToList actions) to quickly make batch changes to things. Here is an example (collapsed into a spoiler to save space):

[spoiler]I've created a battlefield representing the player's camp, with 18 tents dotted around the battlefield, each with an ID[] tag ranging from 101 to 118. However, I want there to only be one tent per character on the player's army--I want to remove each excess tent from the battlefield. Here's how I approach it:

<Action>UnitsToList/PlayerArmy,0</Action>
<Action>SetVal/StartAt,=,LASTINLIST[PlayerArmy]</Action>
<Action>SetVal/StartAt,+,1</Action>
<Action>SetList/RemoveTents</Action>
<Action>ForLoop/-A-,-VAL:StartAt--18,1,AddToList,RemoveTents,-A-</Action>
<Action>ForLoop/-A-,0-LASTINLIST[RemoveTents],1,SetListEntry,RemoveTents,-A-,+:100</Action>
<Action>ForLoop/-A-,0-LASTINLIST[RemoveTents],1,RemoveUnit,ID[LIST{RemoveTents,-A-}]</Action>


The first action gathers up every character in the player's army into a list; the second and third actions set a VAL equal to the size of that list. The fourth action creates a new list, RemoveTents, which will store the ID[] of every tent we intend to remove.

Then come the loops! Our first loop starts at the first number past our total army size, and counting up to 18, it creates a numbered list entry with each iteration. (If the map has 6 player characters, for instance, it'll fill the list with numbers 7 through 18.) The second loop goes through our newly populated RemoveTents list and adds 100 to each entry via SetListEntry. Lastly, our third and final loop goes through RemoveTents and removes each listed tent using its ID[] tag.[/spoiler]

-- improved the positioning of animated bars during camp activities.

-- creating and removing units from the battlefield during OnLoaded dialogue no longer spawns smoke clouds.

-- fixed a bug in the game's attack mapping algorithm that could glitch the game out when finding attackable spots on long, skinny battle maps.

-- fixed: the game would immediately close any dialogue occurring on the cut scene frame immediately following camp activities.

-- fixed: the game's camera boundaries would prevent it from moving to focus on characters at the very top of the map during dialogue (as they would end up totally obscured by the dialogue box).

-- fixed: you could glitch out the game by generating a unit with only a first name.
Title: Re: A new engine!
Post by: CraigStern on April 01, 2019, 03:44:51 PM
No time to make an April Fool's joke this year--too busy working on my very much for-real game!

-- updated the targeting reticles in battle to show the current affected stat for each target, just as with the reticles in Telepath Tactics. (But of course, these new ones use symbols instead of just text for greater readibility at a glance.)

-- pulled back the battle camera about 10% to provide an easier view of the whole battlefield.

-- added the RemoveSpawn script action into the game. As in Telepath Tactics, this action strips a unit's spawn data out of the battle, preventing it from spawning on a later turn--however, this action now has more parameters to allow precise targeting of the particular spawn to be removed. Parameters: (1) Load ID (using : in lieu of /), (2) Army Number (optional), (3) Y coordinate (optional), (4) X coordinate (optional), and (5) Spawn Turn (optional).

Optional parameters can be left blank or filled in with -1. If the Load ID doesn't matter, use -ANY-.

-- the game now saves any spawns removed during a battle in mid-battle saves, and upon reloading the battle, will reapply the spawn removal.

-- new special character: -CONV ID-. The game will replace the special character with the Conv ID of the current dialogue, if there is any. With this change, RemoveConv subsumes RemoveCurrConv.

-- if the MoveChar script action doesn't find the named character, it now simply does nothing instead of freezing up the game.

-- fixed: if there were characters in your army who came pre-spawned on the battlefield, you could select them, move them, and act with them as if it were a normal turn during unit deployment. Clicking on such a character during deployment now merely shows their move range as if they belonged to another army.

-- fixed the camera positioning for focusing on characters situated on elevated terrain.
Title: Re: A new engine!
Post by: CraigStern on April 02, 2019, 04:42:34 PM
-- added tab navigation to the dialogue editor (i.e. you can navigate between text input fields by tapping the Tab key). This makes working in the dialogue editor much faster.

-- when clicking a predictive text suggestion in the dialogue editor, the editor now auto-selects the parameters text field, allowing you to immediately start editing parameters without having to click into the parameters input field first.

-- added tab navigation to nearly every window in the map editor (i.e. you can navigate between text input fields by tapping the Tab key). This makes editing map, unit, or point light properties much faster.

-- when opening the procedurally generated unit window in the map editor, the editor now auto-selects the name text field, allowing you to immediately start editing properties without having to click into the input field first.
Title: Re: A new engine!
Post by: CraigStern on April 03, 2019, 03:54:39 PM
Had my first playtest party for the game last night! It was a good source of feedback, as well as a good warning that no, I'm still not anywhere close to eliminating all of the game-breaking bugs and gameplay issues from this thing.

In other news, it seems that (https://forum.unity.com/threads/2-basic-features-that-inputfield-really-needs-to-get.654865/#post-4386067) I'm going to need to go through and manually replace every single text field in the game with new ones based upon TextMesh Pro. Sigh.

Also: artist feedback.

-- began the long, tedious process of replacing every last text field in the game with a TextMesh Pro equivalent. (As of today, I've replaced the text fields for everything appearing on the title screen, including all of the new game and load game menus.)

-- fixed: procedurally generated Spirits and Golems had ongoing salary costs.

-- fixed: grabbing an item sack wasn't clearing the undo stack, allowing characters to move, grab a sack, then undo and move again with the sack's contents in their inventory.

-- fixed: scripted the wrong scene to transition to for pick-up battles prior to the League 1 Qualifier.
Title: Re: A new engine!
Post by: CraigStern on April 04, 2019, 05:00:07 PM
-- converted more of the UI text fields in the game to TextMesh Pro. This time, in the Battle scene: the dialogue screen, actions bar, terrain inspector, text overlay bar, deployment window, mid-battle save menu, report screen, unit mouseover tooltips, skill tooltips, and all of the miscellaneous tooltips on all of these elements' various buttons.

-- made the text in the text overlay bar dynamically resize to fit longer strings.

-- added counterattack info to unit mouseover tooltips.
Title: Re: A new engine!
Post by: CraigStern on April 05, 2019, 02:08:12 PM
-- created a Telepath emoji set to work with TextMesh Pro, enabling the placing of icons directly into text!

-- finished replacing all the text fields in the tooltips for the game's various stat and status effect icons with TextMesh Pro variants.

-- finished replacing all the text fields in the level-up screen.
Title: Re: A new engine!
Post by: CraigStern on April 08, 2019, 05:30:33 PM
-- finished replacing all the text fields in the character screen.
Title: Re: A new engine!
Post by: CraigStern on April 09, 2019, 05:17:27 PM
-- created a new item: Bracing Gloves! These give the wearer Strength +1 and grant the skill Shove. Can be used by any character with a physical weapon mastery.

-- the main campaign shop now sometimes carries Bracing Gloves.
Title: Re: A new engine!
Post by: CraigStern on April 10, 2019, 04:12:04 PM
-- finished replacing all the text fields in the new turn box, victory box, and attack confirmation window.

-- finished replacing all the text fields in the options and settings menus in battle.

-- made progress on replacing all the text fields in the reserve inventory screen (there are a lot of them)
Title: Re: A new engine!
Post by: CraigStern on April 11, 2019, 05:01:13 PM
Spent a bunch of time on musician feedback finalizing new boss music. :)

-- received and implemented a new cut scene background: Somnus!

-- finished replacing all the text fields in the reserve inventory screen, and with that, I'm finally finished with replacing UI text fields battle scene! (There are a few other elements I'll have to go back and replace the text in, namely pop-up damage and such, but that's an issue for another day.)

Moving on to the the cut-scene scene:

-- finished replacing all the text fields in the narration, calendar, info bar, custom menu, recruitment interface, army overview window, and dismissal window UI elements. (Other UI elements, like the reserve inventory screen and character screen, were carried over from work in the battle scene.) All that's left to swap out is the shop interface, and I'll be ready to move on to the campaign editor.

-- removed the "Next" button from the camp activity interface. Camp activities are now advanced by clicking anywhere onscreen.

-- rounded the corners on the text darkener image that appears beneath cut scene narration.
Title: Re: A new engine!
Post by: CraigStern on April 12, 2019, 04:46:22 PM
-- the shop interface now supports multiple pages worth of items within a given category! Whenever a category has more than 1 page worth of items, a page navigation interface appears to let you flip through the pages.

-- the shop in the main campaign now has a much more limited selection of consumables, which should hopefully keep new players from being overwhelmed by choices that aren't yet relevant.

--the shop in the main campaign now generates way more different weapons when you walk in, which should hopefully result in more weapons that are actually usable by the player's team showing up on any given visit.

-- fixed: the shop interface would inappropriately gray out equipment usable with multiple different masteries.

-- wrote some new dialogue for the recruiter in the main campaign; you can now try to flirt with her or ask her for advice on team composition.

-- the reserve inventory screen will no longer close from errant clicks; instead, there is now a dedicated close button in the corner.

-- camp activities no longer need to be progressed by clicking a dedicated "Next" button: instead, you can now click anywhere onscreen to progress.

-- improved the Qualifier tutorial by using the new emoji functionality to visually cue players as to which buttons do what.

-- fixed: level 1 proc gen characters would be generated with Reflexes stats equal to their Reflexes growths. (They now always start with Reflexes of 0 at level 1 regardless of their growths.)

-- fixed: the AI would fail to act with characters surrounded on all sides by enemies. The AI now ignores the danger penalty entirely for characters with no movement options; for others, it reduces the penalty linearly in proportion to how many movement options a unit has. The more flexibility a unit has, the more the danger penalty is counted against possible moves.

-- fixed: the game would hit a null error whenever a generic unit died in battle on Brutal difficulty.

-- fixed some incorrect portrait data.
Title: Re: A new engine!
Post by: CraigStern on April 15, 2019, 05:49:33 PM
-- replaced most of the the buttons and other UI elements in the main page of the campaign editor with nicer-looking ones. The new buttons now have mouse-over tooltips.
Title: Re: A new engine!
Post by: CraigStern on April 16, 2019, 05:30:55 PM
-- finished replacing all of the UI elements in the campaign editor.

-- reorganized the way elements in the campaign editor are laid out with an eye toward adding support for additional editors (like item and skill editors).
Title: Re: A new engine!
Post by: CraigStern on April 17, 2019, 05:22:31 PM
Gave artist feedback on a new cut scene background for the Psy Academy.

-- received new terrain tiles for single-width cliffs and their chasm variants; imported them all into the game and created directional variants and tile data for them all (constituting more than 250 new terrain tiles in total).

-- wrote the first part of the auto-tiling logic for the new terrain tiles!
Title: Re: A new engine!
Post by: CraigStern on April 18, 2019, 07:14:09 PM
-- filled in gaps in the autotiling logic for all the new terrain tile assets.

-- began replacing all of the old text fields in the dialogue editor with TextMesh Pro UI fields.
Title: Re: A new engine!
Post by: CraigStern on April 19, 2019, 02:57:15 PM
-- finished replacing all of the old text fields in the dialogue and scripting editor. (There were a lot of text fields.)
Title: Re: A new engine!
Post by: CraigStern on April 22, 2019, 04:52:32 PM
-- impact damage from knocking units back into other units now has an upper limit that varies by character. The limit is either (a) 6; (b) the attacker's base Strength (plus Strength times the skill's strength damage factor); or (c) the attacker's base Psy (plus Psy times the skill's psy damage factor). If the attack has a psy damage factor greater than its strength damage factor, the game will first go with (c); otherwise, it will first go with (b). If the resulting limit is not greater than 6, the game will then go with (a) instead.

This upper limit keeps impact damage reasonably related to a character's power. Without this limitation, knockback abilities will scale linearly to permit massive damage against against high-Health enemies by even level 1 characters.

-- impact damage is now multiplied by the number of spaces the target was to be moved. (Smashing a unit into an adjacent unit with Kinetic Gale, for instance, will deal twice the damage of doing so via Kinetic Gust.)

-- the game now tracks which character created a unit via Create skills.

-- added text processing support for the "force inventory" unit spawn characteristic (allowing the use of PICK{}, among other special characters).

-- added a few edge cases in the scripting for the Qualifier tutorial battle to cover instances where the player ignores instructions.

-- added a Protect Char condition to the Thief Attack fight so that you can end the battle early by defeating the Robber Boss.

-- fixed: the game was not updating its internal list of dialogue to ignore in combat after calling the RemoveConv script action, causing the game to inappropriately fail to trigger certain dialogue afterwards during the same turn.

-- fixed: the level-up screen was freezing the game due to the replacement icons (with updated text fields in their associated tooltips) missing Animator components.

-- fixed: another typo in the code was preventing characters from spawning at y coordinates greater than the map width.

-- fixed: it was possible to elicit a range error and freeze the game by clicking too quickly through dialogue at the start of battle.

-- fixed: the game wasn't awarding characters experience for the use of Create skills.

-- fixed: you could click on and select units in the middle of other units moving, producing all manner of problems.

-- fixed: under certain circumstances, the game would attempt to end a combat sequence multiple times, potentially resulting in duplicate victory checks and/or the same post-combat dialogue being triggered multiple times.

-- fixed: the game could re-trigger dialogue that was already queued for removal.

-- fixed: randomly spawned non-flying characters could spawn atop objects that are only passable for flying units.

-- fixed a scripting error in the recruitment scene in the main campaign.

-- reduced the incidence of purely narrated Talk actions in camp from 50% to 25%.
Title: Re: A new engine!
Post by: CraigStern on April 23, 2019, 03:59:15 PM
-- newly learned skills on the level-up screen now have their buttons throb in the same fashion as the icons for increased stats, making it much more immediately obvious to the player which skills are new.

-- with the advent of TextMesh Pro textfields, in-game text now support rich text formatting! Using this new capability, I've added support for bolding, italicizing, underlining, and striking through text. The syntax for each of these is...well, it's actually exactly the same as it is on these forums! Like so:

[b][/b]   <== bold
[i][/i]   <== italics
[u][/u]   <== underlining
[s][/s]   <== strikethrough


(See the screenshot below this post.)

-- added support for the full emoji set in dialogue! This uses the syntax SPRITE[spritename]; the spritenames of all emojis supported are as follows:

[spoiler][/spoiler]

This replaces the bespoke special characters for emojis (such as -HEART- and -UNDO-, for instance), but not the special characters for punctuation (e.g. bullet points, quotation marks, em dashes and commas).

-- fixed: when typing out emojis and rich text tags in dialogue, the dialogue window would start typing out the incomplete tag, only replacing it with the emoji/formatting after the tag was fully typed out, producing a jarring visual effect. Instead, the text field now looks ahead, detects any upcoming tag, and adds the tag all in one go to avoid this behavior.
Title: Re: A new engine!
Post by: CraigStern on April 24, 2019, 05:32:11 PM
-- refactored the way random biographical details are stored within individual characters; coded functions for adding and accessing these details.

-- characters are now generated with quasi-randomly selected biographical details representing their home region, their hometown, who raised them, what siblings they have, and whom they worship (if anyone). Details can affect the availability of other details (e.g. someone not from the Rubat or the Marid tribes isn't going to worship Anu)--the eventual goal here is to have those details also affect inter-character dialogue, providing a much greater variety of background dialogue.

-- reduced incidence of non-combinatorial human last names.

-- added support for exclusions in last name parts, allowing the same term to be used as both a last name beginning and last name ending (but never within the same name).
Title: Re: A new engine!
Post by: CraigStern on April 25, 2019, 05:09:08 PM
-- the game now tracks stats for each army over the course of a battle (Kills, Deaths, Damage Dealt, Damage Taken, Turns Taken, Sacks Grabbed, Sacks Dropped, Victory, and Bonus), and calculates a score for each army based on those stats.

-- implemented the ScoreBonus script action. Battle only; adds to the existing Bonus points for an army. Two parameters: (1) army number and (2) bonus points. (Note that bonus points can be negative if you want to penalize a player!)

-- the game now successfully saves and loads player info during mid-battle saves (including alliances, army name, army color, whether it is AI controlled, and all score data for that player).

-- new script action: SetWinAura. Battle only; alters the aura awarded for winning the battle. One parameter: operation (i.e. operator:amount).

-- new script action: SetLossAura. Battle only; alters the fraction of the "win aura" awarded if the player loses the battle. One parameter: a float value between 0 and 1.

-- fixed: the game didn't clear the undo stack after a character dropped an item onto the battlefield.

-- fixed: enemies in the Qualifier battle would treat the training dummies as valid attack targets if you chose to skip tutorials.
Title: Re: A new engine!
Post by: CraigStern on April 25, 2019, 10:29:01 PM
-- Telepath Tactics had a pretty awkward awkward method for setting up the armies for each level. Rather than force people to set this stuff up using a bunch of conditions, I've rewritten things so that you can simply define the armies with all of their characteristics directly in each level using the new Army tag. Like so:

<Army num="0" humanControlled="true" name="The Dawn Brigade" color="Blue" alliedWith="2"></Army>
<Army num="1" humanControlled="false" name="Begnion" color="Red" alliedWith=""></Army>
<Army num="2" humanControlled="false" name="Greil's Mercenaries" color="Green" alliedWith="0"></Army>


Next up: adding an interface to the map editor to create these!
Title: Re: A new engine!
Post by: CraigStern on April 26, 2019, 05:26:15 PM
-- when you create a new map in the map editor, it now automatically opens the Map Settings window so you can set music and armies.

-- there is now a dedicated armies interface in the map editor! This lets you easily add and remove armies, customizing the name, number, color, alliances, and human-versus-AI-control for each.

-- the map editor now successfully saves and loads custom army data to and from each map.

-- army names can now make use of special characters (including stored custom strings and the like).

-- the conditions fields in the map editor now have predictive text suggestions!

-- replaced all the text fields in the map editor's new map window, map settings window, map conditions window, paint palette window, menu bar, and all the menu bar's button labels and tooltips.
Title: Re: A new engine!
Post by: CraigStern on April 27, 2019, 02:11:06 PM
-- the campaign editor now displays (and allows you to browse through) custom items and skills for your campaign. (Note: there isn't an actual editor for either of these things just yet. But hey--one thing at a time.)

-- the campaign editor now only lists characters you've personally created for your campaign (default characters will still be available to use in the map editor and in-game from the get-go--they just won't show up as available for deletion or editing).

-- in the map editor, replaced the janky text field interface for setting army and rotation in the New Unit window with far-more-intuitive (and less error-prone) buttons.
Title: Re: A new engine!
Post by: CraigStern on April 27, 2019, 10:27:25 PM
-- the campaign editor now has an editor for creating and editing dialogue and scripts for your campaign's PersistentDialogue.xml file.

-- the campaign editor now successfully loads and saves from the current campaign's PersistentDialogue.xml file.
Title: Re: A new engine!
Post by: CraigStern on April 28, 2019, 03:15:44 PM
-- replaced the text fields in in-combat damage and text pop-ups with TextMesh Pro versions. Pop-up text now looks much sharper and cleaner, and varying colors of pop-up text are finally supported!

-- the Victory Box now displays battle stats for the victorious player, and tallies them up along with total player score.

-- created a new Passive: Prodigy. Characters with this passive improve in 1 extra stat with each level-up.

-- fixed: the game wasn't saving the focusGain property for characters in mid-battle saves, meaning that when the battle reloaded, they wouldn't regain Energy at the start of the initial turn.

-- fixed: characters could increase Counter Limit on level-up even if they didn't yet know a counterattack, resulting in only one stat showing up as increased on the level-up screen. (The game now simply won't select Counter Limit as a stat to increase on characters who haven't yet learned a counterattack.)

-- fixed: the game would treat AI-controlled characters as frozen or stunned for an extra round beyond when the status effect actually wore off, skipping their turns.
Title: Re: A new engine!
Post by: CraigStern on April 29, 2019, 05:28:20 PM
-- received a brand new cut scene background and incorporated it into the game: the Psy Academy! :D

-- new character stat added: Leadership. This will function a lot like Personality did in earlier games in the series, determining the maximum size of a team the character can command.

-- altered the quality parameters on item generation. Quality affects the item between levels 0 and 10. For most equipment, positive modifiers now start appearing at quality level 1; negative modifiers disappear entirely by quality level 3; all of the strongest modifiers unlock at quality level 4; and quality levels from 4-10 each increase the likelihood of getting a positive modifier (as opposed to no modifier at all). At quality level 8, for instance, you are guaranteed an item that is, at a minimum, Fine quality; at quality level 10, everything is either Superb or Peerless.

-- fixed: the game was ignoring forced items when generating unique characters. Unique characters generated with a generated inventory who are specifically forced to have particular armor will no longer generate armor as part of their generated inventory.

-- you can now set materials and quality parameters for generated items directly assigned to a Unit spawn in battle! Item name, materials, and quality are delimited by vertical bars, with separate materials delimited by colons. This, for instance, when in the inventory parameter of a Unit tag in a map, will generate (and automatically equip) a proc gen vest made out of either Leather or Boiled Leather using a randomly chosen quality level from 3 to 5:

GEN:Vest[E]|Leather:Boiled Leather|3-5

-- similarly, you can now set available materials and quality level within the Generate Inventory parameter of the GenerateUnit and GenerateUnique script actions, provided it's set to true. (Available materials will need to cover all equipment types, so make sure to include both weapon and armor materials.) Here, as above, you'll be delimiting using vertical bars. For instance:

true|Leather:Boiled Leather:Wood:Ceramic:Iron|2

-- fixed: the game would sometimes decide that every army on the battlefield was allied with the player, resulting in army 1 immediately "winning" the battle via Kill-All Victory when the game detected no enemies left on the field for them.
Title: Re: A new engine!
Post by: CraigStern on April 30, 2019, 05:29:56 PM
-- revamped a bunch of the tutorials with sprites as visual indicators.

-- you can now exit the character screen and army overview screen in cut scenes with the escape key.

-- fixed: the game was allowing units to spawn on an occupied space. Instead, the game now checks to see whether a unit is about to spawn on a space already occupied by the same category of unit (character, object, or bridge), and if so, it automatically finds the closest available space to spawn the unit on instead. If there is no available space anywhere on the entire battlefield, then the unit simply doesn't spawn.

-- fixed: the AI was charging on ahead when characters leveled up or triggered dialogue during the computer's turn, making moves beneath the level-up screen or dialogue menu. When the level-up screen or dialogue menu appears in the middle of an AI turn, the computer now pauses and waits for it to go away before continuing.

-- fixed a panoply of small graphical issues in the UI.

-- fixed a small scripting error in one of the random nighttime events.
Title: Re: A new engine!
Post by: CraigStern on May 01, 2019, 05:17:40 PM
Today was focused on AI improvements!

-- I massively improved the way the AI was scoring proximity to other characters when evaluating long-term moves, as well as its evaluation of how dangerous those moves would be in the short term.

-- the AI now calculates long-term moves that send healers closer to injured allies.

-- when evaluating long-term moves for healers, if the healer possesses no offensive skills, the AI now eliminates moves which send them toward the enemy from consideration. For healers who do possess offensive skills, the AI simply scores those moves lower than before.

-- AI-controlled units who possess no skills (for whatever reason) will now always retreat from danger in combat.

-- AI-controlled units who have too little energy to use any of their skills will now retreat until they recover enough energy to use skills again.

-- replaced all the text fields in the Generate Unit window in the map editor with TextMesh Pro variants.
Title: Re: A new engine!
Post by: CraigStern on May 02, 2019, 04:59:08 PM
-- finally finished replacing every last text field in the map editor with TextMesh Pro variants!

-- as a pleasant side effect of the above, you can now use the Tab key to switch between text fields in the same screen within the map editor, making things like entering in map conditions or editing unit properties much less of a hassle.
Title: Re: A new engine!
Post by: CraigStern on May 03, 2019, 04:49:50 PM
-- received and incorporated the nighttime variant of the Psy Academy cut scene background.

-- updated all the text fields in the menu bar, new scene window, and edit narration window for the cut scene editor.
Title: Re: A new engine!
Post by: CraigStern on May 06, 2019, 05:20:07 PM
-- created all water and lava transitions for the new single-width terrain tiles for the Dirt, Grass, Sand and Snow tilesets.

-- created tile data for all of the new transition tiles.

-- wrote auto-tiling logic for all of the new transition tiles.

-- fixed: tile data for a handful of assets had been accidentally overlooked.
Title: Re: A new engine!
Post by: CraigStern on May 07, 2019, 05:07:48 PM
Spent some time testing new permutations of the new terrain tiles--found some incompatible combinations and gave artist feedback.

-- updated all the text fields in the load scene window, edit background window, edit dialogue window, edit shops window, edit roster window, select unit sub-window, and cut scene settings window for the cut scene editor.

-- updated all the text fields in the load scene window in the map editor (which I'd apparently overlooked before).

-- fixed: the cut scene editor can now display a preview of a shop live in the frame without triggering a null error.
Title: Re: A new engine!
Post by: CraigStern on May 08, 2019, 04:51:39 PM
-- updated all the text fields for the cut scene editor's edit shop window, edit stock sub-window, select items sub-sub-window, edit menus window, edit menu window, and edit menu button sub-window. With that, all of the text fields in the cut scene editor have now been successfully replaced! The only editor left to give this treatment is the character creator (which is good, because I'm starting to get really tired of this).
Title: Re: A new engine!
Post by: CraigStern on May 09, 2019, 05:28:41 PM
-- created a new button graphic, "Randomize."

-- began replacing all of the text fields in the character creator. Finished so far: the unique-vs-generic window, the species window, the class window, the gender window, the naming window, the portrait window, the default expression sub-window, the stat growths window, and the starting stats window.

-- replaced the old number pickers everywhere they appear in the interface with the newer, snazzier version.

-- adjusted my custom intRng class so that it now successfully parses integer ranges beginning with a negative integer.

-- added stat icons to the stat growths and starting stats windows in the character creator, providing an instant mouseover reference for what each of them does.
Title: Re: A new engine!
Post by: CraigStern on May 10, 2019, 05:12:53 PM
-- added Ryan Richko's new battle and boss music to the game!

-- continued replacing all of the text fields in every UI element in the character creator. Swapped them all out among the menu buttons and the save confirmation element at the top of the screen.

-- the character creator now has a button that will provide you with fully procedurally generated characters and generic units at the click of a button; you can then save and use them, or else go back and edit until you're happy with them.

-- the character creator now successfully saves bio details, and the game successfully loads bio details from premade units.

-- characters created or edited in the character creator are now added to the top of the characters list, effectively displaying them in order from most-recently-modified to last.

-- fixed a formatting error in the status effects text box for the character screen.

-- improved the positioning of mouseover tooltips for skill buttons in the character and level-up screens.
Title: Re: A new engine!
Post by: CraigStern on May 11, 2019, 02:51:43 PM
-- added a new behavior for the "number picker" UI element that allows the selected number to "wrap around" to the minimum value once it exceeds its maximum value (instead of simply remaining at the maximum and refusing to increase further). Turned this behavior on for the portrait element pickers in the character creator.

-- imported some fixed versions of terrain tile geometry that ensure smooth transitions between all tile variants in all combinations!

-- fixed a few errors / omissions in the map editor's autotiling logic.

-- fixed: the player could dismiss characters from the army overview while in the shopping or recruitment interfaces, thereby triggering dismissal dialogue and effectively trapping themselves. The dismissal option is now grayed out when in the army overview in either of those interfaces and a message is displayed informing the player that they cannot dismiss a character there.
Title: Re: A new engine!
Post by: CraigStern on May 13, 2019, 05:14:31 PM
-- continued replacing all of the text fields in every UI element in the character creator. Swapped out all the text fields in the skills/tags/masteries/skill progression window, reorganized the skill and skill progression selection sub-windows with more buttons (27 versus the original 18) and updated skill button tooltips, and reconstituted the sub-window for procedurally generating a character's stats at a given level.
Title: Re: A new engine!
Post by: CraigStern on May 14, 2019, 05:44:56 PM
-- I have now, at long last, replaced every single text field in the game! God, what a pain in the ass that was. But now that's that's done, it's back to more interesting stuff! :)
Title: Re: A new engine!
Post by: CraigStern on May 15, 2019, 05:34:00 PM
-- created button graphics for Edit Row/Column, New Row, New Column, Delete Row and Delete Column in the map editor.

-- created the latter four buttons and stuck them in a submenu that's toggled on and off by the first button.

-- added the basic Delete Row and Delete Column logic to the map editor. It removes the clicked row or column, collapses subsequent rows or columns to fill in the gap, and recalculates the necessary tile variations to make the new tile combinations play nice together.

-- fixed a few null errors that crept in with all the UI overhauls.
Title: Re: A new engine!
Post by: CraigStern on May 16, 2019, 05:14:12 PM
-- the Delete Row and Delete Column functions in the map editor now update coordinate data for (and physically shift) units and point lights on the map relative to the deleted row or column so they remain on the correct terrain. Units and point lights located directly on the deleted row or column are deleted along with the terrain upon which they stood.

-- added Add Row and Add Column logic to the map editor. It copies the terrain in the clicked row or column, shifts subsequent rows or columns of terrain down/right, pastes the copy into the newly formed gap, and then recalculates the necessary tile variations to make the new tile combinations play nice together. It then updates coordinate data for (and physically shifts) units and point lights on the map so they shift along with the original terrain.

-- tweaked the "night" global lighting preset to make it a bit darker.

All of this looks pretty good in action, but hard to capture in static screenshots. I suppose I should do a video at some point!
Title: Re: A new engine!
Post by: CraigStern on May 17, 2019, 04:26:17 PM
-- improved the logic on Add/Delete Row/Column functions: clicking the bottom row / right column will now place the new row/column onto the edge of the map instead of placing it at the location of the current last row/column and shifting the old edge outwards.

-- made some small UI improvements here and there in the various editors, as needed.

-- fixed: in the map editor, clicking on a unit in a row or column would do nothing when in Add/Delete Row/Column mode instead of behaving as though you'd clicked the row/column the unit is in.

-- fixed: I'd forgotten to link the new New Object search textfield back to the "narrow objects" function on value change, which resulted in the objects not actually getting narrowed down as you typed.

-- fixed some gaps in the delete and add rows/columns logic that were producing range errors under certain circumstances.
Title: Re: A new engine!
Post by: CraigStern on May 20, 2019, 05:29:23 PM
-- fixed an error caused by a previous fix to the way the game handles Stunned status for AI characters.

-- fixed a null error that could show up on rare occasions during the proc gen recruitable character generation process.

-- fixed: the game would hang after concluding a character's death monologue during an AI turn.

-- fixed a bug that was causing the game to disregard the sidestab damage multiplier in some instances.

-- fixed some dialogue that was extending beyond the bounds of the dialogue box.
Title: Re: A new engine!
Post by: CraigStern on May 22, 2019, 04:46:47 PM
-- created a new window in the Character Creator allowing you to narrow down possible species for randomly generated characters before pulling the proverbial trigger.

-- the armies menu the map editor now checks for duplicate army numbers; if it finds them, it displays an error message and refuses to let the player leave the screen until it's fixed.
Title: Re: A new engine!
Post by: CraigStern on May 23, 2019, 04:27:03 PM
-- received "yelling" mouth variants for every single portrait in the game! Imported them into the game and formatted them all.

-- three new portrait expressions are now supported: Yell, Yell Mad, and Shocked.

-- added the new facial expressions to the expression chooser sub-window within the portrait builder in the character creator.

-- renamed a couple of misnamed portrait assets.

-- fixed: the portrait builder wasn't letting you choose hand poses for the shadowling portraits.

-- fixed a couple of UI blemishes in the character creator.
Title: Re: A new engine!
Post by: CraigStern on May 24, 2019, 03:26:01 PM
Gave artist feedback.

-- created a sub-window in the character creator's portrait builder that lets you select scars, tattoos, and accessories for the character's portrait!

-- fixed: wrap-around numbers on the number picker UI object only worked when incrementing upwards, and would descend into negatives when incrementing downwards.
Title: Re: A new engine!
Post by: CraigStern on May 28, 2019, 05:38:57 PM
Gave artist feedback.

-- fixed a crash bug in the character creator.
Title: Re: A new engine!
Post by: CraigStern on May 29, 2019, 04:21:56 PM
-- recreated the small 1-v-1 multiplayer map from Telepath Tactics "Little Lava Cave"; realized I need to commission some new tile variants for the Cave tileset.

-- tweaked the "lava" global lighting preset to more closely match the Telepath Tactics lighting.

-- fixed a couple of UI layering issues with the skill selection windows in the character creator.

-- fixed a null error in the shop editor when editing stocks on a new shop.

-- fixed: some of the code in the cut scene editor responsible for changing the text in various menu buttons hadn't been updated to reference the new TextMeshProUGUI component in each button in lieu of the old Text component.
Title: Re: A new engine!
Post by: CraigStern on May 30, 2019, 05:21:27 PM
-- received, integrated new background into the game: Psy Academy classroom. (There are now 44 cut scene backgrounds in the game!)

-- created portrait data for new spriggat accessories: 4 new scars and 3 new tattoos!

-- updated "delete frame" logic in the cut scene editor to play nice with the new frame picker UI code.

-- fixed an error in how the game was counting cut scene narration frames within the frame picker UI element.
Title: Re: A new engine!
Post by: CraigStern on May 31, 2019, 05:12:42 PM
-- character portraits now support piercings as an independent accessory type.

-- created portrait data for lissit scars and piercings!
Title: Re: A new engine!
Post by: CraigStern on June 03, 2019, 04:16:30 PM
-- received new 3D destructible object models! These are new, 3D versions of the game's tents and caravan wagons that will allow these objects to be oriented in different directions on the map (i.e. not always with the wagon door / tent entrance facing down).

-- updated premade unit data for these objects referencing the new 3D models, and with new directional variants.

-- adjusted the default positioning of self-lights on units.

-- the unit selfLight attribute now supports two additional properties: Y offset and X offset. These allow you to place self-lights relative to the self-lit unit (as opposed to the lights simply always being centered on the unit).

-- used the new Y and X Offsets on self-lights to have light appear to be emitting from the tent openings on lit tent objects.

-- fixed: hitting New Map in the map editor after working on an existing map wouldn't clear the point lights, nor reset global lighting and weather.

-- fixed: in the map editor, narrowing the displayed objects in the New Object menu with a search, selecting an object, painting the object, then reopening the menu and flipping to another page of objects would result in the game displaying objects as if they were not narrowed by a search.
Title: Re: A new engine!
Post by: CraigStern on June 04, 2019, 05:31:38 PM
-- added Tab key browsing to the input fields in all of the various windows in the cut scene editor.

-- added Tab key browsing to the input fields in all of the various windows in the character creator.
Title: Re: A new engine!
Post by: CraigStern on June 05, 2019, 05:26:23 PM
-- spent the day banging my head against a metaphorical wall trying to fix a really stupid bug (https://answers.unity.com/questions/1638173/removing-focus-from-a-tmp-inputfield.html) with the new TextMeshPro input fields. No luck; will move on to something else tomorrow pending guidance from the Unity help forums.
Title: Re: A new engine!
Post by: CraigStern on June 06, 2019, 05:42:05 PM
-- began working on an item editor! :) I'm structuring this one so it can show up as a sub-editor within the other, main editors.

-- added item usability types to ActionsReplies.xml for predictive text guide purposes.
Title: Re: A new engine!
Post by: CraigStern on June 07, 2019, 05:24:05 PM
More work on the item editor!

-- designed the basic interface, with fields representing every possible item property.

-- the item editor now successfully loads items right off the campaign editor screen, auto-filling each field with the appropriate value for that item and showing the item's image.

-- new items created in the editor are now properly saved to Items.xml!
Title: Re: A new engine!
Post by: CraigStern on June 10, 2019, 05:24:29 PM
-- created a new XML reference for asset names to be used in the various editors, filled it with item images and music tracks.

-- the item editor now has working subwindows displaying all available item icons and all skills that equipment can grant a character; clicking them will change the item's icon / grant an additional skill.

-- fixed: the game would crash upon trying to save items with apostrophes in their names to XML.
Title: Re: A new engine!
Post by: CraigStern on June 11, 2019, 04:35:37 PM
-- the campaign editor now has a little pop-up guide that directs you through the first few steps of creating your own campaign!

-- the Report interface now processes title and text for special characters.

-- the Report screen now completes the text animation when clicking mid-animation instead of immediately moving to the next page.

-- fixed: the game would crash upon trying to save characters with apostrophes in their names to XML.
Title: Re: A new engine!
Post by: CraigStern on June 12, 2019, 05:11:33 PM
Had a playtest party for the game's campaign editor last night; today is devoted to fixing most of the bugs we found!

-- the campaign editor's help guide now only pops open on its own when you visit the Campaign Editor and there are no custom campaigns detected anywhere (that is: presumably, on your first visit).

-- repositioned the "randomize stats for level" window and redesigned the buttons to make it clearer that pressing confirm applies new, proc gen stats but doesn't close the window.

-- the Character Editor now supports negative resistances, negative dodge, and negative aptitude in character stats.

-- fixed a couple of issues with the regular expressions excluding certain characters from being typed into the bark input fields in the Character Editor.

-- fixed: generic units of specified gender were being treated as "Either" units for purposes of portrait generation in the Character Editor.

-- fixed: you could end up on the portrait-editing screen for generic characters by hitting the back button after choosing gender in the Character Editor.

-- fixed: the buttons in the Skill Progression sub-menu in the Character Editor were selecting regular Skills when clicked instead of adding to the unit's skill progression.

-- fixed: if you loaded a character with a unique portrait and backed all the way back to the choice between unique and generic, then chose Unique, the game would generate a new portrait for the character even if you made all the same species, gender, and class choices as the ones the character already possessed.

-- fixed miscolored outlines on one particular set of modular spriggat horns.

-- fixed: the Number Picker UI element would play the wrong sound effect when engaging wrap-around numbers.

-- fixed: hitting the New Item button in the Item Editor while already editing an item would result in the two interfaces overlapping instead of the new item window replacing the edit item window.

-- fixed a couple of null errors in the Load Map window in the map editor.

-- updated the Load Map window in the map editor with multi-page logic.

Also, in non-bug-fixing news:

-- added the reeds objects to the game (which I had somehow neglected to do before!)

-- updated the Attack on the Camp battle in the main campaign with the new tent objects, and enlarged the map using the new Add Row and Add Column feature in the map editor so it's less cramped.

-- updated the Battle with Bandits 1 battle in the main campaign with the new caravan wagon object.

-- fixed the scaling on the new caravan wagons to better match everything around them.
Title: Re: A new engine!
Post by: CraigStern on June 13, 2019, 05:23:13 PM
-- created graphics for the Generated Talwar item and Laser Blast skill, imported them into the game.

-- items now support the attribute personalItem, a bool value that tells the game whether an item is locked to the character who possesses it a la Fire Emblem personal weapons. If it is, then the item cannot be traded or dropped--even if the owner dies in combat. (By default, items are not personal items.)

-- items now support the attribute sellable, a bool value that tells the game whether an item can be sold in the shop interface or dropped from reserve supplies. (By default, this attribute is true.)

-- the item editor now has check boxes that let you set whether an item is personal or sellable.

-- put limits on how far you can zoom in or out in the dialogue editor, thereby fixing a bug in which the player could zoom out so far that the editor becomes inverted.

-- the dialogue editor now automatically adds a NextBranch reply on every new branch, making it faster and easier to create basic dialogue trees.

-- fixed: the game would sometimes strip the Custom node out of Items.xml, preventing custom items from getting saved to XML successfully.

-- fixed: clicking reply type predictive text in the dialogue editor had somehow ceased to auto-populate the fields.

-- fixed: the New Game slot selection menu would sometimes display the wrong page.

-- fixed another bug relating to saving and loading items with apostrophes in their names.
Title: Re: A new engine!
Post by: CraigStern on June 14, 2019, 05:29:25 PM
-- tweaked the rules a bit: sellable items can now be dropped from Reserve Supplies (just not sold).

-- finally replaced the ugly placeholder graphic for "FromPlayerRoster" spawns in the map editor with a graphic of little shadowy dudes.

-- added text prediction to the Music field in the Map Settings window in the Map Editor.

-- added a describer window tied to conditions text prediction in the Map Editor, explaining what each condition does.

-- added text prediction to the usability type field in the Edit Item screen in the Item Editor.

-- fixed an oversight in which Quest items could be sold in a shop or dropped from Reserve Supplies.

-- fixed: the game didn't red-out the "Drop" button on undroppable items.

-- fixed: if you created an item with no statPlus values, the game would throw a null error upon trying to parse it.

-- fixed: the phrase "Unlimited uses" in item tooltips would get cut off.

-- fixed: predictive text descriptions were broken in a few areas of the editing suite.
Title: Re: A new engine!
Post by: CraigStern on June 15, 2019, 05:00:13 PM
-- added text prediction to the Music field in the Map Settings window in the Cut Scene Editor.

-- the game now dynamically creates a list of all possible masteries by checking the masteries on all other items that exist in the game, then uses them for masteries predictive text

-- added text prediction to the Masteries field in the Item Editor.
Title: Re: A new engine!
Post by: CraigStern on June 17, 2019, 03:52:30 PM
-- received and implemented new 3D models: fruit stands, of the sort one might find in an outdoor market!

-- received and implemented updated caravan wagon models that fit a bit more comfortably within their spaces.

-- split the Masteries field in the Character Creator into 7 different fields, each with their own predictive text, then changed the validation logic to accommodate them.

-- the Character Creator now throws an error when you assign a mastery to a character that doesn't match the mastery requirement of any item found in the game (including custom items for that campaign). This effectively catches typos and prevents assignment of useless masteries.
Title: Re: A new engine!
Post by: CraigStern on June 18, 2019, 03:46:39 PM
-- two new color variants on the "pills" item graphic: yellow and purple.

-- new status effect: Regenerating. Grants 10% health recovery each round for 5 rounds.

-- new item: Ascender Pills. Grant Lucid status for 4 rounds (+25% Psy and +1 reflexes), but drains 7 energy.

-- new item: Regenerator Pills. Grant Regenerating status for 5 rounds.

-- the Item Editor now has predictive text for the "status effects added" and "status effects removed" input fields that explain what the selected status effect does.
Title: Re: A new engine!
Post by: CraigStern on June 19, 2019, 05:31:16 PM
-- the "runs script" field in the Item Editor has been broken into three fields, each of which now have predictive text that allows autocompletion for the names of global scripts existing in the campaign.
Title: Re: A new engine!
Post by: CraigStern on June 24, 2019, 05:35:30 PM
Began reaching out to artists to contract for title art.

-- made Pessimistic characters less appallingly bad; they now get twice as much bonus Dodge, and are more likely to Practice at night.

-- fixed a null error that occurred when trying to hold a gathering with 0 characters in one's roster.
Title: Re: A new engine!
Post by: CraigStern on June 25, 2019, 05:07:08 PM
-- when a character comes onto the battlefield with status effects already active, the game now re-applies those status effects and shows them blinking over the character's head from the get-go.

-- if you run out of food, characters can now become starving (50% chance, 1 day) or sick (25% chance, 1-2 days). The odds of instead becoming Worried, Resentful, or Upset are now much lower, but if these happen, they last 1-4 days instead of 0-3.

-- the "starving" mood now imposes Distracted status in addition to Weakened status.

-- camp activity narrations can now have a roster size range requirement to trigger, using the syntax rosterSize="x" or rosterSize="x-y" (where x and y are positive integers).

-- there are now alternate camp activity narrations for throwing a gathering with rosters sized 0 and 1.

-- wrote new narrative variations for the "group practice" camp activity.

-- wrote new narrative variations for the "rained out" camp activity.

-- the portrait displayed during the "gathering" camp activity now always has a happy facial expression.

-- fixed: if you ended camp activities in the main campaign with a roster size of 0, the game would display a blank dialogue screen for the "late" event instead of proceeding to the "night is over" frame of the scene.

-- fixed: if you attempted to hold a gathering at camp in the main campaign with exactly 50 more food than your team's daily consumption, the game would act like you didn't have enough food.

-- fixed: if you attempted to hold a gathering at camp in the main campaign with 0 food, the game would let you proceed.

-- fixed: camp activities and events could send a character's energy below 0. The character's energy would still be displayed as 0, but energy-recovering moves in battle would fail to improve it as expected.

-- fixed a typo that was preventing the game from recognizing mood changes arising out of camp activities.

-- fixed: moods gained from camp activities were not imparting associated status effects to characters.

-- fixed: the game was treating too much time as having passed on the calendar screen for purposes of resolving character moods.

-- fixed a bug that was causing the game to load character moods before loading its library of moods, resulting in character moods loading without their accompanying data.

-- fixed: Distracted status was affecting Dodge in addition to Counterattacks and Reflexes.
Title: Re: A new engine!
Post by: CraigStern on June 26, 2019, 05:13:50 PM
-- created the status effect Clouded, which is basically the Psy version of Weakened: -50% base Psy.

-- Strengthened and Weakened status effects changed back to applying to current Strength instead of base Strength due to the large discrepancy in base Strength between characters with equipped weapons and enemies who have weapon-based attacks naturally (but no actual items equipped).

-- typed out entries for every stat characters can have, along with descriptions, and put them in ActionsReplies.xml for predictive text purposes.

-- the stat name fields in the item editor now have predictive text functionality!

-- began preliminary work on the Skill Editor.

-- typed out entries for every element a skill can have, along with descriptions, and put them in ActionsReplies.xml.

-- fixed a bug in the AI that produced an out-of-range error when checking for RangeBonus tag data on units possessing said tag.
Title: Re: A new engine!
Post by: CraigStern on June 27, 2019, 05:03:15 PM
-- spent today plugging away on the new skill editor, which is now very close to fully functional!

-- fixed: a number of item attributes weren't getting saved to XML when exiting the Item Editor.

-- fixed a typo in the Rapier item info.
Title: Re: A new engine!
Post by: CraigStern on June 28, 2019, 04:53:45 PM
-- filled in AssetNames.xml with the names of all 203(!!!) skill graphics that ship with the game, hooked it up so the game displays them all in a browseable menu in the Skill Editor for selecting a skill's button graphic.

-- the Skill Editor is now working! :3

-- the light color swatch in the Light Properties window in the Map Editor now auto-updates dynamically as you change the color values.

-- created a light bulb icon to make it easier to find point lights for editing in the Map Editor. Point lights now display this icon in the map editor.
Title: Re: A new engine!
Post by: CraigStern on June 29, 2019, 02:38:44 PM
-- new script action RemoveMood. Two parameters: Character Nam and ,Mood Type (or -ANY-). Removes a mood from the named character (use -ANY- to clear all moods).

-- created a new button graphic: Music.
Title: Re: A new engine!
Post by: CraigStern on June 30, 2019, 03:44:01 PM
-- when creating a custom campaign, the game now sticks Music and Sound subfolders in it for any custom music or sounds you wish to use.

-- related to the above: the game now supports custom music and sounds in user-created campaigns! :D Simply stick Custom/ in front of the name of your chosen audio to have the game pull the track from your campaign's Music/Sound folder. (Just make sure it's an Ogg file, as Unity doesn't support streaming mp3s at runtime on desktop.)

-- improved the music button graphic.
Title: Re: A new engine!
Post by: CraigStern on July 01, 2019, 03:37:29 PM
-- created a Music selection menu that displays all music in the game and all music in the custom campaign's Music directory; it lets you preview and select tracks for the current scene, and sticks an X in front of tracks that lack the necessary file extension.

-- added the music browser button and music browser to both the Cut Scene Editor and the Map Editor.

-- added all sound effects in the game to the default assets list for browsing.
Title: Re: A new engine!
Post by: CraigStern on July 02, 2019, 04:55:51 PM
-- you can now delete player-created characters in the Campaign Editor. (The game will ask you to confirm before deleting.)

-- new tag: BonusDmg. Allows a character skill (and skills dependent on that skill) to deal a set amount of bonus damage of an element different than that skill's own element. Three parameters: (1) Skill Name, (2) Amount (integer), and (3) Element.

-- proc gen Poisoned and Blazing weapons now deal 4 bonus Poison damage and 4 bonus Heat damage, respectively, by granting the BonusDmg tag for all skills those weapons grant while equipped.

-- began transferring all data relevant to the game's bazillion classes into a new Classes.xml file, both for autopopulation purposes and--eventually--with an eye to supporting custom character classes.

-- the Generate Unit submenu within the Map Editor's New Unit menu now does predictive text on the chosen character class field, and does error-checking to ensure that a) a valid class was entered, and b) that the unit hasn't been given a forced species that is invalid for the supplied class.
Title: Re: A new engine!
Post by: CraigStern on July 03, 2019, 03:50:39 PM
-- created a new variant on the fruit stand destructible object with a green awning texture.

-- fixed a few bugs.
Title: Re: A new engine!
Post by: CraigStern on July 05, 2019, 03:02:14 PM
Had yesterday off for Independence Day; but now it's back to work!

-- gave artist feedback.

-- fixed: in the Cut Scene editor, if you removed dialogue from the current frame, the dialogue window would still be showing in the editor's preview pane afterwards as though nothing had changed.

-- fixed a bug that could cause the game to get stuck on the victory screen at the end of a battle.

-- fixed a really dumb typo that would sometimes cause characters to never have an available narration during nighttime activities, producing a range error.
Title: Re: A new engine!
Post by: CraigStern on July 08, 2019, 03:57:46 PM
-- received, imported new single-width cliff face variants for the Cave tileset! Filled in their tile data.

-- received new cut scene background: Somnus home interior!

-- wrote some new attack bark variants.

-- the scenes overview in the campaign editor now shows little arrow icons for scenes containing a Next Scene attribute, and tells you the scene it's linked to on mouseover.

-- the skill editor now provides a visual preview of each skill's AOE pattern, generated dynamically based on the text entered.

-- the skill editor now throws an error if you try to save a skill that has no post-usage behavior (i.e. afterAtk) defined.

-- the skill editor now sets the affects field to Health  and the post-usage behavior field to End Turn automatically by default when creating a new skill.

-- fixed: the skill editor didn't have the post-usage behavior text field hooked up properly.

-- fixed a few edge cases in the game's autotiling logic.

-- fixed a bug in the game's MoveUnit and MoveUnitBy script actions that was preventing them from working correctly.
Title: Re: A new engine!
Post by: CraigStern on July 09, 2019, 05:08:04 PM
-- finally settled on a name for this new game: Together in Battle!

-- grabbed the URL for the game's name.

-- drew up a contract for the game's box art with an artist I found on DeviantArt.

-- created all the directional variants for the single-width cliff face Cave tiles; created all the chasm, water, and lava transitional variants, and created all remaining tile data for the set.

-- commissioned sandstone (i.e. desert) texture variants on the existing Street and Cave tilesets.

-- new dialogue trigger: OnSkillSelected. This is an updated version of the old OnAttackSelect trigger. It has 3 parameters, any of which can be replaced by -ANY-: (1) skill name, (2) army number, and (3) character name. Dialogue will be triggered when the skill is selected by the named character on the specified army.

-- new script action: ClearSkills. This is like RemoveSkill, but it removes every natural skill the unit possesses. One parameter: unit name.

-- the game now implements the Exploration Mode condition, preventing the player turn box from showing up in battle, treating all units as movement 12, and never taking away steps from characters after they move.

-- weather effects now have different 3D start rotation to better match the camera perspective.

-- fixed: it was possible to see the "edges" of the weather effect area. Weather effects are now tied to the camera so they remain consistent regardless of map dimensions.

-- fixed a graphical glitch involving certain of the wooden fence 3D object assets.

-- updated the scripting for the first few scenes of Telepath Tactics to fit changes made in the new engine. The old campaign is now playable through to the end of the Training tutorial scene.
Title: Re: A new engine!
Post by: CraigStern on July 10, 2019, 01:24:48 PM
-- finished up the Little Lava Cave multiplayer map using the new Cave tiles.

-- recreated the River of Fire multiplayer map in the new engine.

-- created generic Swordsman, Kineticist, Crossbowman, Engineer, Stone Golem, and Dark Spriggat characters for use with the multiplayer maps.

-- created a default roster for the above characters, along with a basic menu that lets you choose a map to play, in the Introduction scene for the Multiplayer "campaign."

-- in the Character Creator, the game now warns you when you have unsaved changes and you click New Character, Generate Character, or Load Character. If the current character is complete, the game will auto-save it for you before proceeding; if not, you'll be given the choice of abandoning your character or not.

-- fixed: the game could produce a null error when using the Generate Stats for Level window in the character editor.

-- fixed: the Character Generator would fail to generate a sprite set for generic golem characters.

-- fixed a graphical blemish on the generic male Kineticist portrait.

-- fixed: damage dealt to characters in allied armies was counted towards your Damage Dealt for scoring at the end of battle.

-- fixed: it was possible to erase Damage Taken (or even end up with negative Damage Taken!) on the scoring screen at the end of battle through healing one's characters.
Title: Re: A new engine!
Post by: CraigStern on July 11, 2019, 05:03:03 PM
-- the game now auto-creates Multiplayer as a custom campaign directory with the default multiplayer maps inside of it when you first run the game. (Because it's a custom campaign, they're all fully moddable!)

-- created a new 2-player multiplayer map: Doublebridge!

-- created a single-player variant of Doublebridge as the first League 1 battle in the main campaign.

-- updated the main campaign so it acknowledges when you've advanced to League 1; wrote new Arena dialogue introducing League 1 and Doublebridge.

-- reapportioned items from the "universally available" list to the individual campaigns lists to give greater control over which items spawn in which campaigns. (And in particular, to better control the contents of random item drops in Multiplayer.)

-- the game no longer displays step counts when mousing over move tiles in exploration mode, as character movement is unlimited; it now instead displays the sprite corresponding to the character's move type.

-- in exploration mode, the blue boxes in the move tiles are now invisible, making it feel like much more of a natural point-and-click movement experience.

-- after you click to move in exploration mode, the game camera now auto-pans to center on the destination so you don't have to constantly finagle the camera.

-- when you click on a character who isn't in your army while in exploration mode, instead of displaying orange movement tiles, the game now has your selected unit walk over to the closest space adjacent to that character. If they're already adjacent, the game will check if the selected character can initiate an OnTalk-triggered dialogue with the clicked character--if so, the game will automatically initiate said dialogue.

-- the game can now be toggled dynamically between combat mode and exploration mode using the AddCondition and RemoveCondition script actions.

-- fixed: the stats window in the Character Creator was missing the Perception stat.

-- fixed window positioning in a couple of submenus in the map editor.

-- fixed: you could end the turn while in exploration mode.

-- fixed: the game would apply normal post-usage behaviors to skills used while in exploration mode, resulting in characters becoming unusable after using an End Turn skill.
Title: Re: A new engine!
Post by: CraigStern on July 12, 2019, 05:33:42 PM
-- the game now hides the dialogue screen and pauses execution of remaining queued up script actions while characters perform MoveUnit and MoveUnitBy actions. (Specifically, it pauses after the last such action executed in a batch so that multiple characters can be scripted to move simultaneously.)

-- the game no longer displays tooltips for bridge chunks spawned on land tiles (which exist in many maps for aesthetic reasons).

-- new, optional fourth parameter on the MoveUnit action: second character name. If you name a character on the battlefield, the unit you're moving will move to the closest adjacent space relative to the second named character.

-- created new "move-and-attack" cursor graphic. Set it up in the game so it can be called as a new cursor at runtime.

-- fixed: if you saved mid-battle and non-repeatable dialogue with a blank Conv ID had previously triggered, upon reloading, every dialogue without a Conv ID would be removed. For non-repeatable dialogue with a blank Conv ID, the game now stores it (and removes it) by its trigger and trigger params instead.

-- fixed: right-clicking a character and having them use an item would not result in the game treating that character as selected if they weren't already, but it would change the contents of the Actions Bar as though the character was selected.

-- fixed: transitioning directly from one save-enabled battle scene to another without an army having attained victory would result in the game misinterpreting the save as a mid-battle save, essentially trapping the game into the current scene forever.
Title: Re: A new engine!
Post by: CraigStern on July 13, 2019, 01:27:59 PM
-- new script action: SelectUnit. One parameter: (1) character name. Behaves as though the player had left-clicked the character in question.

-- new script action: RemoveUnitAt. Four parameters: (1) Y coordinate, (2) X coordinate, (3) treat removal as unit death? (boolean), and (4) specify category of unit to remove from space (character, object, bridge). If the category parameter is left blank, the game will simply remove the top unit on the space (characters first, then objects, then bridge tiles).

-- new script action: RemovePortrait. One parameter: (1) portrait name. Looks for the portrait assigned that portrait name and removes it.

-- new condition and script action: Recover. In any case, three parameters: (1) army number; (2) health recovery as a proportion of each unit's max health (decimal between 0 and 1); (3) energy recovery as a proportion of each unit's max energy (decimal between 0 and 1).

-- Recover and Fatigue conditions both now work in cut scenes, but they affect by roster instead of by army.

-- the AddCondition script now works with Recover and Fatigue conditions (including in Cut Scenes).

-- fixed: because the action runner now pauses while waiting for scripted character movement and would only unpause if a character stopped moving and no one else was still moving, it resulted in the action runner never unpausing its action execution if two or more units both underwent scripted movement and reached their destinations simultaneously.

-- fixed: setting a mover's animation state to Rest in the direction they were last facing should have happened immediately upon finishing moving, but instead it happened after running any unpaused actions, effectively overwriting any FaceUnit actions that were queued up to occur after MoveUnit.

-- cleaned up a bunch of scripting in some of the earliest scenes of Telepath Tactics to fit changes made in the new engine. The old campaign is now playable through to the end of the battle with Zash and Red.
Title: Re: A new engine!
Post by: CraigStern on July 14, 2019, 08:39:12 PM
-- when trying to load a scene that doesn't exist, the game now returns to the title screen instead of getting stuck on the current scene.

-- the dialogue editor now checks for duplicate Conv IDs and Script names when exiting the dialogue editor; if it finds any, it now pops up a warning and gives you a chance to go fix the issue.
Title: Re: A new engine!
Post by: CraigStern on July 15, 2019, 05:14:25 PM
-- reduced the default character recovery rate while resting in camp from 25% to 20%.

-- in the main campaign, every non-Wounded character now recovers 5% of their Health and Energy per night whether they rest or not.

-- the Recovery script and condition now ensure that when the recovery value is greater than 0, each character gains a minimum of 1 point in the chosen stat (or, alternatively, when the recovery value is less than 0, that each character loses at least 1 point in the chosen stat). This will keep characters with low maximum health or energy from recovering nothing at all at low recovery percentages.

-- tweaked the AI algorithm to give somewhat greater priority to moves that involve backstabbing targets who could otherwise counterattack.

-- fixed an annoying formatting issue that caused the range text for multi-range attacks to cut off within skill tooltips.

-- fixed a dumb bug in which the game would momentarily overshoot while tallying up the player's score in the Victory screen at the end of battle.

-- fixed a particularly annoying bug in which the game would outright ignore it when you clicked the mouse on a unit if the cursor were positioned within a narrow area situated at the character's feet.
Title: Re: A new engine!
Post by: CraigStern on July 16, 2019, 05:21:34 PM
-- big UI feature added: move-and-attack! If one of your characters is selected and you shift-click a character not belonging to your army (or a destructible object), the game will now check to see if the unit you shift-clicked is within move-and-attack range for your character using their 1-slot skill (the one furthest to the left on the Actions Bar). If it is, then the game will choose a spot your character can attack from with that skill, then move the character there, auto-select the skill, and display the skill's reticles.

-- the game now displays the Sword cursor when you've got Shift held down and are mousing over a unit, indicating that you can click to initiate a move-and-attack command.

-- fixed a pretty nasty bug with mid-battle saves. The game was saving all units present on the battlefield as well as all the units who were not present; but upon reloading a mid-battle save, the game would only reload those characters who were present on the battlefield! If the game was then saved again, this would result in all non-deployed characters vanishing from the game going forward.
Title: Re: A new engine!
Post by: CraigStern on July 17, 2019, 04:21:25 PM
Officially hired an artist to create box art for the game! (Not that it's likely to end up physically printed with any sort of box to speak of...)

-- improved the recruitment interface! Character stats are now represented by their symbols instead of by rows and rows of just text. Instead of instantly hiring them, clicking a recruit now causes their stats to remain onscreen even after you mouse off the portrait; you can then mouse over stat icons for explanations of what each stat does. Moreover, clicking a recruit causes a "Recruit Character" button to appear; clicking the button is what now hires the character, eliminating accidental recruitment via mis-clicks.
Title: Re: A new engine!
Post by: CraigStern on July 18, 2019, 05:19:15 PM
-- cut scenes in the game now support custom backgrounds!

-- when the game creates a new campaign, it now creates a Backgrounds folder for custom backgrounds.

-- the Sound, Music, and Backgrounds folders are now each created with their own CustomAssetInfo.xml file containing instructions on how to format each type of custom asset.

-- the Cut Scene Editor now loads custom backgrounds within the background selection window and allows you to use them in cut scenes.

-- new attribute type supported in UnitsToList (http://sinisterdesign.net/forum/index.php?topic=1769.msg52024#msg52024): Bio Detail.

-- if you leave the Roster or Army parameter in UnitsToList blank and the game is in a cut scene, the game will now automatically sub in the number of the current roster instead of simply defaulting to 0.

-- new script action: AddBioDetail. Allows you to add a biographical detail to a character. Three parameters: (1) character name, (2) detail type, and (3) detail value. (Characters can have an unlimited number of detail values associated with a detail type, and you can enter any arbitrary value for the detail type.)

-- new script actions: IfBioDetailGoTo and IfBioDetailRun. These let you move through a dialogue tree and run scripts, respectively, based on whether the named character possesses the bio detail value(s) you enter. The first parameter is the character name; second parameter is the bio detail type; then an arbitrary number of parameters (one or more) are bio detail values that will return a match; and the final parameter is the branch number to go to/script name to run.

-- LASTINLIST[] can now return -1, indicating a list with no entries in it.

-- the Worried mood now imposes Distracted status.

-- wrote a new random event in the main campaign that changes slightly based on the character's biographical details.
Title: Re: A new engine!
Post by: CraigStern on July 19, 2019, 04:03:41 PM
-- new special character: -GOD-. Picks from the list of deities that the character worships and substitutes its name (or, if the character is atheist, subs in "no one").

-- the Hire button on the recruitment screen now appears grayed out if you don't have enough money to hire a character.

-- wrote a follow-up event to the new event from yesterday.

-- fixed a few relatively minor scripting errors in the new camp event, added some alternative phrasings into the narration.

-- fixed: individual character Mood prefaces could sometimes show up inappropriately prior to generalized messages occurring during camp activities (like the announcement that no one cleaned).

-- fixed: the game was inappropriately decrementing the length of status effects tied to mood under certain circumstances, causing them to time out before the character's associated mood ended.

-- fixed: you could mess up the game by hammering the escape key during scene fade-outs.

-- fixed: cut scenes were only loading characters in the current roster, meaning that any character who'd temporarily left the team (or was in another roster) wouldn't be saved upon exiting the scene.
Title: Re: A new engine!
Post by: CraigStern on July 21, 2019, 11:13:21 PM
Had a playtest!

-- when all of your characters have used turn-ending skills, the game now gives you a prompt asking you if you want to end your turn.

-- fixed a branch name typo that made one of the tutorials lock the game.

-- fixed: unique generated enemies that die would try to generate a memory of falling in battle, which produced a null error because they don't have memories.

-- fixed: poison, shadow, and light resistances were being displayed in the wrong spots in the character screen in battle.
Title: Re: A new engine!
Post by: CraigStern on July 23, 2019, 05:21:48 PM
-- you now get a pop-up notification warning you if you attempt to conclude deployment with undeployed characters (provided that there's still space on the battlefield to deploy more of them).

-- if you send a dialogue tree to its current branch via a GoTo-type action, the game now ignores the command instead of getting locked into a (potentially infinite, game-crashing) loop where it re-runs the current branch's actions over and over.

-- added a timer to the game's internal ActionRunner class. If a series of script actions takes longer than 12 seconds in real time for the game to execute (during which time the game will appear frozen), the game now assumes that there is an infinite loop going on and cuts it off.

-- in all GoTo-type script actions, the game now auto-detects if you've entered a branch number parameter that isn't an integer, then--if so--checks for a branch name equal to the string you entered. If it finds a match, it'll use that branch's number as if you'd correctly used BRANCH[] instead of always defaulting to 0.

-- fixed: turns out, the game was using asterisks as delimiters for individual reserve supply lists in the save game class, meaning that using ~* as a shorthand for an apostrophe in item names was actually a big no-no. I've since switched over to using ~~ instead.

-- fixed: when items were passed out to characters from Reserve Supplies in a cut scene where camp activities later occurred, a duplicate copy of those items would reappear in Reserve Supplies in the next scene.

-- fixed: the game would sometimes throw a range error when ending camp activities on character dialogue.

-- fixed a few scripting errors in the Recruitment scene in the main campaign.
Title: Re: A new engine!
Post by: CraigStern on July 24, 2019, 05:29:19 PM
-- you can now use a level range for the second parameter of ShowRecruits instead of just a single set number.

-- in the main campaign, the base level of all recruitable characters now increases by 5 when you visit the recruitment area after getting into League 1, with associated dialogue.

-- the Shop interface now gives you a pop-up text confirmation when you buy or sell an item in addition to the "coins jingling" sound and the animation of your money counting up or down.

-- fixed: if you used a script action that checked the value of a custom variable and the game couldn't find that variable, it would just always return false no matter what. Now if you do that, the game will add the custom variable with a value of 0 (if a VAL) or a blank string (if an STR), then perform the comparison.

-- fixed: the AI was not taking into account character resistances and status effect immunities when scoring the impact of status effects on various moves.

-- the AI no longer adds status effects into the equation when scoring moves against targets with an inherent value of 0.1 or less (i.e. most destructible objects).

-- the AI no longer calculates damage from knockback into environmental hazards against targets with a pushability of false.
Title: Re: A new engine!
Post by: CraigStern on July 25, 2019, 04:32:28 PM
-- reworked the level-up display behavior when in camp. Previously, if a character gained enough experience to level, it'd display the narration and experience bar, then automatically popup with the level-up screen after 2.5 seconds. Then you'd clear the screen, and finish reading the narration.

Now, it only shows the narration and experience bar, and only pops up with the level-up screen on your next click--then, upon closing the level-up screen, it auto-advances to the next camp activity narration instead of returning to the practice narration.

-- created a floatRng class, the float equivalent to intRng.

-- created a basic 2D particle system from scratch! (An unfortunate necessity, given that Unity doesn't properly display ordinary particles on UI canvases set to display in Screen Overlay mode.) I'm pretty proud of it. It supports a ton of different settings that can vary from particle to particle, including independent x and y velocities, rotation, fade-out, RGBA values, lightness, and independent x and y decay rates.

-- used the new 2D particle system to create a little "sparkle explosion" animation whenever a character's experience bar tops out, indicating a forthcoming level-up.

-- fixed: characters would sometimes say their attack bark when about to attack destructible objects in battle.
Title: Re: A new engine!
Post by: CraigStern on July 26, 2019, 04:42:23 PM
Artist feedback!

-- created a new random camp event: a mustebeast has sprayed one of your characters' tents, and you must decide whether to make them sleep in it, give them money and have them spend the evening buying a new tent, or have them bunk with another character for the night (in which case those two characters perform the Talk activity together that evening).

-- new tag supported: ForceNextCampActivity. This forces the character to perform a specific activity during their next time participating in camp activities. Has 1-2 parameters: (1) activity name, and (2) partner name (for 2-character activities, like Talk).

-- new, optional parameter added to IfStringGoTo and IfStringRun -- reverse match (true or false). If set to true, the game will check to see if the specified string doesn't match the supplied value before executing the GoTo or Run part of the action.

-- it is now possible for an early-evening event in the main campaign to guarantee a follow-up event later that evening.

-- the main campaign now strips out blank event list entries before choosing a nightly event. (Still not totally sure how those blank entries got in there to begin with, though)

-- golems, spirits, and units with a wound level are now all excluded from random events in the main campaign.
Title: Re: A new engine!
Post by: CraigStern on July 27, 2019, 06:04:20 AM
-- fixed the dialogue parsing function so that forward slashes are now supported within dialogue text! (Which, incidentally, also fixed an issue with the "end formatting" special characters not working right within dialogue.)
Title: Re: A new engine!
Post by: CraigStern on July 28, 2019, 12:00:59 PM
-- greatly improved the look of the "sparkles bursting out the end of the filled-up experience bar" effect.

-- new supported string stat for the SetStat action: Player Ref. Changes what word or phrase the unit uses to refer to the player whenever the -PREF- special character appears in dialogue.

-- fixed: you couldn't use ID[] tags to reference characters with the SetStat action in cut scenes.
Title: Re: A new engine!
Post by: CraigStern on July 29, 2019, 05:05:35 PM
-- edited the rough draft of the game's new title screen art, stuck it onto the title screen as an upgraded placeholder!

-- received a new background: Psy Academy dorm room! Integrated it into the game.

-- you can now use the name of a custom List variable as the materials attribute for a Shop stock, allowing you to effectively change the types of materials available for generating weapons or armor over time.

-- the main shop in the main campaign now makes use of this feature. Steel has been taken away as a starting material, to be introduced later as a reward for quest progression.

-- prettied up the animated bars that appear over character portraits in cut scenes, fixing some positioning issues they had in the process.

-- fixed: experience bars in camp activities weren't taking character Aptitude into account for purposes of displaying experience gained in the experience bar.

-- fixed: the ForceNextCampActivity tag wasn't getting removed from units after being put into effect.

-- fixed weird issue on the title screen where the game would register button presses outside the buttons.

-- fixed: the game would not play the victory fanfare upon winning a battle offering 0 aura for victory.
Title: Re: A new engine!
Post by: CraigStern on July 30, 2019, 05:24:00 PM
-- new script action: StatGrowthsToList. Creates a list of every stat for which the character possesses a growth value greater than 0. Three parameters: character name, list name, and an optional boolean parameter, weighted list. If weighted list is set to true, each stat growth is added to the list a number of times equal to the growth's value.

-- new tag supported: ForceNextStatUp. This forces the specified stat to be the next one chosen for improvement whenever the character's next level-up occurs. (Note that these tags can stack.)

-- new in-game event written and scripted: one of your units approaches you and asks you which stat they should work on improving. Whichever you select, they will improve it during their next level-up.

-- new script action: SkillProgToList. Creates a list of everything in the specified character's remaining skill progression, starting with their next one. Two parameters: character name and list name.

-- new script action: ListToSkillProg. Set the specified character's remaining skill progression to the contents of the specified list. Two parameters: character name and list name.

-- created a new icon to represent low morale.

-- the character screen now displays the "low morale" icon in place of the regular morale icon when a character's morale is in the negative range.

-- there is now an animated "morale bar" in the style of the health/energy/experience bars that displays changes to a character's morale in cut scenes and camp activities.

-- fixed: camp activities with individualized morale effects that did not trigger dialogue weren't actually affecting character morale.

-- fixed a small scripting error that sometimes caused the "crush" event to freeze the game.
Title: Re: A new engine!
Post by: CraigStern on July 31, 2019, 03:34:34 PM
-- created a new random event in which a character asks you which of their next 3 skill progression entries they should focus on for their next level-up. Whichever one you choose, it will be placed at the very front of that character's skill progression!

-- doubled the frequency of paydays to give the game a tighter economic core loop and increase the significance of character salaries. (Paydays now occur biweekly instead of monthly.)

-- increased the amount of money awarded for Arena battles to make it easier to make payroll.

-- the various difficulty settings now start you out with more (or less) aura.

-- created a fog of war "tile" that sits on top of a space hidden in fog of war and spits out roiling black volumetric smoke (it looks pretty darn cool in motion)!

-- coded fog of war in battle! It now appears in the appropriate spots (1) at the start of battle, (2) at the start of each turn, and (3) after each character move (provided that the Fog of War condition is set to true; if it isn't, then it doesn't appear at all). If deployment and fog of war are both set to true, while deployment is going on, the fog appears on every space that isn't within 2 spaces of a deployment tile. If you do manage to get the space selector over a fogged space somehow, the terrain inspector only displays "???"; any unit on any fogged tile is invisible. If fog of war is on, the undo stack is cleared after every character move.
Title: Re: A new engine!
Post by: CraigStern on August 01, 2019, 05:13:49 PM
Artist feedback!

-- received updated yelling mouth variations for generated lissit portraits.

-- received new variants on the portrait for the King of Dese.

-- received, created directional variations and tile data for new sandstone variant of the Castle terrain tileset.

-- created terrain preview swatches for new sandstone variant tilesets for the map editor.
Title: Re: A new engine!
Post by: CraigStern on August 02, 2019, 04:25:44 PM
-- having greater than 100% Accuracy now has some purpose beyond making Dodge-y characters easier to hit: it increases the likelihood of status effects hitting by 1% for every 2 points above 100.

-- added a gravity property to the 2D particle system to support proper parabolic motion for "spray" style particle effects.

-- added 2D particle effects to the Info Bar in cut scenes. Whenever you spend (or lose) aura, a spray of coins now erupts from the Aura icon in the info bar; when you gain aura, little sparkles burst out. Whenever you lose food, like food particles spray from the Food icon in the info bar; when you gain food, little sparkles burst out. (Buying food, for instance, will both cause coins to spray out of your Aura icon and sparkles to burst from your Food icon.)

-- added 2D particle effects to the Shop interface in cut scenes. Whenever you buy an item, little sparkles burst out of the Inventory button in the bottom-right of the screen, indicating a) that you've gained the item and b) drawing your attention to where it went.

-- added 2D particle effects to the Recruitment interface in cut scenes. Whenever you hire a recruit, little sparkles burst out of the View Army button in the center-top of the screen, indicating a) that you've gained the recruit and b) drawing your attention to where you can view them.

-- new optional parameter for SetFood and SetAura: a boolean parameter called No Negatives. If set to true, the game will refuse to lower the player's food or aura below zero.

-- when enemies destroy your tents in the Thief Attack battle, you now lose money.

-- fixed: the game wouldn't tell you that everyone had gone and prompt you to end your turn if the last character to use a turn-ending skill leveled up afterwards.

-- fixed: OnCharDeath dialogue could not be triggered by the destruction of an object.

-- fixed:  units could counterattack using skills they did not currently possess (e.g. because their weapon broke).
Title: Re: A new engine!
Post by: CraigStern on August 04, 2019, 09:39:07 AM
-- reformatted the Wind and Rain loops, added them into the game.

-- created an icon for Aptitude; added it to the stats screen in the character creator with a tooltip explaining what it is.
Title: Re: A new engine!
Post by: CraigStern on August 05, 2019, 05:32:17 PM
-- received new alternate Psy Academy dorm room cut scene background, added it to the game.

Had a playtesting party yesterday, and...well, it seems I'm gonna be fixing bugs again for a while.

-- tweaked some of the unit placement in Battle at the Oasis.

-- as a matter of balance, increased the Energy cost of Overhead Chop and Overhead Strike from 1 to 3.

-- any sound loops that were playing are now immediately, automatically stopped upon return to the game's title screen.

-- the team no longer automatically gains 1 morale by default when winning a battle; the default is now 0. Morale gained from winning a battle can now be set on a per-battle basis using the winMorale attribute.

-- the relative amount of aura gained from losing a battle can now be set on a per-battle basis using the lossAura attribute. (It's a decimal number between 0 and 1; by default, it is 0.25.)

-- the morale effects of losing a battle are now separate from winMorale, and are set on a per-battle basis using the attribute lossMorale. (This is set to -1 by default.)

-- fixed: the game wasn't saving the current winAura, lossAura, or winMorale during mid-battle saves. It now does, along with lossMorale.

-- increased the bar for damage below which characters will always Rest in the evening, and just generally increased the likelihood of hurt or energy-depleted units resting overall.

-- fixed a typo in which the game compared current energy to max health instead of max energy when determining the likehood of a unit resting in camp activities.

-- fixed: player-controlled characters that fell in battle would drop item sacks even if the Death Rules indicated that they weren't actually dead, thus resulting in duplication of the (still alive) unit's inventory upon their return!

-- fixed: the BackstabFactorPlus and SidestabFactorPlus tags would be reapplied over and over to the skill's backstab and sidestab factors and accumulate over time, leading to outrageous amount of sidestab and backstab damage. (I think one player hit an enemy for over 800 damage at the playtest. Oops!)

-- fixed a null error when checking for status effects tied to environmental damage in battle.

-- fixed: the shop's selling discount would be reapplied over and over to the value of owned items, gradually eroding them toward zero.

-- fixed a integer-division error in discounting the value of weapons based on their current uses out of maximum in the shop interface.

-- fixed: selecting a new character after clicking a skill button would not clear the text overlay with the skill name from the top of the screen.

-- fixed: I'd accidentally made it so you couldn't use items in battle while updating something else about character screens. (Oops.)

-- fixed: the rain loop from the Battle at Grabber's Grove would play forever, long after the battle ended.

-- fixed inaccurate description text on generated plated boots.

-- fixed a range error that occurred when clicking the report interface.

-- the report interface now responds to the Escape key being pressed.

-- fixed: the game would produce a null error when leveling up a premade unit whose counterattacks weren't specifically delineated in the XML file.
Title: Re: A new engine!
Post by: CraigStern on August 06, 2019, 04:36:11 PM
-- totally overhauled the way camera zooming works in battle in order to support manual camera zoom levels! You can now zoom the battle camera out using the minus key/mouse wheel, and zoom back in using the plus key/mouse wheel. There are four different levels of zoom, and automated zoom-in and zoom-out during character attacks play nicely with all of them.

-- dramatically increased the likelihood of Lockpicks showing up in the shop in the main campaign.

-- fixed: the game was inappropriately popping up "Damage -12" text when AI-controlled units used bandages, or "Drain -12" when they used Focus Pills.

-- fixed: the game wasn't swapping in apostrophes for double-tildes in item names when deserializing reserve supplies.

-- fixed: the game wasn't finding premade items whose names contained apostrophes (and not double-tildes).
Title: Re: A new engine!
Post by: CraigStern on August 07, 2019, 05:29:35 PM
-- it is now possible to use items in a character's character screen in cut scenes!

-- new Condition: Use Items. Cut scene only. One parameter: true or false. If true, the player will be able to use items within character screens in this cut scene.

-- set Use Items to true for the camp cut scene in the main campaign, and increased the cost of apples, mangoes and bandages somewhat to compensate for their increased utility.

-- added Appetite to the perusable information about units in the recruitment screen.

-- you can now right-click a character portrait within the Reserve Supplies screen to immediately call up that character's full character screen.

-- mousing over the numbers adjacent to icons in the character screen, level up screen, and recruitment info screen now shows the corresponding stat's tooltip as if you'd moused over the icon itself.

-- the masteries text in the character screen, level up screen, and recruitment info screen now produces a rollover tooltip explaining what masteries are.

-- the game now counts Frozen, Stunned, and Enthralled characters as "done" for purposes of the "Do you want to end your turn?" pop-up, and now counts Enthralled enemies as part of your team for that purpose.

-- created a "distant" variant on the Thunder sound effect.

-- added sound effects to the Rain event in the main campaign.

-- fixed: you could undo after a move that triggered dialogue or a pressure trigger. Doing either of these now clears the undo stack.
Title: Re: A new engine!
Post by: CraigStern on August 08, 2019, 04:41:12 PM
-- wrote out and scripted the main campaign's first involved main-plot-related cut scene event!

-- changed the tooltip description on the "Drop" button option for items in a character's inventory sub-window in the Reserve Inventory Screen to instead read "Store," making it clear that the item will only go to reserve supplies rather than disappearing forever.

-- by default, SetAura and SetFood will now cause the change to animate in the info bar when used in a cut scene. (An optional, third boolean parameter can be set to false to instead make the change appear instantaneously.)

-- camp activities that alter food or aura levels now animate the change within the info bar.

-- fixed: the game was disregarding the first character in the current roster when figuring out which characters are in the shop interface.

-- fixed: the game was still showing a blank "shadow" portrait for certain parts of camp activity dialogue where a character directly addressed the player.

-- fixed: the AI would fail to account for a character's own movement in move-then-self-target maneuvers, resulting in weird anomalies like a character moving and then healing the space where they just were with Mind Shield rather than the space they'd moved to.
Title: Re: A new engine!
Post by: CraigStern on August 09, 2019, 05:30:11 PM
-- created a random map generation feature that auto-produces starting terrain for you to work off of in the map editor! Supports maps with up to 3 different levels of elevation, up to 2 different regular terrain tilesets, and a single hazard tileset.

-- fixed some newfound gaps and errors in the game's auto-tiling logic.

-- added zoom-in and zoom-out functionality to the map editor with the mouse wheel.
Title: Re: A new engine!
Post by: CraigStern on August 10, 2019, 11:08:10 AM
-- took out the fields duplicative of the New map window from the Generate Map window in the Map Editor, renamed the window to Generate Terrain, and made it so it can only be used after you've created or loaded an existing map--then used the new space in the window to add in number pickers to further customize terrain generation.

-- added a hotkey shortcut (Shift + G) to the Generate Terrain window in the map editor.
Title: Re: A new engine!
Post by: CraigStern on August 11, 2019, 02:27:16 PM
-- little explosions of fireworks now appear at the end of a battle when the victory screen finished tallying up your score. :)

-- fixed a bug with the first tutorial.
Title: Re: A new engine!
Post by: CraigStern on August 14, 2019, 04:42:29 PM
Artist feedback!

-- received new night variants for the psy academy dorm room backgrounds; implemented them in the game.

-- improved the visibility of the Supplies button in the Shop interface.

-- did a bit of optimization on the victory screen particle effects.

-- created some more character name variants.

-- fixed: if you clicked at just the right moment, you could click the background and inappropriately advance narration in the first frame of a cut scene that embeds a dialogue tree.

-- fixed a little UI glitch with the layering of tooltips in the Shop interface pop-up warning window.
Title: Re: A new engine!
Post by: CraigStern on August 15, 2019, 05:00:50 PM
-- wrote new proc gen character dialogue variants.

-- made "generic" lines for greetings, greeting responses, and like dialogue far less likely to show up.

-- fixed: temporary, turn-level counters like "steps taken" weren't getting reset on characters at the end of battle, resulting in weird stuff like them appearing to have less Speed than normal when viewed in camp (or in the next battle's deployment window).

-- fixed: forward slashes would still cause errors if they appeared in the dialogue text of PersistentDialogue trees.

-- fixed: the game would sometimes try to match a character with themselves for a group activity in camp.

-- fixed a scripting error in the Mustebeast Tent event in which the game would lock if there were exactly 4 other characters the unit could bunk with.

-- fixed a UI snafu caused by Unity arbitrarily reordering layers in the victory box.
Title: Re: A new engine!
Post by: CraigStern on August 16, 2019, 04:30:13 PM
-- finally implemented click-and-drag camera panning in the game! Added mention of it to the combat tutorial bits that discuss moving the camera.

-- mousing over a character's class in the recruitment screen now pops up with a tooltip explaining what the class does.

-- when you hit End Turn in battle, the game now checks all characters under your control to see if there are any characters who have not moved, used an item, or used a skill, and who are neither Stunned nor Frozen; if it finds any characters who meet all of these conditions, it gives you a pop-up informing you that certain characters haven't acted and asking if you really want to end the turn. You can then back out or end the turn anyway; if you back out, the game will auto-select the next character in your army who can act.

-- sped up camera zoom-in and zoom-out in battle outside of combat.

-- replaced Wav files with Ogg files for all remaining musical tracks.

-- fixed: the track Glorious Combat was mixed too loudly.

-- fixed: some of the data in the Classes.xml file was matched to the wrong class name.
Title: Re: A new engine!
Post by: CraigStern on August 18, 2019, 07:21:57 PM
-- wrote a new random event: a character spies a deal in town on a particular type of consumable item. You can send them back to town to get you 1 or 2 of that item at a discount; if you do, they'll be gone for the rest of the evening.
Title: Re: A new engine!
Post by: CraigStern on August 19, 2019, 04:51:16 PM
Artist feedback! The game's key art is proceeding apace, and is already looking amazing. :D

-- the Action Bar now supports multiple "pages" of character skills, for units who have more than 9 skills. There are little buttons on either side of the skills buttons to allow paging through for units with more than 9 skills (the buttons do not appear when characters with fewer skills are selected).

-- new script action: LikesToList. Creates a list of the named character's likes. Four parameters, the latter two of which are optional; (1) character name, (2) list name, (3) exclude hobby (true or false), and (4) exclude misc. (true or false).

-- new attribute conditional type supported in UnitsToList: Likes. Winnows the list by units who like the specified thing (or, if a non-match is specified, it's narrowed by units who don't have the thing listed among their likes).

-- new stat conditional types supported in UnitsToList: Familiarity, Friendship, and Romance. Winnows the list by units to only those who meet the specified stat conditional relative to a specified other character. To specify the other character, simply put a space after the stat conditional type and then put the character's name. This, for instance, collects the names of all units in roster 0 who possess a romance score greater than 0 for the character Willow Heavenbeak:

UnitsToList/UnitsWhoAreIntoWillow,0,Romance Willow Heavenbeak:g:0,

-- fixed: saving characters without bio details in the character creator was producing a null error.
Title: Re: A new engine!
Post by: CraigStern on August 20, 2019, 04:56:05 PM
-- new stat conditional types supported in IfStatGoTo and IfStatRun: Familiarity, Friendship, and Romance. This checks the specified stat conditional relative to another character. Just as in UnitsToList, to specify the other character, simply put a space after the stat conditional type and then put the character's name.

This, for example, checks to see if Alice has a Romance value of less than 1 for Bob; if she does, then the dialogue tree proceeds to the branch named Get Turned Down (in which Bob is presumably turned down for, like, a date or something):

<Action>IfStatGoTo/Alice,Romance Bob,l,1,BRANCH[Get Turned Down]</Action>

-- added a new, optional boolean parameter to the IfListHasGoTo and IfListHasRun script actions: Contains Match. If set to true, the game will not check the list for an exact match with the supplied value, but rather, will check to see if any entries in the list contain that value as a substring (e.g.: a list containing Alice's Lance, Bob's Sword, and Craig's Bow would return true for the value Bob instead of rejecting it as an inexact match with Bob's Sword).

-- new script action: MatchesToList. Searches an existing list for entries containing the specified value as a substring; a destination list is set containing each entry that contains the value. Three parameters: (1) list name, (2) value, (3) destination list name. Has a fourth, optional boolean parameter: reverse match, which if true, will populate the destination list exclusively with entries that don't contain the value as a substring.

-- new script action: CullListToSize. Culls entries from the end of a list until it contains only the specified number of entries. Three parameters: (1) list name, (2) list size, and (3) cull from beginning (an optional boolean parameter; if set to true, all excess entries will be culled from the start of the list instead of being clipped off the end).

-- new event that uses all of the above (and a bunch of yesterday's additions) for its scripting: characters will now occasionally go to you for advice on gifts to get other characters! Answer correctly, and those characters will grow closer. :)
Title: Re: A new engine!
Post by: CraigStern on August 21, 2019, 04:45:40 PM
-- Engineers now start out with both Build Wood Bridge and Build Wood Barricade at level 1. (They simply weren't versatile enough to be worth using without both.)

-- evened out the impact of materials on helms, boots and shields in the procedural item generator; all have higher base values and lower material multipliers, making them each more useful even when generated with poor materials.

-- the shop interface now asks for confirmation before you buy any item.
Title: Re: A new engine!
Post by: CraigStern on August 22, 2019, 05:04:42 PM
-- reduced the size of caravan wagon objects somewhat to avoid clipping into adjacent spaces.

-- updated the name of the My Games subdirectory where custom content goes from Telepath Tourney to Together in Battle.

-- increased the size of the page selector in the recruitment interface and gave it a drop shadow to make the presence of multiple pages of recruits harder to miss.

-- fixed: status effects symbols above characters could sometimes clip into 3D objects directly above the characters.

-- fixed: during deployment, swapping the position of two units could cause the game to miscount the number of deployed characters and inappropriately display a warning about having more characters to deploy.

-- fixed: it was possible to initiate a "give item" operation, click the giver, and move the giver--and the give tiles would remain onscreen on the spot they'd moved away from, still clickable to finish giving away the item. Give tiles now vanish if you click a unit to move.

-- fixed: you could use a skill granted by an equipped item, and then unequip, drop, or give away the item. This led to anomalous situations like Hovering using a Steamthopter or Sprinting using Runner's Cleats that you could then immediately pass to another character to use, on and on, until your whole team was flying with the same, single Steamthopter or running using the selfsame pair of cleats. You now cannot unequip, give, or drop an equipped item in the same turn you've used a skill granted by that equipment.

-- fixed: the Decoy ability was referencing an old name for the Decoy object (and thus, not creating anything when used).

-- fixed a null error that could occur when ending a battle.

-- finally fixed a thorny range error that could occur in camp activities due to the game pulling characters from one list when checking for viable two-character activity narrations, and another when actually assigning the activity partner. (Oops.)

-- fixed: a check designed to keep characters from accidentally using skills they don't have was preventing units in water or lava from swimming.
Title: Re: A new engine!
Post by: CraigStern on August 23, 2019, 04:20:11 PM
-- fixed: Levitating characters weren't losing the Flying move type until the round after Levitation wore off. When a flying character loses flying, they now visibly drop into whatever liquid they were previously hovering above and get the Swimming move type.

-- fixed: same, but with flying characters afflicted with Heavy status when over liquid.

-- fixed: in both battle and in the map editor, flying characters spawning on hazard tiles would appear to spawn in the water, lava, chasm, etc. instead of above it.

-- fixed: flying characters who moved over bridge tiles above liquid would have their height adjusted upwards twice, resulting in them appearing to be in the space above their actual space.
Title: Re: A new engine!
Post by: CraigStern on August 26, 2019, 05:21:51 PM
Artist feedback! Getting very close to complete on the title art. :)

-- used the game's bespoke 2D particle system to add support for weather effects in cut scenes using the Weather condition! All weather types supported in battle are now supported in cut scenes: Rain, Heavy Rain, Storm, Snow, Heavy Snow, Blizzard, and Ash.

-- improved the performance of the game's bespoke 2D particle system.

-- fixed: it was possible for the game to produce a null error when parsing cut scene narration for dialogue or background data.
Title: Re: A new engine!
Post by: CraigStern on August 27, 2019, 05:30:50 PM
-- the cut scene editor now saves the conditions in loaded scenes.

-- there is now a conditions sub-window in the cut scene editor's scene settings window to add, edit, and remove cut scene conditions.

-- the cut scene editor now displays weather effects in the cut scene preview whenever it loads a cut scene with a Weather condition, and updates the weather preview based on changes made in the Conditions window.
Title: Re: A new engine!
Post by: CraigStern on August 28, 2019, 04:45:44 PM
-- received final box art for the game, integrated it into the title screen!

-- received new portrait art for Ishita Svaamee. Generated portrait data, integrated her into the game.

-- the AddCondition and RemoveCondition script actions can now be used to alter weather effects dynamically in cut scenes.

And now, I'm on my way to Seattle to volunteer for the Indie MEGABOOTH! Gonna see if I can drum up some interest among my fellow devs and/or obtain some feedback while I'm out there--work will resume next week.
Title: Re: A new engine!
Post by: CraigStern on September 04, 2019, 05:35:24 PM
I have returned! Unfortunately, I'm so tired that I couldn't focus on much today.

-- emailed an artist about designing the title logo for the game!

-- fixed a UI issue with the page picker in the save game screen.

-- fixed: while making cosmetic improvements to the game's save slot UI element, I inadvertently made it so you couldn't select unused save slots when starting a new game. (Oops.)
Title: Re: A new engine!
Post by: CraigStern on September 05, 2019, 05:03:40 PM
-- created a new proc gen dialogue type: individualized reaction dialogue to like and background lines! Wrote a ton of reaction lines in that vein with numerous internal variants, began laying the groundwork to incorporate them into character generation.

-- fixed: due to a typo, the game was never choosing individualized inter-character dialogue with the Talk activity at Camp, instead opting for narrated summaries.

-- fixed: the numbering on the save slots for New Game and Load Game menus on the title screen somehow got messed up, resulting in the game sometimes thinking you'd chosen the wrong slot.

-- fixed: if you copy-pasted a saved game file with a new slot filename, the game would still display the save file as being in the old numerical slot when you went to load it (or overwrite it with a new saved game).
Title: Re: A new engine!
Post by: CraigStern on September 06, 2019, 04:50:54 PM
-- wrote out individualized reaction lines for most remaining personality types, and created a generic catch-all for the few I haven't done yet.

-- generated characters are now assigned a reaction line upon generation. Reaction lines are now added to character dialogue about their likes and background.

-- fixed: it was possible for characters to be generated with only a single greeting response, and if the game chose the second greeting response for that character in greeting camp activity dialogue, it would throw an error.
Title: Re: A new engine!
Post by: CraigStern on September 09, 2019, 01:38:08 PM
-- wrote a few "reacting to friend's death" lines for characters.

-- characters are now generated with a line for reacting to a friend's death.

-- if a character falls in combat and the death rules are neither Back at Full nor Back at 1, the other character on the fallen character's army who is closest to them will say their death-reaction line immediately following the fallen character's death monologue. (If no character has a positive friendship level or romance level with the fallen character, however, then no one will give their reaction line.)
Title: Re: A new engine!
Post by: CraigStern on September 10, 2019, 05:08:19 PM
-- character death barks are now regenerated after each use, ensuring that characters don't just give the same reaction line over and over.

-- religious character lines referencing "god" now instead use the name of the particular deity worshipped by that character.
Title: Re: A new engine!
Post by: CraigStern on September 11, 2019, 05:05:23 PM
-- edited Battle at Grabber's Grove to make it easier for newer players to maneuver around.

-- added some dialogue before the Battle at Grabber's Grove presaging the changing weather.

-- gave the end-of-battle victory box some proper pop in and fade out animations.

-- fixed: it was possible for the game to freeze when a character leveled up after delivering a fatal counterattack to the last enemy on the battlefield during the enemy turn.

-- fixed: it was still possible for the game to throw an error with characters possessing only a single greeting response (apparently).

-- fixed a typo in one of the event lists that caused the game to try to load a non-existent dialogue tree.

-- fixed: a unit's focus gain was carried over from the last turn of a battle to the first turn of the subsequent battle (e.g. if they rested on the last turn of the previous battle, they'd gain 4 energy at the start of the next one).
Title: Re: A new engine!
Post by: CraigStern on September 13, 2019, 08:29:51 AM
-- wrote a few new character lines of dialogue, adjusted a few existing ones.

-- fixed a bunch of situations where characters could get randomly assigned growths in their areas of weakness. Lissit can no longer get growths in Heat Res. or Cold Res.; stone golems can no longer get growths in Cold Res. or Light Res. Characters with a physical trait that tanks a particular stats now also get a -1 to growth in that stat, taking care of the vast majority of situations like characters with Migraines getting Mental Res. growth or characters with Bad Joints getting Dodge growth.

-- fixed the backgrounds on the birdwatching, stargazing, and "go for a stroll" activities to reflect the fact that these take place outside of camp.

-- fixed: characters accidentally used their own names instead of addressing the other character by name in info response lines.

-- fixed an issue with energy regen when resting in combat.

-- fixed: the game would miscount the number of deployed characters if you deployed the same character into different empty spaces over and over.
Title: Re: A new engine!
Post by: CraigStern on September 13, 2019, 02:59:12 PM
-- rewrote the "self-typing" code for animated text in the dialogue menu, cut scene menus, and report screen so that it doesn't abruptly jump down a line when typing out a word that hits the right "edge" of the text box partway through (instead, it now just starts typing that word on the next line from the get-go!)

-- decided that Battle at the Grassy Mesas was too hard; reduced the number of enemies on the map by 1 to make it more manageable (except on Brutal difficulty, where the 6th enemy is retained).

-- added an extra enemy to Battle at the Overgrown Garden, Battle at the Dry Mounds, and Battle at the Oasis if playing on Brutal.

-- buffed the Qualifier Opponents in the initial qualifier battle if playing on Brutal so they actually do noticeable damage.

-- reconfigured the game's main shop so that it is guaranteed to always stock at least one of each of the major weapon types on any given visit. In addition, such weapons are now sorted by type.

-- fixed: when leaving save slots unused between saved games, the game would inappropriately collapse those gaps on the Load Game screen and, in so doing, display saved games in the wrong slots.
Title: Re: A new engine!
Post by: CraigStern on September 16, 2019, 04:58:10 PM
Spent some time negotiating and reviewing proposed drafts of the game's title logo with the logo artist; sent over a contract for the job.

-- rewrote the game's random number generator to work off of a seed that gets regenerated and saved with every scene change, ensuring that you can't alter the outcome of random "rolls" merely by reloading a scene!

Just as in Telepath Tactics, this works to avoid save-scumming of combat RNG. However, it also applies to all the new systems like combat barks, the items that get generated in the shop interface, the characters that get generated in the recruitment interface, and chosen camp activities. It has also been expanded to the stats gained upon level-up, and to encompass randomization in script actions generally (ensuring that you can't save scum random results in the dialogue engine or in battle scripting).

The one thing that's been deliberately left outside the scope of seeded RNG is combat AI. Reloading a battle save will still result in the AI behaving somewhat differently each time, by design.
Title: Re: A new engine!
Post by: CraigStern on September 18, 2019, 08:43:30 AM
-- buffed Feedback to give Mentalists greater early-game parity with other psy fighter classes, which are much more potent these days due to the status effects imparted by their elemental Blast skills. To put it on par with those Blast skills, Feedback now costs 4 energy (down from 5), has range 2-3 (instead of just range 2), and has a psy damage factor of 1.2 (up from 1.0).

-- 50% of unit stat proficiencies are now locked to the latter half of character skill progressions, preventing the game from randomly front-loading them and thereby delaying characters learning important skills.

-- the Generate Terrain function in the map editor now supports auto-placement of "From Player Roster" deployment spawn points for the player's army; whenever possible, the game will put those spawn points in a contiguous configuration.

-- if you use RANDOM as the character class for a Generate: character either in battle or in the map editor, the game now picks a class for the character at random (taking forced species into account).

-- laid the groundwork for the map editor supporting procedural generation and placement of an enemy army.

-- fixed: proc gen Engineers still weren't being generated with both Build Wood Bridge and Build Wood Barricade.
Title: Re: A new engine!
Post by: CraigStern on September 18, 2019, 11:07:23 AM
Tonight is a game playtest (and also I'm sick :( ), so I'm avoiding adding new features today. Instead, it's all plugging in bits of content!

-- wrote a bunch of new Introvert attack lines.

-- wrote new lines and variations for other personality traits for attack barks and deployment barks, and combined a few duplicative ones.

-- added a new miscellaneous like type to the game (bones), and updated the Ally Gift event to account for it.

-- Kinetic Pull is now (almost) always the first thing a Kineticist character learns upon level-up.
Title: Re: A new engine!
Post by: CraigStern on September 19, 2019, 04:59:57 PM
Armed with feedback and bug reports from last night's playtest, it's back to the grindstone!

-- created a second Naysay camp activity scenario in which the naysayer shares their doubts with a single other character, improving their own morale at that character's expense. This is much less destructive to group morale than the original, group-wide naysaying activity (which now only occurs 1/3rd of the time when Naysay is chosen instead of 100% of the time). Hopefully, this should make Pessimistic characters less universally awful to keep around.

-- created a new army overview button of the sort that appears in the recruitment interface that can appear in any cut scene independent of whether the recruitment interface is active.

-- two new script actions: ShowArmyOverviewButton and HideArmyOverviewButton. These allow you to toggle the new army overview button on and off in cut scenes.

-- used this to allow access to the army overview screen in the Kalkerapur scene.

-- fixed: custom cut scene menu button warning messages were not displaying properly due to the refactoring of menu text animation code.

-- fixed: proc gen characters with starting skills granted by their life skill, personality, or physical attributes would receive those skills in place of normal starting skills (which would in turn be shifted deeper into the unit's skill progression), rather than in addition to them.

-- fixed: IgnoreStatFXRes tags for throwing axes were incorrectly formatted in some contexts.

-- fixed: a range error that was sometimes popping up when using equipment with IgnoreStatFXRes tags.

-- fixed: it was possible for attack accuracy to go below 0 for Blinded characters, which produced an out-of-range error when rolling for their attack hit using the new RNG code. (The game now treats negative accuracy as a flat 0 for these purposes.)

-- in general, to avoid such errors, the RNG generator now auto-sets the maximum value equal to the minimum value whenever the minimum exceeds the maximum.

-- fixed: the game wouldn't recognize that OnTalk-triggered dialogue was available when characters were referenced in the trigger parameters using ID[] tags.
Title: Re: A new engine!
Post by: CraigStern on September 20, 2019, 05:25:56 PM
Artist feedback! Also, i finally finished implementing the game's "stat effects from spaces" features:

-- space stat modifiers from tile data are now supported in-game. As a result, certain resistances are now uniformly boosted by certain types of terrain: characters gain 15% Cold Res. from sand, 15% Heat Res. from snow, 25% Heat Res. from water, and 50% Cold Res. from lava.

-- space stat modifiers from destructible objects are now supported in-game! Conferred by the spaceEffects attribute, they accrue to the benefit (or, conceivably, detriment) of any character sharing its space. This is now implemented with Reeds as defensive terrain, which give +20% to physical resistances and dodge (or, for small Reeds, +10% to each).

-- moved up the energy regeneration tutorial by one battle, to Battle at Grabber's Grove from Battle at the Oasis.

-- added some dialogue to Battle at Grabber's Grove explaining why the enemies attack the foliage.

-- moved back certain nighttime events to beyond the 2-week mark, ensuring that all but the most egregious dawdlers won't encounter them before completing the League 1 Qualifier battle.

-- decreased food prices in Relaxed mode by a further 50%, down to 1 aura per unit of food.

-- updated descriptions on non-generated helms and boots to reflect their corresponding mastery requirements.

-- updated most "someone visits the camp" type events so that if you ignore the visitor, the game says you have enough time to throw a gathering.

-- further buffed the resistances granted by proc gen helms and boots to make them worth purchasing.

-- extended the mouseover area for the food and aura icons so you can get a description of each by mousing over the text adjacent to them, not just the icons themselves.

-- fixed: it was possible for the game to create characters with negative growths.

-- fixed: it was possible for proc gen characters to be created with negative maximum Energy. They now always start with a minimum of 2 Energy (1 for Cavaliers and Golems).

-- fixed: recruiting a spirit or golem would cause your ongoing total salaries to tick upward in the info bar at the moment of hiring (though it would display the correct salary total again once you left the interface).
Title: Re: A new engine!
Post by: CraigStern on September 21, 2019, 10:25:04 AM
-- redesigned the initial qualifier level to look nicer (and without sand terrain so as to avoid handicapping cryokineticists on the very first map)

-- terrain stat modifiers are now taken into account by the AI. :)

-- the Gathering camp activity now sets all characters' familiarity floor with one another to 4--meaning they can still do greeting conversations, but anything else that bumps up familiarity will cause them to skip it in favor of dialogue that assumes they've met already (and other multi-character activities requiring familiarity of 1 or higher will be possible).

-- fixed a null error resulting from a thing I forgot to implement during the numerous hours I spent hooking up terrain stat modifiers to all the relevant portions of the code last night.
Title: Re: A new engine!
Post by: CraigStern on September 23, 2019, 04:54:27 PM
-- you can now change character movement speed in the Settings menu! Settings go from 1x to 4x speed.

-- the game saves your latest speed setting and reloads it along with all other game settings when you return.

-- new script action: SetSeed. This works exactly how it worked in Telepath Tactics. One parameter: the integer seed value to set.

-- fixed: if a moving character overshot the mark on moving to a space, the game would move it backward until it got within "snap distance" of the space, which (if the machine was slow enough) could cause the character to stutter, ping-ponging back and forth over the space until it "snapped" before proceeding to the space after. This bug had been in the game for well over a year, and I'm pleased to have finally squished it.

-- fixed: characters with the ForceNextCampActivity tag could end up last in the camp activities activity order, which would result in them not being able to find an activity partner for partner-specific forced activities. Characters with such a tag now go first in camp activities.

-- fixed: a forced partner with the ForceNextCampActivity tag could be disqualified by virtue of having health too low.

-- fixed: when looking for an activity partner in camp activities, it was possible for the game to get stuck in an infinite loop.
Title: Re: A new engine!
Post by: CraigStern on September 24, 2019, 04:40:08 PM
Officially retained a logo artist!

-- received new cut scene background: Psy Academy Professor's Office. Integrated it into the game.

-- new camp event scripted where two characters come to the player to resolve an argument.
Title: Re: A new engine!
Post by: CraigStern on September 25, 2019, 05:13:27 PM
-- added defensive grass/reeds to Battle at the Oasis and Battle at the Dry Mounds.

-- added a "terrain effects" tutorial to Battle at the Oasis.

-- fixed: if you clicked a character in recruitment, changed the page, and then hit the Hire button, it would make the portrait in that character's spot on the current page disappear.
Title: Re: A new engine!
Post by: CraigStern on September 26, 2019, 04:29:27 PM
Feeling a little burnt out, tbh, but I'm forcing myself to push forward anyway!

-- made Psy Healers more useful/competitive with gasul by granting them Mind Blast as a starting skill.

-- added defensive terrain to Battle on Sandy Isles, Battle at the Grassy Mesas, and the League 1 Qualifier battle.

-- increased the value of the Royal Chest contents in Battle on Sandy Isles and made the battle give significantly more money upon victory to assist with hiring new characters in advance of the league 1 qualifier.

-- the game now supports forced group activities at camp that then force an individual follow-up activity afterwards.

-- when you throw a gathering at camp and there are at least two characters in the roster, the game now uses this to force the Talk activity for all characters as a follow-up activity afterwards. This makes the Gathering much more useful (and also more narratively interesting).

-- wrote a couple of new variations for the Gathering camp activity narration, and spruced up the "personality-less" greeting response dialogue variants a bit to make them more interesting.

-- created a new mood type: Annoyed. Annoyed characters will Clean, Practice, or Rest, but won't Talk to other characters or engage in their hobbies.

-- fixed: the game would incorrectly return no viable talk partners for the second-to-last character in the camp activities turn order, as though they were the last such character. This was causing Talk activities to occur a good deal more rarely than intended (particularly with small teams).
Title: Re: A new engine!
Post by: CraigStern on September 27, 2019, 05:19:21 PM
-- dialogue reply boxes now highlight when you mouse over them. This makes it a lot easier to ensure you've clicked the correct reply in a dialogue tree.

-- created a tutorial in the League 1 Qualifier battle that explains the Talk action.

-- the game no longer issues status effect pop-ups when a character dies from an attack.

-- fixed: the game would just end after you beat the League 1 Qualifier battle. (Oops.)

-- fixed: the game wasn't stepping status effects on the AI turn until after it had planned its moves, leading it to skip turns for characters whose turn-skip-necessitating status effects ended that turn.

-- fixed a portrait alignment issue caused by Unity changing layer coordinates when I moved all the portrait layers into an empty holder object.
Title: Re: A new engine!
Post by: CraigStern on September 28, 2019, 04:18:00 PM
-- tweaked the value of more aggressive long-term AI moves upwards about 25% to shut down edge cases where enemies would retreat without justification.

-- fixed: the AI controller would sometimes be initiated twice at the start of a computer player's turn, causing two enemy character moves to overlap.

-- fixed: at the end of battle, the game would fail to remove temporary status effects from the correct version of characters, leading them to still have those status effects in the next scene.

-- fixed: you could manually drag-pan the camera around during an AI turn or in the middle of a character attack.

-- fixed some outdated code that was making it impossible to drag-pan the screen (or to screen-edge pan it) after entering most menus in battle.
Title: Re: A new engine!
Post by: CraigStern on October 10, 2019, 08:55:56 AM
Update: GoDaddy (the site's host) screwed up the PHP database for these forums a bit, so I've been holding off making new posts until it's fixed. Rest assured, however: I'm continuing to work on the game! :)
Title: Re: A new engine!
Post by: CraigStern on October 17, 2019, 03:53:45 PM
All right, to heck with it--giant progress dump incoming! :)

-- prettied up the title screen with the game's new logo, as well blowing dust animations across the bottom and animated "sparkles" on the logo.

-- finished coding unit-by-unit AI decision-making mode (i.e. the way it used to work in Telepath Tactics). To avoid slowing the game down, the game turns to this decision-making mode automatically so long as more than 8 enemies remain on the field to make decisions for, but then reverts to the smarter consider-all-moves-for-everyone mode once it's worked through the list enough that eight or fewer units remain to move.

-- doubled the speed of fade-in and fade-out scene transition animations.

-- reduced the programmed delay after enemies finish moving from 3 seconds down to half a second, and the delay after enemies rotate from half a second to one-fifth of a second. This speeds up larger battles considerably without sacrificing comprehension of what the AI is doing by too much.

-- there is now an individualized Staff item graphic and Staff attack skill.

-- the Practice Staff weapon can now be used only by characters with a melee weapon mastery of some kind.

-- the steps number and path arrows that appear over move tiles when mousing over a destination are now always displays on top of whatever may appear in the space, be it tile geometry or destructible objects.

-- animated bars (for health, energy, experience, and morale) appearing over characters in battle are now organized in a fashion similar to the bars in cut scenes, ensuring that they are labeled with icons and won't overlap one another.

-- the in-battle terrain inspector now displays bonuses or penalties to stats from destructible objects on the space, not just modifiers from the type of terrain tile.

-- different terrain tiles now have different "impact sounds" assigned to them. When a character is shoved or thrown onto a space, the game plays the appropriate impact sound (e.g. a "splash" when into water).

-- the game now recognizes different rosters assigned to different armies in a given battle. Assigning different rosters to different armies now supported in the map editor interface, and the map editor itself correctly loads and saves this data.

-- two-unit camp activity narrations now support requirements and exclusions for the secondary character.

-- wrote a new Naysay solo narration in which the character hurts their own morale (instead of everyone else's). The chance of a Pessimistic character hurting group morale via the Naysay action has been reduced to close to 25%.

-- changed the wording in the deployment screen so it refers to "characters," not "units."

-- created a temporary scene expressly alerting the player that they've reached the end of the demo.

-- when you give equipment to a character in the reserve supplies screen and close out of the screen without equipping it, the game will now track those items and ask you if you want to auto-equip them. If you select Yes, the game will then automatically equip all new items given to that character.

-- in the reserve supplies screen, mousing over units with no equipment masteries will now expressly tell you that they possess no masteries instead of displaying "Can use:" followed by blank space.

-- wrote a new life skill: toymaker, with the camp activity Make Toy (a 6-part project in which the character gradually constructs a wooden doll with articulating limbs that can be sold for aura).

-- mechanically identical life skills distinguishable only by their flavor (such as Farmer and Gardener, or Professor and Historian) have been consolidated, leveling out the likelihood of any given life skill being chosen from a mechanics standpoint.

-- socioeconomic classes attached to different life skills can now vary somewhat.

-- fixed: the game was spraying water particles when a character was shoved or thrown onto a bridge tile above water.

-- fixed: the game would erroneously tell the player that food they purchased appears in the reserve supplies--the game now tells the player to look for it in the info bar in the top-left of the screen.

-- fixed: the game was tracking total units spawned from roster across all armies, rather than on a per-army basis.

-- fixed: multiplayer units weren't being added to the Multiplayer directory upon the directory's creation.

-- fixed: multiple instances of the same unit would become "entangled" in the game logic, causing all kinds of weird errors.

-- fixed: the game was running OnLoaded dialogue upon reloading a mid-battle save.

-- fixed: the game was reapplying certain "start of battle only" conditions upon reloading a mid-battle save, such as Go First, Fatigue or Recover.

-- fixed: the game was not saving the current turn correctly for mid-battle saves in battles with a Go First condition.

-- fixed: when proceeding to a non-savable scene, the game would instead attempt to reload the current scene.

-- fixed: rosters would not accept characters that already existed in other rosters.

Also, acquired the PowerSprite animation asset. I hope to use it to fill in gaps on remaining character animations starting tomorrow.
Title: Re: A new engine!
Post by: CraigStern on October 18, 2019, 02:38:41 PM
-- added the latest draft of Ryan Richko's new theme music to the title screen!

-- created a new "Thud" sound effect, applied when characters collide, fall, or are shoved or thrown onto regular terrain tiles.

-- a dialogue reply can now have a skill or item associated with it by including -SKILL:x- or -ITEM:x- in the reply text (where 'x' is the skill name or item name). This causes a button of the appropriate type, complete with a mouseover tooltip explaining what the skill or item does, to appear next to that reply.
Title: Re: A new engine!
Post by: CraigStern on October 21, 2019, 05:28:25 PM
-- character physical attributes (if any) are now displayed in the character screen.

-- created a Sinister Design intro movie leading in to the title screen (that can be skipped with a left-click).

-- replaced Unity's (awful) animation system with hand-coded effects in two new areas of the engine to improve reliability.

-- incorporated a new, improved draft of the title theme into the game.

-- improved fade-out timing on the dust particle effect on the title screen.

-- wrote some new deployment lines, added facial expressions to others.

-- new script action: RemoveStatus. Removes a type of status effect from a character. Two parameters: Character Name and Status Effect Name.

-- improved mixing for the "thud" sound, created an implemented a "grab sack" sound effect, and assigned a sound effect to the Swim skill.

-- adjusted the positioning of the recruitable spriggat in the League 1 qualifier battle slightly to make it easier to avoid getting roasted right out of the gate.

-- fixed: tall reeds had fly-only passability.

-- fixed: the text overlay in battle would stop showing up for multiple consecutive instances of the same skill.

-- fixed: the Talkable status effect would remain on the recruitable spriggat in the League 1 qualifier battle even after talking to her.

-- fixed: reports were broken by the text animation update.

-- fixed: the game wouldn't let you target Create skills on bridge tiles.
Title: Re: A new engine!
Post by: CraigStern on October 22, 2019, 05:03:55 PM
-- took my first tentative steps with the PowerSprite animator tool. Went back to using individual, separate sprite sheets with consistent frame sizes for the sake of speeding up the workflow; managed to get all of the male and female axefighter sprite sheets for attack animations sliced up and turned into Unity animations for each of the cardinal directions.
Title: Re: A new engine!
Post by: CraigStern on October 23, 2019, 03:28:21 PM
-- wrote new follow-up approach dialogue for different personality traits, and a few new variations for existing lines.

-- follow-up approach lines are now regenerated with each use, with the game picking different phrasings for the next use.

-- dialogue now supports alternate facial expressions for the same line, choosing at random from multiple delimited expressions. In script actions, each expression should be delimited by vertical bars; elsewhere, by forward slashes. (E.g. a camp activity narration line with a facial expression set to Irritated/Mad will be accompanied by either the Irritated or Mad facial expression, with a 50% likelihood of either.)

-- applied the new text animation method to cut scene narration text.
Title: Re: A new engine!
Post by: CraigStern on October 24, 2019, 04:16:06 PM
Created a 3-minute raw gameplay video last night for purposes of submitting the game to the Indie Megabooth! Meanwhile, today:

-- received, incorporated new training room background into the game.

-- increased the monetary value of dolls created by toymaker characters so that they return a sizeable chunk of money (350 aura) when sold.

-- fixed a null error concerning facial expressions and generic character portraits.

-- fixed some missing objects and a misplaced tile on the Adelbrae map in the Vengeance of Emma Strider campaign.

-- fixed: misformatted bold text tags in the character screen.

-- fixed: the character creator was using the elementID instead of the image name when saving custom portrait elements with alternate positionings.

-- fixed: the character creator wasn't reflecting changed smoke plumes within shadowling character portraits until the characters were saved and reloaded.

-- fixed: the character creator wasn't saving characters' default facial expressions along with their portrait data. The game now loads default facial expression data for premade units from the XML attribute defaultExpression.

-- fixed: the character creator wasn't generating character movement sound data or saving it to XML along with the rest of the character.

-- fixed: the hair accessory buttons in the accessory chooser window of the character creator were throwing range errors when palette-swapping.
Title: Re: A new engine!
Post by: CraigStern on October 25, 2019, 05:19:09 PM
- sped up the "fade out" timing on the combat text overlay when initiating an attack.

- began laying the code framework for characters to change classes mid-game.
Title: Re: A new engine!
Post by: Sythion on October 25, 2019, 09:18:59 PM
Quote from: CraigStern on October 24, 2019, 04:16:06 PM
Created a 3-minute raw gameplay video last night for purposes of submitting the game to the Indie Megabooth!

Where can I find this? :o
Title: Re: A new engine!
Post by: CraigStern on October 28, 2019, 10:18:25 AM
You can't! It hasn't been made public, as it still contains some placeholder elements. I'll be making a new, proper trailer for the game's official announcement once it has all of its animations and other graphical touches in place. ;)
Title: Re: A new engine!
Post by: CraigStern on October 28, 2019, 04:57:23 PM
-- implemented ChangeCharClass script action. Two parameters: character name and the class to change to. This is like the script action from Telepath Tactics, but way more far-reaching in its effects.

Instead of just changing the character's sprite and internal class name reference, it now also changes (1) the character's stats so as to reflect starting bonuses for the new class (and to remove starting bonuses from the old class); (2) the character's stat growths so as to reflect growth bonuses for the new class (and to remove growth bonuses from the old one); (3) the character's skill progression (including giving the character class-appropriate starting skills); (4) the character's clothing in their portrait (if a generated character); and (5) the character's dialogue (if any of it has class-specific requirements, or references their class).
Title: Re: A new engine!
Post by: CraigStern on October 29, 2019, 03:48:47 PM
-- made more progress on having the game import all relevant character class information from XML rather than relying on hard-coded values.
Title: Re: A new engine!
Post by: CraigStern on October 31, 2019, 10:02:27 AM
-- continued work on having the game import all relevant character class information from XML in the name of making all of the game's classes fully moddable (and supporting custom classes in the process).

-- created a new Kineticist skill: Kinetic Constriction. This is a range 1-3 attack that deals straightforward Crush damage to a single target with high accuracy, but has no knockback or status effects. This should help Kineticists to be more consistent in their utility, rather than always being constrained by the vagaries of map design and enemy placement.

-- created the icon for Kinetic Constriction, added it into the Kineticist skill progression.

-- decreased the cost and increased the damage on Gravity Spike.

-- two new operators are supported when altering integer values: f and c. These impose a floor and ceiling, respectively, on the named value.

For instance:

SetVal/MoralePenalty,f:2

This will check the value of the custom integer MoralePenalty; if MoralePenalty is found to be less than 2, it will then be set equal to 2.

-- the SetVal action now supports an unlimited number of operations within a single call! Just keep adding new operations onto the end as new parameters; they will be run in order from left to right. For instance:

SetVal/SuccessChance,=:-VAL:UnitAccuracy-,*:0.5,-:10

This creates a custom value called SuccessChance (or sets the existing value by that name) equal to another custom value (UnitAccuracy), then multiplies it by 0.5, and then subtracts 10. (If UnitAccuracy was 100, this would produce a SuccessChance value equal to 40.)
Title: Re: A new engine!
Post by: CraigStern on October 31, 2019, 04:19:54 PM
-- the character generation system in the game now generates class-related growths, stats, skill progressions, starting inventory, and descriptions based on data parsed from XML! It's still not complete class-related mod support yet, but it's getting closer...
Title: Re: A new engine!
Post by: CraigStern on November 01, 2019, 04:56:15 PM
-- character class XML info now supports separate attributes defining potential species, gender, and stat growth requirements for a character to be eligible for a class. The game now refers to these when deciding the potential classes a character can be rather than to the old, hard-coded logic.

-- the game now pulls from class XML attributes when generating a character's sprite set and portrait.

-- the game now uses the class XML file when it begins generating baseline growths for a character with a pre-chosen class (e.g. Health, Energy, Strength, and/or Psy).

-- new script action: ClassesToList. Create a list of all character classes; or, if a character is specified, a list of all classes that character meets the requirements for. Three parameters, the latter two of which are optional: (1) list name; (2) character name; and (3) name of a custom list containing any classes to exclude from consideration.

-- new script actions: RemoveVal, RemoveString, RemoveList, and RemoveArea. Each removes a custom variable of its respective type from the custom variables the game is tracking. One parameter: variable name.
Title: Re: A new engine!
Post by: CraigStern on November 04, 2019, 03:02:36 PM
-- created a new evening event: a character approaches the player and requests to change classes. The player may agree, or tell the character to remain their current class.

-- updated the text formatting on saved game file slots so that scene name shows up bolded and maroon-colored, making the save files much easier to parse at a glance.

-- new text formatting supported: you can now make text dark red, dark green, or dark blue using the following special characters:
[red] and [/red]
[green] and [/green]
[blue] and [/blue]


-- new text formatting supported: you can now force a block of text to lower-case using the [lc] [/lc] special character. Whatever text is within the [lc] and [/lc], the game will display entirely in lower-case. (Useful for when you're referring to character classes, items, skills, masteries, and other things that are always capitalized by default.)

For instance, suppose you have this line:

I'm a lone [lc]-CLASS-[/lc].

If spoken by a Swordsman character, the game will display I'm a lone swordsman instead of I'm a lone Swordsman.

-- fixed: any and all text formatting with a forward slash in the "end formatting" part of the tag would break dialogue replies. Bold, italic, underline, strikethrough, color, and the [lc] end tag all work just fine now in dialogue replies.
Title: Re: A new engine!
Post by: CraigStern on November 05, 2019, 04:24:24 PM
-- prettied up the "shower of sparks" particle effect that plays when an attack lands. The sparks look nicer now, there are more of them, and they leave little trails of light behind them.

-- new snowy particle effects added to the game: SnowRingFX, SnowPuffFX, and SnowShowerFX.

-- characters and objects spawned on snow tiles now produce SnowRingFX and SnowShowerFX as they appear.

-- the cut scene editor and the map editor each now both have predictive text for the Next Scene fields in their Scene Settings windows, populating with the names of existing scenes in the campaign most closely matching what you've typed.

-- fixed: the object search field in the map editor wouldn't repopulate the window with objects properly when hitting backspace after typing in a search.
Title: Re: A new engine!
Post by: CraigStern on November 07, 2019, 05:04:07 PM
-- filled in the promotionOptions attribute for each base class in the game.

-- classes now have a reqLvl attribute that can be used to gate character classes by experience level.

-- altered the RangeBonus tag so that it now functions only upon ranged skills depending upon a specified base skill. For instance, instead of getting RangeBonus,+:1, a bowman would now instead get RangeBonus,Bow,+:1, applying the range bonus only to all ranged skills with a dependsUpon attribute of Bow. (This prevents unwanted effects from class changes, such as a bowman who switches over from the spearman class also getting +1 range on all spear skills as well as their bow range improves.)

-- wrote new, alternate promotion classes for certain base classes.
Title: Re: A new engine!
Post by: CraigStern on November 11, 2019, 05:25:48 PM
-- created a little "talking" indicator that pulses next to a character when they're talking during in-battle dialogue. (The game specifically checks to see if their name is what appears in the "speaker" field for each line of dialogue.)

-- added a new "aggression" constant to AI profiles in order to directly put a finger on the scales with respect to moves that will damage the AI player's enemies; set it to 1.3 by default to help deal with edge cases where the AI will choose to do nothing even though it can attack.

-- created a distinct constant in AI addressing movement onto spaces where a unit is at risk of death, and set its default value to much lower than the lethal counter constant so as to significantly encourage enemies to make advantageous attacks against the player even though they might later die from the positioning those moves require.

-- fixed a range error in dialogue regeneration for greeting responses in camp.

-- fixed: the game wasn't making use of -VAL:- variables in OnTurn dialogue triggers.
Title: Re: A new engine!
Post by: CraigStern on November 12, 2019, 05:00:09 PM
-- the game now recognizes -VAL:- variables in OnVictory dialogue triggers; the game now parses trigger parameters for all special characters within the parameters every dialogue trigger other than OnLoaded, OnTurn, BeforeTurn, and OnVictory (which either take no parameters or else take only a single integer).

-- implemented the WinBattle reply type (replacing the old "EndBattle" reply type). Works the same as the WinBattle script action.

-- implemented the LoseBattle reply type. Works the same as the LoseBattle script action.

-- got the Adelbrae Battle and post-battle scenes from The Vengeance of Emma Strider campaign working.

-- got the Caravan Battle and pre-battle scenes from The Vengeance of Emma Strider campaign working.

-- fixed: the change to default unit accuracy values for class-specific custom stat generation formulas in proc gen characters resulted in all premade units sporting 0 accuracy unless otherwise specified, which in turn meant they would miss every single attack against any unit with a Dodge greater than 0.

-- fixed: units that dodged an attack would not counterattack afterwards even if they were able to do so.
Title: Re: A new engine!
Post by: CraigStern on November 13, 2019, 04:17:42 PM
-- new skill: Stick-and-Drag. Depends upon Spear; a 1-range piercing attack that pulls the target (and the attacker) back 1 space. Spearmen now learn either Stick-and-Drag or Pinning Thrust during their early skill progression. I just recounted, and this brings the game up to 148 unique skills out of the box!

-- replaced the "Custom:" prefix on proc gen portraits with "Generated:" in anticipation of supporting custom portraits and portrait elements. Began coding the framework for custom portrait elements.

-- the Spirit's Drain skill can now cause Clouded status.

-- created a thirteenth hair style for proc gen human male portraits.

-- fixed: the character creator wasn't pulling class info correctly.

-- fixed: a typo was causing the character creator's portrait creation window to display the skin palette chooser when it shouldn't, and to hide it when it should show it.

-- fixed a typo in the portrait body attribute for the Psy Healer class.

-- fixed: the "currently talking" icon would appear on top of replies in cut scene dialogue, obscuring them.
Title: Re: A new engine!
Post by: CraigStern on November 14, 2019, 03:21:31 PM
-- created Move Frame buttons for the cut scene editor.

-- the move frame buttons now each shift the position of the current cut scene frame forward or backward by one, allowing you to reorder frames in your cut scene.

-- the campaign editor now always displays Introduction at the very top of the list of scenes.

-- the map editor and cut scene editor will now prompt you to save your scene if you have unsaved changes and you start to create a new scene or load a new scene in-editor.

-- continued work on supporting custom portrait elements.

-- fixed: some stuff remained to be connected up in the character creator with respect to the new class info system (particularly with regards to automatic inventory generation).

-- fixed: the main game wasn't generating proc gen equipment for premade characters upon loading them from XML in battle.
Title: Re: A new engine!
Post by: CraigStern on November 15, 2019, 04:52:12 PM
-- received new item graphics: cogs, doll, and claws (in Bronze, Iron, Steel, and Duoterre variants!) These plug the few gaps remaining in the item graphics.

-- created proc gen Claw items, usable by units with the Claw mastery (which, by default, will exclusively be spriggats).

-- added Claw Mastery to the skill progression for all spriggat classes.

-- replaced the placeholder graphics for golem modules with the Cogs and for the Doll item with the Doll.

-- totally rewrote the logic for "move yourself along with the target" knockback skills like Pull and Stick-and-Drag. These now use WithTarget in the moveType attribute; this tells the game to apply knockback to both the target and the user even though the user isn't targeted by the skill. (This is much more robust implementation that works regardless of what the attack's knockback value is.)

-- fixed a few more inventory bugs relating to proc gen equipment in the character creator and marking equippable items equipped when the game randomizes them for you.
Title: Re: A new engine!
Post by: CraigStern on November 16, 2019, 04:09:41 PM
-- rewrote the game's animation code in reliance on PowerSprite; character animations are now loaded dynamically at runtime using code rather than having to progress through a ridiculous song-and-dance with trigger setting and resetting inside tediously hand-crafted animation controllers. (This is going to make it much easier to set up the game's remaining character animations!)

-- added firework sound effects to accompany the victory screen fireworks.
Title: Re: A new engine!
Post by: CraigStern on November 17, 2019, 06:21:52 PM
Held a playtest focused on the campaign editor, which revealed loads of bugs that had crept in over the past few months! I've fixed a few of them so far:

-- fixed: the skill editor wasn't saving the cost, or most of the decimal value attributes of skills (e.g. strength or psy damage factor)

-- fixed: I apparently forgot to actually make the DefeatScene condition actually do something in the code (oops), and I had an example for it that used outdated syntax in the Map Conditions window in the map editor.

-- fixed: recent changes to the way characters are generated broke the "randomize character stats for a specific level" function in the character creator.
Title: Re: A new engine!
Post by: CraigStern on November 18, 2019, 05:25:08 PM
-- fixed: the game wasn't actually culling skills in generated skill progressions prohibited by a "ForSpecies" marker.

-- fixed: the skill progression window wouldn't clear properly in between presses of the randomize button in the character creator, resulting in ever-longer and more incomprehensible skill progressions with every press.

-- fixed: when editing settings for a scene with a next scene value already entered, the cut scene editor would pop up blank "results" boxes for the next scene predictive text upon opening scene settings and produce a null error.

-- fixed: accidentally broke code necessary to generate unique golem portraits properly.

-- fixed: I accidentally broke the "abandon" option on the save warning when creating, generating, or loading a new character, scene, or map while you had unsaved changes in the character creator, cut scene editor, or map editor.

-- fixed: the skill editor and item editor would each load a blank screen every second time you clicked a skill/item to edit.
Title: Re: A new engine!
Post by: CraigStern on November 19, 2019, 05:25:12 PM
-- fixed: the game was not correctly saving the loadID for FromPlayerRoster units generated using the terrain generator in the map editor.

-- fixed: the map editor had stopped showing the shadowy FromPlayerRoster figure for unit spawn points based on a player roster.

-- fixed: procedurally generating a unit who's so high level that they already know every skill they are ever going to learn would cause the game to throw a divide-by-zero error when generating the unit's skill progression.
Title: Re: A new engine!
Post by: CraigStern on November 20, 2019, 04:31:25 PM
-- fixed: promoted characters were generated without the 20-or-so levels worth of stat improvements that their classes implied.

-- fixed: when a character changes class from their base class to a related promotion class, the game now automatically resets the character's level to 1 and adds their old level to the character's PromotionLevels stat for experience scaling and such.

-- fixed: turns out, there was missing tile data for a bunch of basic chasm transition tiles! (Oops.)

-- fixed: if the last unit left in an army burned (or was poisoned) to death at the beginning of their turn, the game wouldn't check to see if victory conditions were met and end the battle appropriately.

-- fixed: Binoculars were still using an outdated formatting for the RangeBonus tag.
Title: Re: A new engine!
Post by: CraigStern on November 21, 2019, 04:45:59 PM
-- you can now rename a campaign in the campaign editor! Just open it, click its title, edit it, and click the confirm button.

-- the game now stores a log of conversations undertaken, documenting the player's path through the dialogue tree. This will eventually be used to create a UI interface to review past dialogue.

-- added some tutorial text in the initial qualifier explaining the shift-click attack shortcut.

-- fixed a bug that was causing modifier tags to not reliably modify when not tied to a specific skill (e.g. RangeBonus,,+:1).

-- fixed: the character editor "trying to exit with unsaved changes" warning gave the user incorrect information if the character being edited was not complete (and thus, not susceptible to being saved). The warning window now provides different text and behaviors for incomplete characters when you try to exit the editor.

-- fixed: the text overlay and objectives window UI elements were pulling only from saved characters for ID[] tag processing, thereby failing to account for new characters on the battlefield and those who'd recently received a new script ID.
Title: Re: A new engine!
Post by: CraigStern on November 22, 2019, 03:26:58 PM
-- made the auto-move-and-attack feature smarter. It no longer automatically chooses the selected character's most basic attack. Instead, for each skill, it now checks if the skill can reach; assuming it can reach, it then calculates a score based on a rough balancing of the skill's power relative to the target's resistances and remaining health versus the skill's cost relative to your character's remaining energy. It then picks the skill with the best score for that character to auto-move-and-attack with.

It's now smart enough to pick the cheaper of two skills that'll both kill an opponent, but it still won't account for backstabs, knockback, terrain effects, or status effects. It's more useful, but still a blunt tool to be used in low-stakes situations.

-- updated the auto-move-and-attack tutorial to better reflect the current state of the feature.

-- fixed: a few dialogue facial expressions were incorrectly named.

-- fixed: an annoying bug where the game would inappropriately act as though shift were remaining held down after shift-clicking an enemy, auto-moving, and populating the battlefield with attack tiles.
Title: Re: A new engine!
Post by: CraigStern on November 25, 2019, 04:01:46 PM
-- created new battle: Battle on Lotus Isles.

-- wrote new recruiter and Arena dialogue.

-- added a "shortcut" to a couple of weeks into the game for playtesting purposes.

-- fixed: the affects attribute for Kinetic Constriction was inappropriately set to None, meaning that it did nothing despite ostensibly damaging character's health.

-- fixed: the game wasn't displaying physical attributes in the character screen correctly.

-- fixed: character portraits could sometimes inappropriately remain onscreen after camp events.

-- fixed: character portraits weren't being cleared appropriately between branches of generated dialogue in camp.
Title: Re: A new engine!
Post by: CraigStern on November 26, 2019, 04:53:14 PM
-- coded attack animations into the game! For now, I've got it set up much as it was in Telepath Tactics, but slightly improved: the game looks for an animation matching the skill name; if it doesn't find one, it looks for an animation matching the skill's dependsUpon name; and if it can't find that, then it uses the unit's default skill animation. When the attack concludes, the character reverts back to their rest pose.

I tested this out on axefighters, and it's working exactly as intended! With this now confirmed to be working, I'm proceeding with implementing the other classes' skill animations.

-- finished formatting and implementing the male and female skill animations for crossbowmen and barudit.
Title: Re: A new engine!
Post by: CraigStern on November 27, 2019, 01:32:38 PM
-- finished formatting and implementing the male and female skill animations for the cryokineticist, pyrokineticist, photokineticist, skiakineticist, psy healer, gasul, and spirit sprite sets, along with partial implementation of animations for the bowman sprite sets (the split shot and split shot 2 sprite sheets seem to have some patches of faulty framing, which will need to be fixed by hand before animations can be created from them).

-- adjusted the pivot point on various sprite sheets to ensure that animations remain consistent in their positioning.

-- added a new, optional anim attribute to skills so that animations can be assigned to skills that match neither the skill name nor the skill's dependsUpon value. Assigned a bunch of anim values to skills (such as Stunner and Cripple, which share Bonebreaker's animation; all the Build skills, which use the Build animation; etc.) so as to avoid hack-ily copy-pasting existing animations with variant names (as I did in Telepath Tactics).

-- made it so clicking an already-selected character in exploration mode does not toggle off movement spaces.
Title: Re: A new engine!
Post by: CraigStern on November 28, 2019, 10:03:17 AM
A happy Thanksgiving to you from myself and... *checks notes* ..."Baron Halfsquish."

-- Defeat Army no longer triggers an immediate victory if you wipe out an army with reinforcements coming on future turns.

-- formatted and implemented the shadowling and spearman sprite set animations.
Title: Re: A new engine!
Post by: CraigStern on November 29, 2019, 11:53:26 AM
-- formatted and implemented the mentalist and kineticist sprite set animations, and started on the swordsman set.
Title: Re: A new engine!
Post by: CraigStern on November 30, 2019, 10:26:23 AM
-- formatted and implemented the cavalier sprite set animations.

-- fixed: the BonusDmg tag wasn't working properly.

-- fixed: the crossbow animation wasn't displaying properly.

-- fixed: the game was skipping over the level-up display for subsequent characters when multiple characters leveled up simultaneously in camp.

-- fixed: text overlays were vanishing upon selecting a character in battle.

-- fixed: the functionality to toggle recruit info back on after clicking them again in the recruitment UI was broken.
Title: Re: A new engine!
Post by: CraigStern on December 01, 2019, 10:26:16 AM
-- formatted and implemented the engineer sprite set animations, as well as the majority of the assassin sprite set animations.

-- added a sound effect to the "drop item into reserve supplies" action in the reserve supplies screen.

-- increased the energy cost of Overhead Chop and Overhead Strike to 4.

-- a couple more small bug fixes.
Title: Re: A new engine!
Post by: CraigStern on December 02, 2019, 05:07:56 PM
-- formatted and implemented the stone and bronze golem sprite set animations, as well as the remaining swordsman and assassin sprite set animations.

-- UnitsToList now supports -ANY- as the character name for Familiarity, Friendship, and Romance stat conditionals; if used, -ANY- will cause the game to go with the highest Familiarity, Friendship, or Romance value that the named character possesses for any other character.

-- new script action: SocialUnitsToList. This creates a list with the name of all units who meet a certain familiarity, friendship, or romance threshold for the named character. Parameters: (1) list name, (2) character name, (3) army or roster number, (4) stat name (Familiarity, Friendship, or Romance), (5) comparison method, and (6) amount.

For example, this will compile a list of the names of all characters in army 0 (if in battle) or roster 0 (if in a cut scene) for whom Bob Vandalheart possesses a Friendship stat greater than 1; then, it will save that list under the name BobsFriends:

SocialUnitsToList/BobsFriends,Bob Vandalheart,0,Friendship,g,1

This will create a list called ActiveCrushes with the names of all characters in any army or roster whom Alice Wonderlander has a Romance value greater than 0 for:

SocialUnitsToList/ActiveCrushes,Alice Wonderlander,-1,Romance,g,0

-- used all of this to script an event wherein a character asks out another character whom they have a crush on. The other character can either accept or reject the proposition; if they accept, then the two characters spend the evening together.

-- fixed: specifying an activity partner in the ForceNextCampActivity tag did not force the game to skip choosing a separate individual activity for said partner that same evening.

-- fixed: specifying an activity partner in the ForceNextCampActivity tag did not force the game to actually choose a two-character narration for that activity.
Title: Re: A new engine!
Post by: CraigStern on December 03, 2019, 03:35:36 PM
-- formatted and implemented the dark spriggat, frost spriggat, golden spriggat, and red spriggat sprite set animations.

-- fixed: the "ask out on a first date" event scripted yesterday could occur with a character who already had a positive romance value with the character asking them out.

-- fixed: it was impossible for a character to get a crush on another character who would fail to reciprocate.

-- fixed: the last three frames of the male and female crossbowman's downward-facing Crossbow animation were positioned two pixels off from where they should have been.
Title: Re: A new engine!
Post by: CraigStern on December 04, 2019, 04:09:18 PM
-- received, implemented a new cut scene background.

-- new script actions: IfAttributeGoTo and IfAttributeRun. Checks the specified character for a personality attribute, physical attribute, life skill, or like; if it matches (or it doesn't match and you set reverse match to true), the dialogue will go to the specified branch/the specified script(s) will run.

Each has five parameters: (1) character name, (2) attribute type (Personality/Physical/Life Skill/Like), (3) attribute value, (4) branch number/script name, and (5) reverse match (boolean, optional--set to false by default).

This, for example, will check for whether the character with script ID 1 has the personality trait Paranoid, and if he/she does, move to the conversation branch named Paranoid Response:

IfAttributeGoTo/ID[1],Personality,Paranoid,BRANCH[Paranoid Response]

-- used IfAttributeGoTo to create the first instance of personality-customized character dialogue within scripted evening events.

-- fixed: the map editor would sometimes produce errors when painting over terrain that had just been added using the Add Row or Add Column functionality.
Title: Re: A new engine!
Post by: CraigStern on December 05, 2019, 04:03:14 PM
-- added SlashAlt visual effect animations to the game (used for Axe attacks).

-- added a display to character tooltips for item sacks showing up to the first 5 items within the sack on mouseover.

-- added to item tooltips in the shop; on mouseover, the tooltip now includes showing the item's price instead of displaying it elsewhere in the interface.

-- added some new words to the dictionary of the lissit language. :)

-- fixed: the sword slash visual effect was not aligned with the direction of the up- and down-facing Swordsman attack animations.
Title: Re: A new engine!
Post by: CraigStern on December 06, 2019, 02:55:02 PM
Fixed a variety of bugs that crept into the game with the latest additions, as well as fixing an annoying issue with hypersensitive camera drag-panning during deployment.

With the issues cleared up, I'm submitting the game to SXSW Gaming 2020!
Title: Re: A new engine!
Post by: CraigStern on December 09, 2019, 05:21:02 PM
-- added a Test Campaign button the campaign editor; when clicked, it allows you to choose a scene, then immediately loads it in a (normally unusable) save slot in "normal game" mode so you can test it out. When you "return to title screen" after testing it out, the game instead returns to the campaign editor.

--in the process of implementing a "test roster" interface as part of the Test Campaign window to let you create a roster on the fly for jumping directly to testing out battles.
Title: Re: A new engine!
Post by: CraigStern on December 10, 2019, 04:54:20 PM
-- you can now hand-set all 10 rosters for test purposes when testing scenes directly from the campaign editor!

-- you can now specify set-up scripts to be run the first time you load a scene for testing. These, in turn, can set various values (or do whatever you like, really) to help simulate the state the player should be at in the point in the campaign you're testing.

-- the game will save your test rosters and named set-up scripts when you leave the editor to test a scene, and will reload them upon your return for further testing.

-- new status effect: Clarity. Boosts accuracy by 50% for 3 turns.

-- new skill: Clarify. 3 energy; buffs the target with Clarity status. Mentalists now learn either Stimulate or Clarify as part of their skill progressions.

-- increased the power of the Blindness status effect from 100 to 150, ensuring that it cannot be meaningfully counteracted by Clarity.

-- dropped the accuracy modifier on Overhead Chop (the axe skill) from -25 to -30; dropped the physical damage multiplier on Overhead Strike (the sword skill) from 1.5 to 1.4, and the cost from 4 to 3.

-- fixed a divide-by-zero error that could occur in battle when determining the coordinates to pan to when panning to an army.
Title: Re: A new engine!
Post by: CraigStern on December 11, 2019, 03:36:04 PM
-- broke the testing set-up scripts field into three separate fields, each with predictive text boxes that suggest the closest matching global script names as you type.

-- you can now drag-pan around in the map editor by right-clicking.

-- you can now drag-pan around in the dialogue editor.

-- the plus and minus keys now function as zoom-in and zoom-out hotkeys in the dialogue editor.

Added some much-needed display functionality to the dialogue editor, making it much easier to find things in scenes with lots of different dialogue trees and scripts:

-- there are now check boxes in the dialogue editor that let you filter out dialogue trees so you see only scripts, or filter out scripts so you see only dialogue trees.

-- there is now a search bar in the dialogue editor that narrows down the field of visible dialogue trees and scripts by matching conversation IDs and script names, respectively.
Title: Re: A new engine!
Post by: CraigStern on December 12, 2019, 04:17:11 PM
-- when you narrow the dialogue trees and scripts displayed in the dialogue editor, the camera now snaps you back to the default starting position so you can browse the results.

-- finally implemented the MovePortrait script action! This lets you move portraits around during cut scenes. I've changed it a bit, however: rather than requiring specific pixel coordinates, it now takes integers roughly corresponding to 1/20th of the screen, making it way easier to predict where the portraits will end up. Parameters: (1) Portrait reference name, (2) destination X, (3) destination Y, and (4) speed.

For destination X, 0 is the left edge of the screen and 20 is the right edge. For destination y, 0 is normal standing height and 20 is so low that the portrait is ducking down below the bottom edge of the screen. Speed is a decimal (with 100 being normal move speed). Everything after parameter 2 is optional.

This, for instance, will have the character portrait with reference name Bob move slowly toward the center of the screen:

MovePortrait/Bob,10,,40

This will have the character portrait with reference name Bob move quickly toward the right edge of the screen:

MovePortrait/Bob,20,,250

This will have the character portrait with reference name Bob move at normal speed toward the left edge of the screen:

MovePortrait/Bob,0,,100

(Note that you're almost never going to use the Destination Y parameter unless you're simulating a character ducking, laying down, falling over, etc.)

-- fixed: character portraits added via script actions weren't taking their reference names correctly.
Title: Re: A new engine!
Post by: CraigStern on December 13, 2019, 03:27:02 PM
-- wrote another couple of like dialogue variations.

-- fixed a handful of small issues relating to character dialogue.

And with that done, I spent my remaining time writing up a game pitch to a publisher. (We'll see if I can find someone to market this sucker for me and get it ported to consoles!)
Title: Re: A new engine!
Post by: CraigStern on December 17, 2019, 04:25:27 PM
Submitted in my first publisher pitch! Meanwhile, on the development front:

-- received new "knife throw" animations for the assassin class, integrated them into the game. (I'd been wanting these animations for years now!)

-- implemented the rest and walk sprite animations for all the NPC villager sprite sets.

-- implemented the rest sprite animations for the adult male and female child slave sprite sets.

-- improved the golem walk sound loop.
Title: Re: A new engine!
Post by: CraigStern on December 18, 2019, 05:28:17 PM
-- implemented the walk sprite animations for the adult male and female child slave sprite sets.

-- implemented the rest and walk sprite animations for the lissit matriarch sprite set, the lissit child sprite set, and for the senator sprite set.

-- received, imported new portraits: chital, shadowling child, and spriggat child. Created portrait data for them and integrated them into the game.

-- entered in data for a fair number of alternate promoted classes.
Title: Re: A new engine!
Post by: CraigStern on December 20, 2019, 08:41:31 AM
-- created most of the remaining alternative promoted classes. The game now has 44 promoted classes in addition to its regular stable of 24 base classes!

-- new tag: ModAfterAttack. Takes two tag parameters: skill name and after attack type (End Turn, Use Once, Can Move, or Unlimited. For example:

ModAfterAttack,Sword,Can Move

This tag will make it so the unit who possesses it can move after using the Sword skill instead of having their turn immediately end.

-- fixed: it was possible for the game to get into a loop with re-checking and re-running repeatable OnReachingArea dialogue after ending said dialogue.
Title: Re: A new engine!
Post by: CraigStern on December 20, 2019, 04:35:37 PM
--finished creating all of the game's 48 promoted classes! The game now has 72 character classes.

-- new tag: ModSkillSFX. Takes two tag parameters: skill name and status effect name. For example, this tag will make it so the tagged unit will have a chance to inflict the Burning status effect whenever they use the Claw skill:

ModSkillSFX,Claw,Burning

-- started working on the "Choose a Promotion Class" screen.

-- light attacks can now cause both Blinded and Distracted.

-- Dazzle now has a chance to cause the Slowed status effect.

-- fixed: for reasons surpassing human understanding, sometimes the status effect displayer would skip over the first status effect when a character was afflicted with multiple status effects.
Title: Re: A new engine!
Post by: CraigStern on December 23, 2019, 05:32:33 PM
-- did a bunch more work on the character promotion interface; got it mostly working!

-- foxed: the CullListByList script action would cause the game to throw a range error in certain circumstances.
Title: Re: A new engine!
Post by: CraigStern on December 24, 2019, 03:22:49 PM
-- got the promotion interface working!

-- fixed: pre-promoted recruits showed up with the wrong character level displayed.

-- fixed: skill text in the recruitment interface wasn't wrapping onto the next line.
Title: Re: A new engine!
Post by: CraigStern on December 26, 2019, 05:20:04 PM
Began writing up my end-of-year summary of all the progress I've made on the game.

-- coded a boolean toggle to put the game into "Telepath Tactics mode" so that it loads the correct title screen, music, and default main campaign. This will allow me to more easily develop both the new game and the TT special edition simultaneously, with each sharing new features and bug fixes.

-- created class variants for the Vengeance of Emma Strider campaign (which generally features greater unit speed to suit its larger maps).
Title: Re: A new engine!
Post by: CraigStern on December 27, 2019, 05:24:54 PM
-- skills now have a new attribute: stopsCounters. If set to true, the skill will stuff any potential enemy counterattack when used. This replaces the dumb hard-coded thing where giving a skill the Distracted status effect would always necessarily mean it couldn't be counterattacked.

-- in addition to Feint and Throw Voice, all Light element attacks no longer permit counterattacks, nor do Mind Control or Possess.

-- created a check-box in the skill editor to let you change the stopsCounters attribute for a skill.
Title: Re: A new engine!
Post by: CraigStern on December 30, 2019, 05:23:30 PM
-- received, created portrait data for the last of the "child" portraits: the Lissit Child.

-- implemented the script action RemoveTagFromArmy. It works exactly like RemoveTag, but it affects an entire army (or, if used in a cut scene, an entire roster). Two or more parameters: (1) army/roster number, and (2+) the tag to remove.

-- fixed: the game wouldn't pan to the current army if you used the script action call MoveCam,,
Title: Re: A new engine!
Post by: CraigStern on January 02, 2020, 12:13:20 PM
-- new script action: ZoomCam. Lets you set the camera zoom level during cut scene stuff happening in battle. One parameter: zoom-out level (and integer between 0 and 4).

-- fixed: skills that don't have a specified camera shake magnitude or duration no longer produce camera shake.

-- fixed: a timing issue that was sometimes causing counterattacks to not go off on slower computers.
Title: Re: A new engine!
Post by: CraigStern on January 02, 2020, 05:19:35 PM
-- changed over the skill visual effects to use the new, easier PowerSprite method so I don't have to manually add each one (complete with boolean triggers) to a bloated, pointless animation controller by hand.

-- added the TowardTargets and TowardCenter visual skill effect behaviors into the game, allowing skill-based projectiles to move as they animate.

-- added in projectile visual effects for the bow, crossbow, and elemental blast skills.

-- added in "summoning" visual effects for the elemental blast skills.

-- created new scripting behaviors to allow the daisy-chaining together of skill animations, since the old frame-based method of TT doesn't work with Unity's animation system (which is non-frame-based). The new method: instead of selecting a frame on which to spawn a visual effect, you can now tell it to spawn immediately upon the death of another visual effect.
Title: Re: A new engine!
Post by: CraigStern on January 03, 2020, 04:04:57 PM
Posted a Kickstarter update summarizing this year's progress on the new Telepath engine: https://www.kickstarter.com/projects/1426761469/telepath-tactics-a-strategy-rpg/posts/2717821 (https://www.kickstarter.com/projects/1426761469/telepath-tactics-a-strategy-rpg/posts/2717821)

I'll be making an alpha demo of the updated Telepath Tactics available to Kickstarter backers in the coming weeks. :)

In the meantime:

-- the game now checks sound effect and visual effect timings by reference to the in-game timer rather than via a frame countdown, in concert with the way Unity's animation timing system works.

-- went through nearly all of the game's ~150 skills and updated them with estimated decimal values for the visual and sound effects timings based upon Unity's animation timings for the implemented character sprite animations. Attack sound and visual effects now match up quite closely with the timing of their associated character animations!

-- added in visual effects for all the spriggat breath skills, as well as for feedback and grapple chain.

-- added in projectile visual effects for the throwing axe skill.

-- began going through and manually replacing the integer values from the old frame-based impactFrame attribute with appropriate decimal values in an impactTiming attribute for each skill, timing them in accordance with the character animations and visual effects for each skill.

-- fixed: the game was dropping camera shake magnitude and duration data for skills when converting them to individualized attack data.
Title: Re: A new engine!
Post by: Sythion on January 05, 2020, 12:03:17 AM
I forgot all about the Kickstarter, nice to hear backers aren't being left behind! With this, Hype has risen to 10/10 levels yay!
Title: Re: A new engine!
Post by: CraigStern on January 06, 2020, 03:56:23 PM
Yay! Hype for everybody! :D

Okay, new stuff:

-- got spawn offsets for visual effects working in the engine! This allows visual effects to not spawn right in the middle of a character's space (which ends up legitimately looking weird for certain effects, like the elemental blast skills).

-- recalculated the offsets for all skills that have them using decimal values relative to a full space away (rather than in integers reflecting absolute number of pixels, as they were in the original Telepath Tactics).

-- new script actions: SpawnVisualEffect and SpawnVisualEffectAt. Each spawns a visual effect animation--the first relative to a character on the battlefield, and the second relative to coordinates on the battlefield. Parameters: visual effect name, character name (or y coordinate and x coordinate as two parameters). Optional parameters: Front-Back Offset (decimal -- optional), Left-Right Offset (decimal -- optional), Move to Y coordinate (optional), and Move to X coordinate (optional).
Title: Re: A new engine!
Post by: CraigStern on January 07, 2020, 04:25:51 PM
-- added more Telepath Tactics music tracks into the game.

-- the game now supports the PlayAnim script action. Makes a character on the battlefield perform the named animation. Two parameters: Character name, Animation name.

-- remade Goniff Bastid's first shop scene from the The Vengeance of Emma Strider campaign using the new shop interface!

-- updated the date scripting for the The Vengeance of Emma Strider campaign so that these values show up correctly in the info bar.

-- updated the money scripting for the The Vengeance of Emma Strider campaign so that it all works correctly with the shop interface and info bar.

-- added proc gen equipment to the The Vengeance of Emma Strider campaign.

-- the Shop editor within the Cut Scene Editor now checks to make sure that the % chance and number values for a given stock are valid.

-- fixed: setting a single, non-zero number (rather than a number range) for the number of items to generate for a stock in a shop would cause the game to generate a number of those items between zero and that number instead of generating exactly that number.

-- fixed: XML comments within scripts would be read by Unity as inner text that would overwrite the script name, thus rendering the game unable to find the script.

-- fixed: ending dialogue in battle with NextScene would not prevent the game from popping up the Actions Bar or the Turn Box upon closing the dialogue window, even as it began to fade the scene out.

-- fixed: after performing attack animations, characters would remain on the last frame of their animation rather than returning to their rest pose.
Title: Re: A new engine!
Post by: CraigStern on January 08, 2020, 04:57:18 PM
-- added more Telepath Tactics music tracks into the game, as well as some tracks from prior Telepath titles.

-- replaced old track names from Telepath Tactics with the proper titles of songs.

-- the game now supports the FlipPortrait script action. One parameter: the reference name of the portrait whose facing direction you want to flip.

-- the AddSpeakerPortrait action now works with characters not physically present on the battlefield during battle scenes.

-- if you progress to a new dialogue branch while portraits are still moving from the MovePortrait action, the game now snaps them to their destinations before proceeding.

-- the cursor now changes to an hourglass when loading sub-editors within the campaign editor, then returns to normal upon completion. Similarly, the cursor now changes to an hourglass when exiting sub-editors, then returns to normal upon successfully loading the campaign editor.

-- expanded upon the game's built-in guide to getting started creating a campaign.

-- fixed: dialogue could inappropriately re-trigger upon completion in certain circumstances.

-- fixed: the music browser wasn't allowing you to browse beyond the first page of tracks.
Title: Re: A new engine!
Post by: CraigStern on January 09, 2020, 04:28:26 PM
Played through The Vengeance of Emma Strider again, fixing bugs, tweaking content, and taking screenshots for a much-needed Steam page update (https://store.steampowered.com/app/357940/Telepath_Tactics/).

-- added missing facial expressions in the Caravan battle.

-- improved camera zoom and positioning in multiple cut scenes to better frame the action.

-- fixed some scripting that wasn't working quite right in the Caravan battle.

-- fixed: character selector graphics weren't getting positioned to match their facing direction when characters first spawned.

-- fixed: the AI would sometimes act as though it had moved a character that it hadn't yet moved, skipping to the "use a skill" portion of that character's turn and using a skill from the wrong space.

-- fixed: if a character's move was interrupted (as by a trap), the AI could fail to notice that the character ended up in that space and could potentially try to move another character into that space, producing a null error.

-- fixed: if a character leveled up by counterattacking and slaying the last remaining enemy on the map during the enemy turn, the level-up screen could get stuffed by the AI routines continuing to run and calling the end of the AI player's turn.
Title: Re: A new engine!
Post by: CraigStern on January 10, 2020, 03:20:17 PM
-- the game now has its own built-in logging class. It maintains a list of the last 3000 log messages and saves them to a file (Log.txt) within the Documents/My Games/Together in Battle/Logs folder whenever the player presses the 'L' key, or whenever something sent to the log throws an error. (This is important for helping me track down and fix bugs that players experience!)

-- added support for the Log script action, which writes a new message to the log. One parameter: the message to send to the log.

-- removed the behavior in which the game ignored saved units who had last appeared in a different army when loading them in battle. It turned out that this was causing the game to save inconsistent variants of characters from their appearances in different armies, which it turns out is pretty problematic. Maintaining multiple copies of a character in a campaign is still possible--it'll just mean giving them different load IDs.

-- fixed: the SetSeed action was set to search for the seed number parameter in the wrong parameter spot.
Title: Re: A new engine!
Post by: CraigStern on January 13, 2020, 04:41:13 PM
-- created ogg files out of the remainder of the Telepath Tactics soundtrack, numerous additional TSoG music tracks.

-- imported the new tracks into the game, updated asset names list so that all music tracks in the game can be easily referenced by custom campaigns.

-- updated music track references in The Vengeance of Emma Strider to match all updated track names. (Previously, tracks were referenced by unofficial work-in-progress names.)

-- the title screen now changes the cursor to an hourglass when loading a new scene, as do the battle and cut scene scenes.

-- you can now talk to Sabrina in the Training battle in The Vengeance of Emma Strider.

-- improved some of the scripting in the Training battle as well as the Zash and Red battle in The Vengeance of Emma Strider.

-- fixed: attack animations were being cut short.

-- fixed: when AI-controlled units became stunned, frozen, or otherwise incapacitated during their turns, the AI would blunder right over the 2-second "determine the next best move based on changed circumstances" timer, sometimes resulting in strange behaviors or bugs.

-- fixed: under certain circumstances, it was possible to drag-pan the camera during in-battle dialogue.

-- fixed: repeatable OnTurn dialogue could inappropriately re-trigger upon attempting to move directly to a new scene via a script action or reply.
Title: Re: A new engine!
Post by: CraigStern on January 14, 2020, 05:27:26 PM
-- the 'L' key now saves a log when used inside the campaign editor and all of its sub-editors.

-- made some placement and scaling tweaks to the in-battle weather particle system.

-- made a few small updates to the old Guard Llama mini-campaign.

-- coded what should be support for custom destructible object images in the game, but alas, Unity is being frustratingly recalcitrant (https://answers.unity.com/questions/1691202/png-loaded-from-disk-works-in-ui-image-but-not-in.html).

-- fixed a bug with the RemovePortrait action.
Title: Re: A new engine!
Post by: CraigStern on January 15, 2020, 05:23:54 PM
-- new facial expression supported: Peeking. Has the character peeking out from behind the "Pained" expression with one eye, as if discovering that they are not, in fact, actually about to die. :)

-- the skill editor now has a character animation field that lets you specify a type of character animation to be used in concert with the skill (e.g. "Cast" or "Ability"). It has an explanation of what the attribute does when you click in the field.

-- the skill editor now successfully saves and loads the anim attribute for skills.

-- the game can now randomize character camp activities in the character creator. Added randomize and clear buttons to the camp activities window in the character creator.

-- the game now sets its custom campaign folder appropriately based on whether it is set to be Telepath Tactics Special Edition or Together in Battle.

-- updated the AddPortrait and AddSpeakerPortrait actions to use the destination peg system used by MovePortrait. This makes it much easier to predict where portraits will be placed, and far simpler to replace a portrait that has already been moved so as to update its facial expression.

-- updated a bunch of the scripting in The Vengeance of Emma Strider to comport with changes to the scripting system.

-- implemented the LightBackground script action for cut scenes. It remains just as it was in Telepath Tactics, but with different supported presets: Black, Red, Green, Blue, Yellow, Purple, Dark, Fire, and Custom.

-- fixed: the impact timing field was not being read when creating skill data upon validation in the skill editor.
Title: Re: A new engine!
Post by: CraigStern on January 16, 2020, 06:09:32 AM
-- fixed: I had accidentally caused the blinking status effect displayer that appears over characters' shoulders to stop working by switching the order of two lines of code.

-- updated the scripting in the Training battle within The Vengeance of Emma Strider to use IfInAreaRun instead of the now-deprecated IfOnCoordsRun, thereby allowing the game to once again handle it if the player is blocking Silithis from exiting the training area at the conclusion of the tutorial fight.
Title: Re: A new engine!
Post by: CraigStern on January 16, 2020, 05:14:45 PM
Uploaded an alpha demo of Telepath Tactics Special Edition in the new engine for Kickstarter backers, and created a Sinister Design homepage on Steam. With that done, I'm back to focusing on Together in Battle for a while!

-- when you refuse a character a raise, they now become resentful for a few days to a week.

-- added a message within the victory box explicitly letting you know that loose item sacks have been auto-looted at the end of a battle when the Post-Battle Looting condition is set to true.

-- tweaked values on some 2D particles to improve appearance and performance.

-- fixed: VFX would continue to update even after failing to load an animation.
Title: Re: A new engine!
Post by: CraigStern on January 17, 2020, 05:01:36 PM
-- new script action: ChangeExpression. This action finds an existing portrait and rebuilds it with a different facial expression, precluding the need to remove and re-add the existing portrait across two separate actions (and also avoiding the need to remember its current location, if it had been moved). Two parameters: reference name and facial expression name.

-- added to the first big plot event dialogue tree in the Telepath Tourney campaign.

-- updated the death monologue scripting in The Vengeance of Emma Strider to use the new names of script actions in lieu of deprecated actions like KillChar and CheckForMoreDialog.

-- fixed: the CryoBlast_1 visual effect was missing a "directional" flag in Attacks.xml, which was causing none of the visual effects associated with Cryo Blast to spawn.

-- fixed: visual effects with OnDeath spawning dependent on a prior directional VFX would not spawn because they didn't recognize the visual effect name with a direction appended.

-- fixed: in certain circumstances, the game would conclude attacks before checking for counterattacks, leading to character moves inappropriately overlapping during AI turns.
Title: Re: A new engine!
Post by: CraigStern on January 18, 2020, 11:42:50 AM
Updated the Telepath Tactics alpha demo with the past couple of days worth of fixes and improvements, including those below:

-- increased the maximum zoom-out value for the battle camera.

-- sound effects can now make use of visual effect OnDeath timings for when they spawn.

-- replaced the deprecated MoveChar and MoveCharBy actions with their new MoveUnit equivalents in The Vengeance of Emma Strider.

-- fixed: after the first instance of item use by the AI in a battle, it would just stop having its characters using items.

-- fixed: the various elemental blast skills had not had their sound effect timings updated. They now sync up to the animations.

-- fixed: the dialogue menu would visibly start to update as it disappeared when characters started walking from a MoveUnit script action, which was somewhat jarring. The menu update is now deferred until post-movement when the game detects a script action of this sort in a given dialogue branch.
Title: Re: A new engine!
Post by: CraigStern on January 20, 2020, 12:32:16 PM
-- increased the maximum zoom-out value for the battle camera yet again, this time dynamically based on the size of the battlefield. (In other words: there is a higher maximum zoom-out level for big maps than for small ones.)

-- nearly doubled the speed of player-directed camera zoom.

-- you can now only zoom one level at a time.

-- the game now records the game version version when saving a log file.

-- fixed: the game would sometimes fail to update the unit library for test mode when changing campaigns in the campaign editor.

-- fixed: the game would remain paused and in combat mode after canceling a self-move attack due to detecting a blocked movement path.
Title: Re: A new engine!
Post by: CraigStern on January 21, 2020, 01:59:10 PM
Put together and submitted my second publisher pitch for Together in Battle. I'm not expecting anything to come of it, but at a minimum, it's good practice for talking about the game.

-- fixed: the game was sometimes checking against lists of required attributes for elements of a proc gen character when it should have been checking against lists of excluded attributes, occasionally producing characters with inconsistent characterization (e.g. religious characters who believe in no one and audibly give thanks to "no one" for their victories).

-- fixed: the new victory box auto-looting message was appearing even in maps where auto-looting was not turned on.

-- fixed: the title screen would not apply loaded music volume settings to the title screen music upon first loading up.

-- fixed: the cut scene narration "text darkener" element is now invisible whenever the background is flat black.
Title: Re: A new engine!
Post by: CraigStern on January 22, 2020, 04:54:07 PM
Booked myself a booth for PAX East--looks like I'll be showing off the new game to the public for the first time at the end of February! :D

In the meantime, progress:

-- the game now gives you the option to turn on a battlefield grid. (It's ugly, IMO--but people seem to want it, so...)

-- you can now right-click units in the map editor to instantly rotate them clockwise (hold Shift to instead rotate counter-clockwise with each click).

-- you can now left-click empty tiles in the map editor while the unit properties window is open to instantly populate the window with that tile's coordinates for easier repositioning of characters and objects.

-- halved the size of the unit properties and light properties windows in the map editor so they don't obstruct the screen.

-- particles can now be spawned in the map editor! Smoke ring particles now accompany clicks to reposition, and other particle effects now accompany placement of new lights and units, as well as removal of lights and units.

-- removed the (admittedly annoying) "swoosh" noise from camera zoom in the map editor.

-- doubled the speed of camera zoom in the map editor.

-- when creating a new map or opening an existing one, the camera in the map editor now auto-adjusts its zoom level (and maximum zoom) proportionally to the size of the map created or opened so as to better see the whole thing.

-- added keyboard shortcuts for zoom in the map editor: Alt + and Alt -.

-- fixed: changing armies in the map editor was sometimes not causing the unit to palette swap correctly.
Title: Re: A new engine!
Post by: CraigStern on January 23, 2020, 02:33:12 PM
Dealt with FedEx on the phone last night after they failed for two straight days to deliver my new dev computer (which I need to record the new game's announcement trailer!) Hopefully, they'll deliver it to a nearby store so I can just pick it up tonight. In other news, I booked a flight to Boston for PAX East, arranged housing, and designed a 5' x 9' banner for the new game and placed an order for it with my usual banner manufacturer.

Meaaaaaaaanwhile, in actual game development:

-- you can now turn off Combat Zoom-in within the game settings menu.

-- extended the mouseover area for stat icon tooltips in the stat growths and stats screens in the character creator.

-- the map editor now checks to ensure that there are at least two armies before letting you exit the armies sub-editor--and if there are not, it now tells you that the map must have at least two armies.

-- when you try to exit the map editor, it now checks to ensure that there is at least one character on the map. If there is not, the editor gives you a warning and an opportunity to correct the issue before exiting.

-- implemented try/catch error handling when creating placeholder graphics for new player campaigns, to see if this addresses an issue with the game simply stopping in place of opening a newly created player campaign.
Title: Re: A new engine!
Post by: CraigStern on January 24, 2020, 08:45:50 AM
I've updated the Telepath Tactics Special Edition backer demo last night with all the improvements implemented this week.
Title: Re: A new engine!
Post by: CraigStern on January 24, 2020, 03:15:22 PM
-- fixed: the outer bounds of the game's weather particle emitter did not scale along with camera zoom-out, meaning that the edges of it became visible once the camera zoomed out sufficiently.

-- fixed: the method for parsing conditions in maps would crash the whole program if it encountered formatting errors. It now handles errors much more gracefully.

-- fixed: for classes with no growth requirements, the game would always treat their growth requirements as unmet when generating characters without a forced class.

-- fixed: the character generator was missing failsafe "default" classes for spriggats and spirits.
Title: Re: A new engine!
Post by: CraigStern on January 25, 2020, 08:56:56 PM
-- the recruitment screen now uses buttons to show you character skills, and accounts for the effects of equipped weapons in the skill button tooltips!
Title: Re: A new engine!
Post by: CraigStern on January 27, 2020, 02:44:40 PM
-- the recruitment screen now uses buttons to show you a recruit's inventory so you can mouse over items to see what they do.

-- the tab button now replicates the function of the Space Bar as a "next character" hotkey.

-- the "next character" function now returns the camera to focus on the deployment tiles when you've panned around during deployment.

-- fixed: the game would not save a log if 'L' was pressed during an AI turn in battle.
Title: Re: A new engine!
Post by: CraigStern on January 28, 2020, 05:43:02 PM
-- new script action: ShowTalking. Adds a talking symbol to the named character or portrait (or, if parameter is left blank, clears talking symbols from all all characters or portraits). One parameter: character name or portrait reference name. Note: when this action is called, the game will not auto-add talking symbols for the current branch of dialogue.

-- added sound effects to the deployment screen.

-- assigned missing facial expressions to proc gen "likes" dialogue.

-- rewrote the scripting on checking for plot events.

-- improved the scripting on the first major plot event dialogue.

-- fixed: generated dialogue was using outdated formatting for the AddPortrait actions, resulting in characters no longer sporting the correct facial expressions.

-- fixed: nighttime events affecting food stores didn't trigger animations in the info bar.

-- fixed: loading a new dialogue tree via LoadConv was not auto-clearing the actions queue.

-- fixed: the game would malfunction at the conclusion of a character's attack bark if combat zoom-in had been turned off.

-- fixed: level-ups would interrupt the conclusion of a combat sequence if combat zoom-in had been turned off.
Title: Re: A new engine!
Post by: CraigStern on January 29, 2020, 05:04:28 PM
-- the game now displays a "Missed!" message when an attack rolls below zero, or otherwise fails to hit a target that has a Dodge stat of 0 or less.

-- improved the formula governing how quickly visual effect projectiles move onscreen.

-- fixed: a bug in the way attack rolls were calculated allowed attacks should not have possibly been able to hit to land anyway.

-- fixed: when an AI-controlled character died to a counterattack, the game would accidentally call the determineNextMove() method twice in the AI handler class, resulting in two enemies moving concurrently after the end of the combat sequence.

-- fixed: the second character portrait during two-character camp activities was being placed overlapping the first character portrait.
Title: Re: A new engine!
Post by: CraigStern on January 30, 2020, 04:16:37 PM
Spent today dealing with PAX East logistics. Not my favorite, but it had to be done!
Title: Re: A new engine!
Post by: CraigStern on January 31, 2020, 05:06:16 PM
Felt a bit demoralized earlier today, but plucked myself up by remembering my Secret Long-term Plan. :)

-- the game can now store and retrieve significant NPCs relevant to a given generated character: individual family members, say, or old friends.

-- the game now generates family members for a character, complete with unique names and how the character feels about them, based on their relevant bio details when they are created.
Title: Re: A new engine!
Post by: CraigStern on February 03, 2020, 05:27:51 PM
-- recreated battlefield pop-up objects in 3D so they remain onscreen in a fixed position relative to the battlefield even when the camera pans (thereby fixing an issue where damage pop-ups from enemy attacks would vanish offscreen the moment the camera panned in response to a counterattack), while also ensuring that they render above everything else in the scene (instead of popping up through walls and level geometry). It took a little while to get this to work with all of Unity's finicky systems, but now it's working! :)

-- did the same thing for various animated bars in battle so they don't slide around with the camera when panning around.

-- fixed: the level-up screen was still referring to equipment masteries as just "masteries."
Title: Re: A new engine!
Post by: CraigStern on February 04, 2020, 04:05:21 PM
-- the dialogue menu reply buttons now accommodate somewhat longer replies by dynamically shrinking the font size.

-- tweaked the placement of the new static health bars on mouseover.

-- implemented counters to track groups of recruits as they're being generated in the recruitment interface. The game now uses these to keep groups of recruits balanced: no group is allowed to be too overwhelmingly psy-based or strength-based, nor is it allowed to be too overwhelmingly male or female.

-- new script action: NPCsToList. Creates a list of names of NPCs (relatives, childhood friends, etc.) that were generated for a specified generated character. Seven parameters--only the first two are required, the rest impose requirements to narrow the list: (1) Character Name, (2) List Name, (3) Relation, (4) Location, (5) Species, (6) Gender, and (7) Is Alive (true or false).

-- new script action: SetStringByNPC. Finds an NPC (e.g. relative or childhood friend) for a specified generated character, then sets a custom string variable equal to one of that NPC's attributes. Four parameters: (1) Variable Name, (2) Character Name, (3) NPC Name, and (4) Attribute Type.

Supported Attribute Types: first name, nickname, relation, location, alive, species, gender, and associated feeling. (If nickname is chosen and an NPC has no nickname, the game will return the NPC's first name instead.)
Title: Re: A new engine!
Post by: CraigStern on February 05, 2020, 03:12:31 PM
Gearing up to publicly announce Together in Battle tomorrow! :D

In other news:

-- updated the CombineLists script action to support combining more than two lists in a single go. To combine three or more lists, delimit the additional list names in the second parameter with vertical bars (|).

-- combined the Good Letter and Bad Letter evening events into a single Letter event that is good or bad based upon who wrote the character. The letter-writer is one of that character NPCs, chosen at random, and the event makes them happy or upset based upon how good their relationship is with that NPC.

-- random evening events are now more likely to occur.
Title: Re: A new engine!
Post by: CraigStern on February 06, 2020, 03:16:09 PM
I announced (https://sinisterdesign.net/announcing-together-in-battle/) Together in Battle (https://sinisterdesign.net/products/together-in-battle/)! As expected, spreading around the announcement and getting the game's new official page set up took pretty much the entire day. Still, I'm rather satisfied with the effort! Going to see if I can fix a couple of small bugs in the recruitment interface before the day's over.