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

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

CraigStern

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

CraigStern

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

SmartyPants

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.

CraigStern

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

CraigStern

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

CraigStern

#351
-- 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):
  • Species,speciesName -- Human, Spirit, Lissit, Spriggat, Shadowling, or Golem.

  • Gender,genderName -- for golems, use Bronze or Stone here for genderName.

  • Class,className -- use the unpromoted version of the character's class here, even if the character is promoted!

  • SkinPalette,paletteNumber -- for humans: 0 - light-skinned , 1 - medium complexion , 2 - dark skinned , 3 - extremely pale.

  • EyePalette,paletteNumber -- for humans: 0 - green eyes , 1 - dark brown eyes , 2 - brown eyes , 3 - blue eyes , 4 - amber eyes.

  • HairPalette,paletteNumber -- for humans: 0 - brown hair , 1 - black hair , 2 - red hair , 3 - blond hair , 4 - auburn hair , 5 - dark brown hair , 6 - straw-colored hair , 7 - gray hair.

  • Head,headShape -- headShape = 1-9 for humans or spirits; 1-12 for lissit; 1-8 for spriggats; or 1-3 for golems. For shadowlings, headShape must always be 1.

  • HairHorns,hairType(xPosition_yPosition_scale) -- hairType = 1-12 for male humans; 1-15 for female humans; 1-6 for spirits; 1-12 for lissit (these define the character's spines); horn1-15L for spriggats (this determines the shape of one of the character's horns); or smokeplume1-12 for shadowlings (this determines the character's plume shape). Leave everything after the comma blank if a golem.

  • HairHorns2,hairType(xPosition_yPosition_scale) -- leave everything after the comma blank if not a spriggat or a shadowling with horns! If a spriggat, it is recommended that you use the same hairType as you did with HairHorns above, though the positioning will be different, as this is the horn on the other side of the head. (Speaking of which: use an R on the end instead of an L.) If a shadowling, hairType here determines what horn(s) they have; use horns1-15.

  • EyeL,eyeXL(xPosition_yPosition_scale) -- X = 1-6 for humans or spirits; 1-7 for spriggats; 1-12 for shadowlings. Leave blank after the comma if lissit--the left eye is never visible in lissit portraits--or if a golem (golems have only one eye)!

  • EyeR,eyeXR(xPosition_yPosition_scale) -- X = 1-6 for humans or spirits; 1-12 for lissit; 1-7 for spriggats; 1-12 for shadowlings; 1-9 for stone golems, and 1-4 for bronze golems.

  • Nose,noseX(xPosition_yPosition_scale) -- X = 1-10 for humans; 1-7 for spirits; for spriggats, this is always 1. For shadowlings, this stores the shadowling's hand pose: use hands1-16. Leave blank after the comma if lissit or golem.

  • Mouth,mouthX(xPosition_yPosition_scale) -- X = 1-8 for humans; 1-8 for female spirits; 1-12 for male spirits; 1-8 for lissit (determining snout shape as well); 1-7 for spriggats; 1-16 for shadowlings; or 1-3 for stone golems. Leave blank after the comma for Bronze golems, as they do not have mouths.

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

CraigStern

-- finished writing unique victory barks for the entire cast of Telepath Tactics characters.

bugfartboy

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?

CraigStern

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

bugfartboy

#355
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)

CraigStern

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

CraigStern

#357
-- 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!

CraigStern

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

CraigStern

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