
4/7 animations for Benjamin are done. Then we have 7 more coming for Harold – then I can work on new content and levels. Mainly, larger scale battles with 6 units to command.
Gamepad Support is finished. Save & Load system is about 80% there, it’s actually quite a hassle.
We’re using JSON to save file data, and there’s just a lot to account for.
{
"SaveIndex": 0,
"CurrentSceneName": "_Road_To_Fort",
"LocationName": "Fort Valestone - Entry Road",
"ChapterTitle": "Chapter 1 - Fort Infiltration",
"PlayerPosition": {
"X": -41.5519943,
"Y": 0.544200361,
"Z": 0.0
},
"GlobalVariables": {
"Ch1FortInfiltration.IsNewToTheFort": false,
"Ch1FortInfiltration.KilledChristian": true,
"Ch1FortInfiltration.ReceivedRope": false,
"Ch1FortInfiltration.LiedAboutBestingLtRoberts": false,
"Ch1FortInfiltration.DefeatedHarold": false,
"Ch1FortInfiltration.HeardDorchesterSobStory": false,
"Ch1FortInfiltration.FoughtHaroldWithoutItems": false,
"Ch1FortInfiltration.BeatHaroldQuickly": false,
"Ch1FortInfiltration.FinishedTour": false,
"Ch1FortInfiltration.ReceivedCommandersKey": false,
"Ch1FortInfiltration.ReceivedDungeonKeys": false,
"Ch1FortInfiltration.FinishedWithCommandersRoom": false,
"Ch1FortInfiltration.MetTheFirstLadyPrisoner": false,
"Ch1FortInfiltration.MetTheSecondLadyPrisoner": false,
"Ch1FortInfiltration.MetBenjamin": false,
"Ch1FortInfiltration.SpokeWithLadyPrisonerAgain": false
},
"CompletedCutscenes": [
"CarriageRide",
"ExitCarriageCutscene"
],
"CurrentRoster": [
"Artur",
"Zenovia",
"Penelope",
"Jacques"
],
"PlayerData": [
{
"Name": "Artur",
"Age": 33,
"Appearance": "",
"BornIn": "",
"Occupation": "Guild Leader & Swordsman",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": {
"UnitType": "Unmounted",
"WalkSpeed": 6.59,
"RunSpeed": 8.27,
"MoveAnimationSpeed": 1.5,
"Experience": 99,
"CurrentOutfit": "Default",
"Stats": {
"Movement": {
"Base Value": 14,
"Growth Rate": 0
},
"MaxHealth": {
"Base Value": 25,
"Growth Rate": 65
},
"Strength": {
"Base Value": 12,
"Growth Rate": 90
},
"Speed": {
"Base Value": 10,
"Growth Rate": 50
},
"Skill": {
"Base Value": 18,
"Growth Rate": 85
},
"Magic": {
"Base Value": 3,
"Growth Rate": 25
},
"Luck": {
"Base Value": 8,
"Growth Rate": 60
},
"Resistance": {
"Base Value": 6,
"Growth Rate": 40
},
"Defense": {
"Base Value": 16,
"Growth Rate": 0
},
"Weight": {
"Base Value": 16,
"Growth Rate": 0
},
"Constitution": {
"Base Value": 20,
"Growth Rate": 0
},
"Morale": {
"Base Value": 0,
"Growth Rate": 0
}
},
"WeaponProfiency": {
"Sword": "D"
},
"MagicProfiency": {},
"WeaponsInInventory": {
"0": {
"WeaponType": "Sword",
"DescriptionBroken": "A broken greatsword, no longer very useful inc ombat. A blacksmith will be able to repair it.",
"MeleeSound": "swosh-42",
"CastingSound": null,
"RequiredRank": "D",
"Weight": 18,
"CurrentDurability": 30,
"MaxDurability": 30,
"AttackRange": {
"MinRange": 1,
"MaxRange": 1
},
"Stats": {
"Damage": 15,
"Hit": 55,
"CriticalHit": 40,
"MinRange": 1,
"MaxRange": 1
},
"BrokenStats": {
"Damage": 3,
"Hit": 15,
"CriticalHit": 40,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Steel Broadsword",
"ItemType": "Weapon",
"Description": "A heavy, large steel blade capable of serious damage.",
"Pricing": {
"Cost": 0,
"SaleValue": 0
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_13"
}
},
"1": {
"WeaponType": "Sword",
"DescriptionBroken": "A broken steel sword, nearly useless in battle. A blacksmith can repair it.",
"MeleeSound": "swosh-05",
"CastingSound": null,
"RequiredRank": "D",
"Weight": 8,
"CurrentDurability": 35,
"MaxDurability": 35,
"AttackRange": {
"MinRange": 1,
"MaxRange": 1
},
"Stats": {
"Damage": 12,
"Hit": 70,
"CriticalHit": 9,
"MinRange": 1,
"MaxRange": 1
},
"BrokenStats": {
"Damage": 0,
"Hit": 45,
"CriticalHit": 9,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Steel Sword",
"ItemType": "Weapon",
"Description": "A durable steel sword.",
"Pricing": {
"Cost": 1000,
"SaleValue": 600
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_4"
}
},
"2": {
"WeaponType": "Sword",
"DescriptionBroken": "A broken fencing sword with no utility. Worthless in combat, must be taken to a blacksmith for repair.",
"MeleeSound": "swosh-11",
"CastingSound": null,
"RequiredRank": "D",
"Weight": 3,
"CurrentDurability": 25,
"MaxDurability": 25,
"AttackRange": {
"MinRange": 1,
"MaxRange": 1
},
"Stats": {
"Damage": 8,
"Hit": 75,
"CriticalHit": 8,
"MinRange": 1,
"MaxRange": 1
},
"BrokenStats": {
"Damage": 0,
"Hit": 60,
"CriticalHit": 8,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Rapier",
"ItemType": "Weapon",
"Description": "A slim, agile fencing sword oft used by court knights in duels.",
"Pricing": {
"Cost": 0,
"SaleValue": 0
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_11"
}
}
},
"ConsumablesInInventory": {
"3": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
}
},
"ValuablesInInventory": {},
"KeyItemsInInventory": [],
"UnitPrefabPath": null
}
},
{
"Name": "Jacques",
"Age": 28,
"Appearance": "",
"BornIn": "",
"Occupation": "Swordsman",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": {
"UnitType": "Unmounted",
"WalkSpeed": 6.0,
"RunSpeed": 7.8,
"MoveAnimationSpeed": 1.3,
"Experience": 0,
"CurrentOutfit": "Default",
"Stats": {
"Movement": {
"Base Value": 12,
"Growth Rate": 0
},
"MaxHealth": {
"Base Value": 25,
"Growth Rate": 6
},
"Strength": {
"Base Value": 18,
"Growth Rate": 90
},
"Speed": {
"Base Value": 7,
"Growth Rate": 35
},
"Skill": {
"Base Value": 11,
"Growth Rate": 55
},
"Magic": {
"Base Value": 2,
"Growth Rate": 10
},
"Luck": {
"Base Value": 5,
"Growth Rate": 2
},
"Resistance": {
"Base Value": 7,
"Growth Rate": 65
},
"Defense": {
"Base Value": 15,
"Growth Rate": 80
},
"Weight": {
"Base Value": 18,
"Growth Rate": 0
},
"Constitution": {
"Base Value": 25,
"Growth Rate": 0
},
"Morale": {
"Base Value": 0,
"Growth Rate": 0
}
},
"WeaponProfiency": {
"Sword": "B"
},
"MagicProfiency": {},
"WeaponsInInventory": {
"0": {
"WeaponType": "Sword",
"DescriptionBroken": "A broken greatsword, no longer very useful inc ombat. A blacksmith will be able to repair it.",
"MeleeSound": "swosh-42",
"CastingSound": null,
"RequiredRank": "D",
"Weight": 18,
"CurrentDurability": 30,
"MaxDurability": 30,
"AttackRange": {
"MinRange": 1,
"MaxRange": 1
},
"Stats": {
"Damage": 15,
"Hit": 55,
"CriticalHit": 40,
"MinRange": 1,
"MaxRange": 1
},
"BrokenStats": {
"Damage": 3,
"Hit": 15,
"CriticalHit": 40,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Steel Broadsword",
"ItemType": "Weapon",
"Description": "A heavy, large steel blade capable of serious damage.",
"Pricing": {
"Cost": 0,
"SaleValue": 0
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_13"
}
}
},
"ConsumablesInInventory": {
"1": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
},
"2": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
}
},
"ValuablesInInventory": {},
"KeyItemsInInventory": [],
"UnitPrefabPath": null
}
},
{
"Name": "Penelope",
"Age": 21,
"Appearance": "",
"BornIn": "",
"Occupation": "Archer",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": {
"UnitType": "Unmounted",
"WalkSpeed": 6.0,
"RunSpeed": 8.48,
"MoveAnimationSpeed": 1.5,
"Experience": 0,
"CurrentOutfit": "Default",
"Stats": {
"Movement": {
"Base Value": 16,
"Growth Rate": 0
},
"MaxHealth": {
"Base Value": 15,
"Growth Rate": 45
},
"Strength": {
"Base Value": 5,
"Growth Rate": 30
},
"Speed": {
"Base Value": 13,
"Growth Rate": 75
},
"Skill": {
"Base Value": 11,
"Growth Rate": 80
},
"Magic": {
"Base Value": 4,
"Growth Rate": 25
},
"Luck": {
"Base Value": 10,
"Growth Rate": 70
},
"Resistance": {
"Base Value": 7,
"Growth Rate": 55
},
"Defense": {
"Base Value": 8,
"Growth Rate": 35
},
"Weight": {
"Base Value": 9,
"Growth Rate": 0
},
"Constitution": {
"Base Value": 7,
"Growth Rate": 0
},
"Morale": {
"Base Value": 0,
"Growth Rate": 0
}
},
"WeaponProfiency": {
"Bow": "B"
},
"MagicProfiency": {},
"WeaponsInInventory": {
"0": {
"WeaponType": "Bow",
"DescriptionBroken": "Broken custom bow",
"MeleeSound": "",
"CastingSound": null,
"RequiredRank": "C",
"Weight": 4,
"CurrentDurability": 35,
"MaxDurability": 35,
"AttackRange": {
"MinRange": 2,
"MaxRange": 2
},
"Stats": {
"Damage": 20,
"Hit": 75,
"CriticalHit": 15,
"MinRange": 2,
"MaxRange": 2
},
"BrokenStats": {
"Damage": 0,
"Hit": 0,
"CriticalHit": 15,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Penelope's Bow",
"ItemType": "Weapon",
"Description": "A custom bow that was gifted to Penelope",
"Pricing": {
"Cost": 700,
"SaleValue": 350
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_91"
}
}
},
"ConsumablesInInventory": {
"1": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
},
"2": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
}
},
"ValuablesInInventory": {},
"KeyItemsInInventory": [],
"UnitPrefabPath": null
}
},
{
"Name": "Zenovia",
"Age": 27,
"Appearance": "",
"BornIn": "",
"Occupation": "Mage",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": {
"UnitType": "Unmounted",
"WalkSpeed": 5.29,
"RunSpeed": 8.0,
"MoveAnimationSpeed": 1.6,
"Experience": 0,
"CurrentOutfit": "Default",
"Stats": {
"Movement": {
"Base Value": 15,
"Growth Rate": 0
},
"MaxHealth": {
"Base Value": 25,
"Growth Rate": 45
},
"Strength": {
"Base Value": 4,
"Growth Rate": 30
},
"Speed": {
"Base Value": 12,
"Growth Rate": 70
},
"Skill": {
"Base Value": 10,
"Growth Rate": 65
},
"Magic": {
"Base Value": 15,
"Growth Rate": 90
},
"Luck": {
"Base Value": 8,
"Growth Rate": 7
},
"Resistance": {
"Base Value": 11,
"Growth Rate": 85
},
"Defense": {
"Base Value": 6,
"Growth Rate": 35
},
"Weight": {
"Base Value": 11,
"Growth Rate": 0
},
"Constitution": {
"Base Value": 11,
"Growth Rate": 0
},
"Morale": {
"Base Value": 0,
"Growth Rate": 0
}
},
"WeaponProfiency": {},
"MagicProfiency": {
"Elemental": "D",
"Divination": "D",
"Ceremonial": "D",
"Hedge": "D"
},
"WeaponsInInventory": {
"0": {
"WeaponType": "Grimiore",
"DescriptionBroken": "You've exhausted usage of this spell for this battle. You need time to recharge your spiritual energy.",
"MeleeSound": "",
"CastingSound": "Buff_Haste_01",
"RequiredRank": "D",
"Weight": 2,
"CurrentDurability": 25,
"MaxDurability": 25,
"AttackRange": {
"MinRange": 1,
"MaxRange": 2
},
"Stats": {
"Damage": 5,
"Hit": 72,
"CriticalHit": 5,
"MinRange": 1,
"MaxRange": 2
},
"BrokenStats": {
"Damage": 0,
"Hit": 0,
"CriticalHit": 5,
"MinRange": 0,
"MaxRange": 0
},
"Filename": null,
"ItemName": "Air Slash",
"ItemType": "Weapon",
"Description": "A beginner's guide to elemental magic focusing on the element of Air.",
"Pricing": {
"Cost": 1200,
"SaleValue": 600
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_71"
}
}
},
"ConsumablesInInventory": {
"1": {
"CanHeal": true,
"ActionToExecute": null,
"CurrentDurability": 0,
"MaxDurability": 0,
"Filename": null,
"ItemName": "Potion",
"ItemType": "Consumable",
"Description": "A serviceable alchemical remedy for wounds in battle.",
"Pricing": {
"Cost": 200,
"SaleValue": 50
},
"Icon": {
"AtlasPath": "Assets/_Sprites/GUI/UI Materials/Icons/assorted icons/heartamulet.spriteatlas",
"SpriteName": "heartamulet_43"
}
}
},
"ValuablesInInventory": {},
"KeyItemsInInventory": [],
"UnitPrefabPath": null
}
},
{
"Name": "Harold",
"Age": 28,
"Appearance": "",
"BornIn": "",
"Occupation": "Soldier",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": null
},
{
"Name": "Christian",
"Age": 0,
"Appearance": "",
"BornIn": "",
"Occupation": "",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": null
},
{
"Name": "Benjamin",
"Age": 30,
"Appearance": "",
"BornIn": "",
"Occupation": "Mounted Knight",
"Personality": "",
"Gender": null,
"Species": "Human",
"Skills": [],
"Fears": [],
"InnerConflict": "",
"Motivation": "",
"FurtherDetails": null,
"UnitData": null
}
],
"Levels": [],
"inGameTimer": 45.6608543
}
For any interested party on what save data looks like. Cheating would be pretty easy, since you can just modify the stats and experience as you please (though, I’ll probably obfuscate or encrypt those files).
Loading unit data like stats & inventory is done, but there’s more work for other edgecases. For instance, saving the state of our scripts that handle AI follow.
But, it should be done by Friday. If so, I’ll test and release a build on the weekend.
In other news, besides programming the new input system and save/load system, marketing stuff has kept me busy.
Running some Facebook ads, they’re doing pretty well. They’ve taken us from 200 Steam wishlists to 400, which is nice.
But, people hate:
- Giving out their emails to potentially spammy places
- Signing up to follow Kickstarters (unless they really like the project)
So, I’m having a rough time getting our mailing list #'s up. Somewhere around ~50 people in total.
Hoping to get that number up.
Anyway, the Kickstarter page is still being worked on. We’ve toiled too long on these battle sprites to not show em’ off, lol. There’s a few graphics that need edits and new graphics for character breakdowns are on the way. Definitely will be releasing a free demo along with it.
As for publishers, we’ll see. We had a great conversation with Deck13, but we couldn’t find a common ground to connect yet. I am particularly excited about our talks with DANGEN and Shiro Unlimited, though. Fingers crossed on that.
In any case, we can’t really afford to rest on our laurels. I am super excited about the prospects, but our Kickstarter is a go until we have something concrete.
Luckily, my background in web development makes mailing lists and email templates a piece of cake.
I sent our project over to Jollop – they’re an advertising service for Kickstarter campaigns. I hope we get to work together – if not, I’ll have to roll up my sleeves.
That’s it from me, by this time next week – we should know for sure what’ll happen in the business area. I spent too long focused on code – I neglected the marketing stuff. Build it and they will come is a horrible strategy lol