Welcome to the new Sinister Design forums!

Main Menu

A new engine!

Started by CraigStern, June 05, 2016, 05:39:11 PM

Previous topic - Next topic


-- 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:


-- 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.


-- 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.


-- 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.


-- 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.


-- 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.


-- 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.)


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!


-- 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.


-- 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.


-- 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.


-- 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.


-- 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.


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.


-- 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.


-- 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:


-- 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:


-- 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:


This can be used in a SetVal action to obtain a random position in a given list, like so...


...and then the val can be used as part of a LIST{} special character to display the randomly chosen entry!


(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.)