News:

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

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

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.

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

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

CraigStern

-- the ForLoop action (discussed in the last post) 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.

CraigStern

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.

CraigStern

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

CraigStern

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