[Devlog] ink & Paper Engine: Lord Ragnavaldr and the Wishing Stone


Paper Engine
Paper Engine is a middleware tying together Ink by Inkle & Unity Engine, but with a lot of extras. Ink is typically a text-based game, with very limited artwork & game systems. Paper Engine’s goal is to add in a lot more game elements to writing in Ink, without you ever having to actually leave Ink!
It is also designed to be fulled moddable, allowing the player to create their own stories and games using all the supported features of Paper Engine. Features will initially support our own game, Lord Ragnavaldr and the Wishing Stone, and later to support our other game * Away Mission * with Paper Engine 2.0, but depending on demand may receive additional features inbetween.

“Lord Ragnavaldr and the Wishing Stone”

A story about an elderly knight at a time of endless civil war who goes on a delusional personal quest to find a magical stone based only on a legend, a peaceful dream, and a dark desire to end the hopelessness that has put him on the edge of total destitution of the mind. A story set in

The World of Emergence

Inbetween "Paper Engine" & our game “Lord Ragnavaldr and the Wishing Stone”, is the World of Emergence. This is a large amount of generic content, world building, hextiles, characters, and story which help to create Emergent Gameplay. Ink is a scripting language which specializes in dynamic storytelling - weaving together bits and pieces of story in a very powerful way so no single encounter is ever the same.

The Weaver’s Loom

To create our game, "Lord Ragnavaldr and the Wishing Stone", we use The Weaver’s Loom, a set of Content Creation Tools which we will also release as Mod Tools. The Weaver is like a Game Master,

Think of it this way:

Ink is the Scripting Language. The book you write in to author your stories.
Paper is the Gameplay (Hexmap, Scene, Dialogue Choices, Pathfinding, Dice Rolling) which you call in Ink.
Emergence is a world of content which comes with the game. You can make your own stories in Emergence - a Medieval High Fantasy Post-Apocalyptic world of Knights, Magic, & Horror. You can edit the world, use just the artwork, or scrap it all and do your own worldbuilding by example.
The Weaver’s Loom is the Game Master’s mod tools to help set up the Paper Engine components of the game. Tools such as Procedural Hexmaps, Scene Management, Character Creation, Emergent Gameplay Editing, and more. The result of work in The Weaver’s Loom outputs .Ink files or Paper Engine Commands (in order) which you can copy/paste into your story.

Paper Engine 1.0

3 Likes

I gotta goto bed. Might update some more tomorrow.

But yes!
I am still alive & back at it!
4938689--479339--lemongrab 1000 yrs dungeon.gif

1 Like

The lead artist was not satisfied with how the old characters looked and wanted to something new.

I have to say, I am very impressed with the results.

4949780--480956--Old or New 2.png

And the hero, without helmet.

4949780--480959--LR05.png

This was actually really fun for me, as I am the resident ‘expert’ on medieval realism, so we worked together to make sure it looked great (100% artist) and it was actually realistic (my only real input). You wouldn’t believe how many fantasy armors and weapons are just so ridiculously unrealistic or make absolutely no sense whatsoever.

One of the reasons for the upgrade is how we agreed the old style is a bit more simpler/happy/cartoony, and our story & game-feel is a lot more dark with more of a focus on hyper-realism. The old style didn’t have the same weight as the story.

We still aren’t sure how much this increases scope per character drawn, but it is a necessity given how much more “weight” the characters give in the scene. Before, I felt like they were thin as paper moving them around in the scenes. Now, I can almost tangibly feel the weight of the character as I move them with the mouse. Almost like I’m playing with miniatures. If others feel the same during play (and they drag characters as part of input), this will be extremely important to helping give that tabletop roleplaying game “feel” that is one of my design goals. If not, that’s okay too. At least it means (IMV) that the characters are more “miniature” than “piece of thin paper”.

Idk why, but I can “feel” the weight when moving the character, like it’s physically heavier.
4949780--480962--move ragnavaldr.gif

I also feel like the new character style fits better with the Hexmap & Scene artwork.

4949780--480971--character-change.gif

The scope increase doesn’t just stop here though, with the graphics upgrade on the sprites. I’ve decided to do a massive change to the dice conflict system which I have never really been a fan of in the first place. I’ll add that in the next post, but it includes the likely addition of slight animation and more sprites per character overall. Still, it should fit in with the smaller scope, especially since (if it works out) it’ll be a change that’ll help speed the project along due to some simplification with how dice are rolled. The change also opens up a lot more design possibilities with using items & consumables.

We’ve completed our first character Idle set. Before, we just had the Idle & Combat poses. Now, we have 4 poses per character instead of the 2, and are using layers now.

Since you spend most of your time traveling, I really wanted to emphasize character’s traveling gear and traveling cloaks. Backpacks & hoods are removable layers, to separate when a character is traveling (movement) and when a character is at rest (such as at campfire or in a tavern).

Soon we’ll have our first animation with the “Combat - Attack” pose. More on that, and the new dice system, later! Soon!

Poses bold are completed.

  • Travel - Idle
  • Backpack, Hood
  • Action - Idle
  • Action - Combat
  • Action - Combat - Attack

New Female Knight

Before & After

4966949--483575--upgrade.png

Example scene of a small party traveling

I’ve been away for the week on vacation far away from home, without much access to the internet. Didn’t know I could survive an entire week without my phone & computer.

Sometimes you’ve got to unplug and recharge.
4981331--485765--homer relax.gif

I actually came home last night & made homemade beer pretzels & beer cheese before bed at, lol, 5pm.
Traveling is exhausting! Idk how medieval adventurers do it!

Couldn’t resist uploading these to facebook. Delicious! :wink:

I’m finally back to work today & getting ready for the next update!

1 Like

Thanks to a wonderful user on Scholagladitoria’s youtube channel, named Maxim, as well as others, I have a lot of my questions answered about armored combat & travel.

I won’t go too in-depth here until I flesh out everything in terms of game mechanics, but I am almost certain now I should have a few different combat skills, rather than just having one skill called “Combat”.

  • Armoured Combat
  • Unarmored Combat (or named to something else, like Dueling)
  • B̶a̶t̶t̶l̶e̶f̶i̶e̶l̶d̶ ̶C̶o̶m̶b̶a̶t̶ ̶(̶f̶o̶r̶ ̶h̶u̶g̶e̶ ̶b̶a̶t̶t̶l̶e̶s̶)̶
  • Monster Combat (fighting non-humanoids, like Dragons, Giants, etc.)
  • This skill also might be “defaulted” with a penalty. So if a character has no experience against monsters, maybe the skill is Unarmored Combat - 2 or something.*

My original combat formula was something along the lines of…

  • [Combat Skill Dice Roll] + Armor Bonus + Weapon Modifier (vs Opponent Armor) + Reach Bonus + Other Modifiers (Character Traits, Environmental Bonuses, Exhaustion, Magical Buff/Debuff, Story-driven modifiers, Hope/Depression, etc.)
  • Possibly an Accumulating Exhaustion Penalty each round of combat -1, -2, -3, -4, etc. but with character traits to ignore or reduce the penalty (ex. Exhaustion Penalty every other round, instead of every round) or an Endurance value (A Penalty after endurance reaches < 0).

GAME DESIGN
It’s a lot like making a PnP Game (which is great!)

Combat Dice are not determined exclusively based on Skill, but are given based on the character as a whole. The type of dice will also be determine by these factors. For example,

  • Experienced Knight: 3D4 - 3D4 is like a 1D12, but much much more stable and reliable, to express the experience of the knight. They cannot really goof (minimum of 3) and will have a much more consistent medium (less likely to get a 12 than a 1D12).
  • Barbarian: 1D12 - Unlike the reliable 3D4, the 1D12 is more wild. This would be an extremely strong character with skill, but lacking the experience of someone trained their entire life for combat. They are just as capable of goofing up entirely getting themselves killed in the first round (1) as they are doing some exceptional feat of strength (12).
  • Untrained, Dumb Giant, but he’s still a Giant: 1D20 - He is dumb but can smash you good if you’re unlucky.

And combining the two.

  • Experienced Barbarian: 1D4 + 1D12

For wounds/health, I have dabbled between two designs. Both are very similar.
Initially, every character has 2-3 health points. You can be hurt, wounded, hurt twice, and after that are dead.

Wounds are given based on two factors

  • Levels of Success - After success, additional levels are given by increments of 5.
  • Determining the Victim - Since you can commit multiple characters to the same conflict and dice are totalled on both sides, the one wounded is the lowest individual skill roll, the lowest individual skill roll + armor bonus, or the lowest roll total with all modifiers included.

What this means is the more experienced the character, the less risky it is for them to enter a conflict. In any conflict, the one most likely to make a mistake would be the one with the lowest skill. For example,

SKILL: Stealth
CHARACTERS: Thief (1D8), Assassin (1D12), Servant (1D4)
Any of the 3 can have the lowest score. So the Assassin could be the loser in the conflict. Despite their experience, they were caught! However for the most part, the Servant is most often going to be the loser.

This brings more strategy for the PLAYER when determining who they commit to a conflict. The more characters you commit, the more likely you’ll succeed. However the more low skill characters will be risking much more than the higher skilled ones. Items also play an important role (both equipment & consumables). So you could send only one character and use a lot of gear & consumables, but if they fail they would be the only loser in the conflict. Items also are used pre & post rolling, as well as other things like possibly re-rolling, consuming items to boost a roll to succeed, automatic success, etc. Items can also allow you to roll an entirely different conflict (story snippet).

This is why I believe it is appropriate to say the gameplay includes both Character Management & Item Management.

The more I think about it, the more I like the whole idea of an Endurance value for all characters. Like a Stat (currently my game has no stat system, just skills).

Endurance plays a big factor in a lot of things

  • Long-distance Travel
  • Encumbrance & Inventory Management
  • Overexertion (Traveling more than your daily rate)
  • Combat (How quickly do you get exhausted when combat doesn’t end quickly)
  • Energy-consuming Actions (besides Combat, which is treated slightly differently than other skill rolls)
  • Rest & Recovery (Additional rest beyond the normal night’s sleep to recover Endurance).

It’s hard to resist that becoming an important character value in our game.

And since I’m really wanting to go into a bit of the whole insanity/cthulhu type stuff, as well as loving and being inspired by Darkest Dungeon,

Stress value, which effects the personality & procedural storytelling events. A high stress character who fails a sanity save might steal your stuff and run off, or attempt to murder another party member.

It is important to note that unlike Curious Expedition or Neo Scavenger, I will never have a story snippet event where character permadeath is instant. As a game designer I think that is absolutely horrible game design and as a gamer think it’s really stupid and unfun. It deprives the player agency and choice. Instead, it will be determined by more dice rolling, conflict managing (commit characters / items), item sacrifice, etc. It will be treated like any other conflict.

Right now I’m designing the core gameplay of Lord Rangavaldr & the Wishing Stone.

In large boxes are possible choices (Conflicts), general skills or actions you can always use, my first pass at how I might setup the GUI (drag & dropping character sprites onto conflict GUI objects).

So before I started with my first Encounter, I wanted to come up with all the skills in the game (so I can write against them).

This is literally just designing the PnP tabletop part of the game. Not much with video games, but that makes sense, as my design goal is for this game to be like bringing your tabletop rpg experiences to life. It took me the entire day of work (including working through lunch), looking at pretty much every possible skill I could find in all PnP games (GURPS is a big help here, heh) and although it probably needs some polish, I think I’ve got it down for the most part.

I don’t really think Attributes are all that valuable, when making a realistic game. Real life is more about Skills than anything else. However, I have generalized skills / abstract skills (Attributes) which reflect an overall sense or understanding of something, and then subskills or specializations (Skills) which are just another layer of skills.

So the character will roll their dice for both Attribute + Skill.

STEALTH DICE + STEALING DICE + Modifiers vs TN
STEALTH DICE + STEALING DICE + Modifiers vs Opponent’s PERCEPTION DICE + AWARENESS DICE + Modifiers.

Then I wrote a prototype story. I just wanted to randomly get an idea for something - anything - that could happen in the game. First idea that came to mind, and I went with it. “You are about to enter a Wild Forest tile, from a civilization tile. You hear a scream. What do you do?”

From there, the team artist (whose idea it was) came up with possible endings. From what idea, I began to think of how the Skills can interact with the Story, in a way where you “can do anything”. I changed it to “A Party Member heard something in the distance, but you didn’t.” I liked this better than the player hearing the scream. Quickly I was able to link all that cool procedural ink content & scripting power together. It is really easy to write conditions for the originating character to get upset/feel confident based on the other character’s reactions to the event, which is all based on the outcomes of their perception and knowledge rolls. Ink has a cool feature where you can check if a story bit has been accessed before or not - writing it all in the same line. If you’re interested in that, just check out the Power of Ink by Inkle

I think wrote possible interactions against the list of all Attributes.

Then thought of maybe how I’d make a GUI to represent all the information & possible choices.

My favorite part is in the Player having the autonomy to decide who, and if, they talk to. Just like I had in mind for Away Mission - including black boxed variables/traits (so a character could have a trait which makes you question the accuracy of their reported skill; meaning the chance of success isn’t necessarily accurate).

If the Player wants to only talk to their Elf, who has the highest perception, they can just click them, hear their opinion, and make a decision.

If the Player doesn’t even care about his party and knows he wants to dive into adventure, then he can just choose to Investigate, pick a skill, & assign characters.

It’s up to the Player how in-depth and strategic they want to be, in any given Encounter.

I’m NOT sure if this will be similar in all cases though. While in Away Mission the player takes on the role of Captain, in this game the player takes on the role of…well…Captain too, basically. However instead of listening to all the officers based on the treky scientific roles, the player has procedurally generated character personalities & class archetypes.

For procedural generating Characters, and giving them more depth at Character Creation, I like the idea of having predefined “life stages” which can impact the character’s skills and traits.

In GURPS - Goblins, when creating a character you randomly rolled what happened during adolescence, then chose what school you went to, and finally your apprenticeship. So you could be chewed up by dogs, boiled in tea, and then worn as a hat for several years, followed by attending religious school or school in someone’s basement, and finally becoming a chimney sweep.

In Shadowrun 5th Edition, I believe it was the character creation supplement that had additional rules to create characters based on what happened to them / what school they learned from, starting at childhood and well into adulthood. So you could grow up poor, then attend community college, and graduate in magery.

For Emergence, I am loving this concept for the following reasons

  • It allows for hand-crafted content “chunks” in the procedural generation.
  • It gives not just Skill differentiation, but chances at specific Traits, as well as some Lore, which all fit together in a reasonably explained way. “Oh, he was a priest of Trickster God before he became a Scholar. That explains why his stealth is two ranks higher than other knights as well as having the trait Devotion: Trickster God & Personality trait: Prankster.”
  • It provides personality, as well as commonality between characters of different archetypes. If all Priests went to religion school, and all Scientists went to logic school, and those had more conflicts than usual, it is a benefit and a defining story bit that Scientist4 used to be a Priest and gets along really well with them, receiving a bonus when grouped together! Something like that, anyway.
1 Like

I added another map function (which only took 1 minute) but the open source Unity UI extension I downloaded had a few problems I had to chase down. I probably should have just wrote my own code (and might when i polish the gui).

I then added an “EXPORT” button which parses all the logic of the procgen map the user created, and puts it into INK function, which is as simple to call as

~CurrentWorldMapID = CartersBestMapEver_GenerateMap(“Map_Adventure1”)

It’s important to note Line 3 & 4.

Line 3 is just a comment, written EXACTLY as the player writes their map name.
Line 4, is the Function, and that has to have a legal name.

Carter’s Best map ever "!@##$[1][ ][ ]]]]

This string does require a few things to happen to it, so the tool…

  • Eliminates illegal Spacing
  • Removes illegal characters
  • Capitalizes words where spacing is removed, for readability,
  • “Carter’s Best map ever”* becomes "CartersBestMapEver"

All of this allows the end user, a gamer, to create their own procgen maps using all Paper Engine’s procgen methods, test out how it looks, and upon being satisfied, exporting it into an INK function which they can easily use. In the end it will export to an Ink file, which holds all procgen map types for a particular World Region. The player will never even need to open the file.

Meaning… PLAYERS DON’T HAVE TO CODE! And they can’t mess up their functions, because it’s all safe as long as they use the Cartographer’s Desk gamemaster tool.


Next Episode:

  • Adding all the procgen methods I need, which is pretty quick & easy to do.
  • Create my own Adventure 1 Map, as I intend it (rough draft)
  • Start on the Scene/Story Tool, which allows content creators to create their own gameplay. Choosing backgrounds, adding props, setting character positions, adding conflicts, calling skill dice rolls, etc. Everything it takes to create an Encounter.

  1.   ↩︎

Procedural Map Generation takes a lot more effort than I really wish it did.

Primarily because I have to do everything myself, figuring out the algorithms I need and exactly how to get things done. Websites I found on procgen algorithms were surprisingly…awful. Almost everything I could find was overdone roguelike dungeons (very simple stuff) or teleological based on heightmaps and temperature. Alot of stuff either already knew or didnt need.

While heightmaps were interesting for river placement, it just didnt work out because my entire region is just hills and forest hills.

It’s okay I didnt find any cool techniques though. I already figured it out and worked step by step. I just need to now add all the algorithms/functions to my procgen map tool (shown in the above posts)

Today I took a new approach to my map, and I am really loving the new results.

Every black icon is a location of interest, and the map feels like it has a bunch of them - but none too close. Very happy, and very easy to adjust if in upcoming playtest I need to reduce/add more to get the right feel for exploration and adventure.

EMERGENT STORY

I am using alot of hex radius type stuff.

  • Place a town, fill in managed farmland around town; 3 hexes out
  • Place a village, same; 2 hexes out
  • Place Special Location 7+ hexes away from other locations. Grab all civilized locations (towns, villages, waypoint inns, castles - anywhere with ppl) within 10 radius, and add in special events based on location tags

For example, if a Goblin Cave is in radius proximity to two villages, both villages will have a special encounter added to their location. The game then grabs an event which fits all the criteria (tags).

Let’s say I created a new story event. Goblins raid a Town.
When the game asks for a story encounter, it searches for one based on the criteria TAGS.

  • GOBLIN
  • TOWN

It finds 3 total events with both those tags, and randomly choose the “Goblins Raid Town” event.

I might end up using tags to restrict some stories to specific “REGION” or only in parts of an “ADVENTURE”

  • Goblin
  • Town
  • KwaynosHills Region || GoblinSurgeCampaign

This way ANY adventure in the “KwaynosHills” REGION can access this story || ANY adventure# in the “GoblinSurge” campaign (no matter the region).

ENCOUNTERS:
ALTERED BY LOCATIONS IN PROXIMITY

Furthermore special locations can change the random encounter probability.

Say you have a “KwaynosHills GRASSLANDS” tile, with universal 0% for goblin encounters. No goblins here!

On top of that terrain, you add a Goblin Cave location. Within that hex is now 100% chance of goblins.
Then it radiates outwards.

  • 1 hex away = +90% chance goblins
  • 2 hexes away = +80% chance goblins
  • X hexes away = +(100% - 10% * X) chance goblins

I write events for every location pairing with every other location (and universal events for any location).

This way, every run in an adventure is different. In the first play through the goblins might be raiding a village when the player arrives.
In the second play through the goblins are summoning spirits in ancient ruins when the player arrives.
In the third play through the goblins are just spying on a castle but otherwise docile & the player has to succeed in a Tracking or Stealth skill roll during the spying event to know the direction of the cave. Otherwise just gotta explore to find it (or ignore it bc goblins are too weak to attack a castle so nothing happens unless the player goes on the offensive).

I dont update often so here is where I am at.

CURRENTLY IN PROGRESS: Procedural Generation Algorithms & Beta Map Generations for Adventure 1

TODO:

  • A few placeholder stories to test…
  • Random Encounter and a Story Director / TAG-based system to tie it all together to see if I can create emergent gameplay from procgen maps & locations interacting with each other.
  • Party Management GUI & System (with inventory system & GUI)
  • Camp / Rest stage (Movement on Map → Camp / Rest for Night —> Sleep —> Loop). This is the stage where you assign tasks to your party members, such as Crafting, Hunting, Storytelling to raise morale, Cleaning Wounds, etc. Also where you consume resources (food, water, shelter).
  • CONFLICTS (Gameplay - Dice System & Decisionmaking GUI) + 1 placeholder story w/ 1 conflict. This is everything from combat to any skill roll or decision tree (Go Left or Right?)
  • Scene Creator Game Tool (to make placement of sprites & gui’s coordinates easier)

Alpha complete when I finally get to CONFLICTS (Dice Rolling & Strategic decisionmaking), which will still be awhile since the MapGen & algorithms are taking a good bit to complete bc of how much logic is in placement of all the locations.

1 Like

Alright! I’m adding in all the procgen commands I’ve implemented in code, to the mapgen tool. Just finished adding the first one of many, filtering the noise to make clumps of tiles based on random noise.

I’ve got most of the procgen commands already, but have to make GUI’s for all of them like below.

5260157--526118--procgen more.gif

Once I add in the ones I need to make the first map, I’m just gonna stop there. The map tool won’t look like this later anyway, so no need to waste time building anything but the bare minimum I need to just tweek the maps to look exactly as I want for the first adventure.

Not much more and I can finally start adding in the actual content (locations to visit, story bits, encounters), build a prototype Scene Builder for conflicts, and finally begin actual gameplay: prototyping the Conflict System (Dice Rolls, Item usage, Dialogue Choices, and strategy choice).

Like shown earlier

2 Likes

Messing around with noise & noise filters to figure out how I want forests to clump together.

Pretty awesome to be able to just adjust a slider and see the changes live.

5264567--526745--procgen tool.gif

Figured out just the right balance for how I wanted trees.

I started out with very low noise and a strong filter.
This resulted in bigger, round clumps of forest which were pretty uniform.

I wanted something different though, so I cranked up the noise to an ungodly amount (3000) and a very weak filter.
I also added a function to clean up noise to eliminate solo and duo tiles, and used it strongly to kill smaller clumps.
Extremely high noise & a weak filter resulted, combined with lots of cleanup, resulted in very thin but interesting shaped forests.

I liked both of these though. I liked the cool shapes of the thin forests, but the larger size of the more basic clumps.
I went back to compare to my handcrafted map I made to try to achieve my goal.

I liked having 1-2 larger forests, and a bunch of smaller ones.
This meant high noise (to have lots of different forest clumps) but also a good filter to turn some of those clumps into big, long, interesting shaped forests.

To clear up the map, I drew over it where the forests were suppose to be.

To get more clarity, I made the “Hills” (non forest) tiles also colored.
And greyscale for my eyes.

Now I knew what kind of shape, size, and quantity of forest clumps I wanted.
It took awhile doing the fine tuning, but eventually I landed on the solution.

Add Very Strong Noise (1350).
The low noise (~200) gave simple, fat clumps. The extreme noise (~3000) gave extremely cool shapes but too thin. ~2000 was still too much, so I cut in half again to ~1000, then fine tuned to 1350.
When fine tuning, it’s best to go in huge chunks. If you’re about to half/double things, you can more quickly find what you need.
The two extremes (200 vs 3000) helped me find out what I wanted. It was very quick to cut the 3000 down by 1000 apiece, then back up by 500, down by 250, etc. Half/Doubling things works very well.

Then I cleaned up the noise BEFORE filtering it. This didn’t occur to me as a possibility for quite awhile. I couldn’t get it right until it dawned on me I could move one of the two cleanups I had to the beginning. Voila! I finally got what I wanted. Combined with a medium/strong filter to grow the noise out, do a final cleanup, and…

5269242--527469--move cleanup.gif

8-14 good forest clumps; often ~12 I wanted, and a few small sprinkles of 3x clumps which I can keep or get rid of, later.

5269242--527466--Final Forest.gif

This procgen map tool was invaluable when creating my map logic!

By being able to reseed instantly like you see above, I could check to make sure the minimum / maximum were acceptable. It was also invaluable to be able to live reorder the function calls, and adjust the variables on the fly, see how things effected the map with instant refreshes, etc.
I’d hate to have done this with a text file & then loading a script, even with an in-game command console. Bleh.
It actually happened a lot that I’d finally think I got it how I wanted, then I’d reseed and see it was only for that one seed - and the logic was bad for some/most others.
I very quickly learned to start just spamming the reseed button and looking for outliers. Either examples where a forest clump was way too big, or there were too few forest tiles on the map.

Eventually I was satisfied with the above logic.

I must say, mapgen is actually nowhere near as fun or interesting as other parts of the game. I will be very glad when it’s over for Adventure1. It could be because I’ve had to work a lot with mapgen creating the map tool and aglorithms. Hopefully that is the case. I don’t want to dread making future maps, especially if the first Campaign sells well.

Nice progress bro, my only critique would be I think the old style is better. The new characters don’t jell well with the background IMHO. Also it is going to be way harder to animate, dunno if you’ve prototyped that in testing phases before you get too far down the rabbit hole?

2 Likes

Thanks for the input! I remember in discussion with our art lead that they want to redo the backgrounds as well. I will keep this in mind.

For animations, at first we decided to have no animations ala Curious Expedition. To keep scope as low as possible. However I had wanted to go a step further and do some pose changes. Combat vs Idle, and then later adding Mounted Idle/Combat. I wanted more, but had to keep scope lower so any additional poses would be either polish or TBD based on speed of character art creation. If fast, it isnt an issue. If not, it becomes one.

Although that doesn’t change much, after the new design I realized I needed some way to indicate to the player whether or not the character has acted on the Turn or not. I thought about it awhile and I decided it would look significantly better if we were to do a style similar to Darkest Dungeon animation. That is… when the character does their primary action, their pose changes, some simple effects and audio happen, and maybe some camerawork.

Darkest Dungeon just does a single pose change. The characters go from Combat Idle to Attack Pose in an instant, with no actual sprite animation, and then back. And it looks great. So I want to try something similar to that, but on a party-wide scale. DD does the subtle Spine-based animations too but I wont need those at all. Nothing of that nature.

Same scoping issue applies to number of “animated” action poses though. I’d love to have several poses for several types of actions, but for now we plan on just a single action pose. So while a Soldier would have a combat action pose, a Scholar might have a reading open book action pose. Or perhaps a generic action + combat action (only 2). I just dont see it being feasible to have any more than the 2. I might also try a action specific effect which doesnt need a Sprite change. Like a rope effect and just teleporting the Idle Pose Sprite “Rogue climbed the wall successfully.”

So for animation we have little to none for Sprites. It’ll all have to be cheaper effects and the like, or nothing at all.

Also a comment on prototyping before going ahead.

That is extremely important to not just prototype things but also get an idea for how long things take to develop.

If a story takes too long to be written due to a feature, that feature, although cool, may be removed due to scoping issues. We have to keep track of how long tasks take to complete, so we keep our scope under control.

It all depends on the value it adds to the game vs the time it consumes in development (on scale). We already have all the content planned out. So we can multiply the average time it takes by the number of characters draw or stories to write, to get an estimate. So the difference between 4 hour per character and 16 hrs per character can mean the difference between 2 months and 1 Year.

We have what we are willing to cut (ex. Extra Poses) and what we really dont want to but could (ex. New character design) but only time will tell. It takes a bit to really get a picture of the average, as the first time creating a new type of content always takes 10x+ longer than the subsequent content.

So it isnt a big deal to spend a few extra days to try something out, drawing/writing 1 thing, but it is a big deal to commit to the new thing if it doesnt work on scale, drawing/writing 100+ things * avg time cost per thing.

We also have what we absolutely cant cut (ex. theme, limitations of animating/rendering, scene, dialogue, & tilemap based gameplay, text based gameplay, etc) So while some things can be scrapped for scope or added for polish, the overall core gameplay cant really change much. I am confident it will all work out though. There is never a problem that cant have a solution. And this game must get finished, and soon.

It sounds and looks stunning. I like it a lot.

1 Like

TLDR: Skip all the pictures and skip all non-bold text. Just read the bold.

I’ve done a lot of work on a lot of different commands recently.
I never thought I’d make code like this with names like string STRING1, int INT1, bool BOOL1
And I’ll probably end up with one of those notorious 1000-case switch statements that all great games seem to have underneath :wink:
Really, it pretty much guarantees my game will be successful.

I made “Command Sets” which you can register, allowing for easy looping and wildcard parameters.

Otherwise, you’re just copy-pasting the same set of commands a bunch of times, which would make the code ridiculously long and repetitive. (4 Towns with 6 villages each, with around 5 commands each, would be something like 140+ lines. With Command Sets calling loops & changes in parameters, it’s just 30 lines instead of 140+.)

This is what the procgen map creation looks like.

I added TileLists instead of specific commands for Black Lists & White Lists, so you can just do whatever you want more freely, collecting all Tiles in a Radius or TileType, to manipulate with map logic.

Instead of marking tiles as “visited” or “isLocation”, it made a lot more sense to just have my own tags, which I call Marks.
This way you can “Mark” any tile for any reason, to then do logic on it later, such as Converting all Wild Hills & Wild Forests marked as “ManagedLand” into special farmland, animal pastures, civilized forests, or saving a generic tile by name to access later, since the TileLocation(x,y) is unknown due to randomness. In case it’s of a generic TileType like “Forest” among 100’s of others, but it’s used for special logic later on.

Marks are vital to a lot of deeper logic in game level design. With marks, I am able to block off certain tiles, radiuses, and anything important when placing locations. This allows new tile placement logic to make sure Towns & Villages are at least X tiles away from each other, don’t replace another important location.

For example, each Town tries to place 6 villages, but sometimes the 5th or 6th will fail, or even a town may only have 3 villages. However it works out well because this only happens when there is already a Village nearby. This was so nifty, I didn’t even have to do any logic to place villages inbetween towns bc it naturally happens.

Purple tiles are Villages. Colored are Towns.
While there are suppose to always be 4 towns, there are a more random number of villages. Each town TRIES to place 6, but usually all 6 cannot fit so it gives a bit more than half that, like some maps having 15-19 villages instead of 24 (6 tries *4 towns).

5405436--548847--location placement map.gif

It was difficult to begin engineering some of this, but after I got back into it, it became a lot better. I probably read RedBlob’s hex page 50 times in a row and felt like it was all a foreign language even after the 50th time. There was like a “mental barrier” kindof suffocating my mind, clouding it or oppressing it. I had to just power through it, despite it feeling overwhelming, difficult, and incomprehensible. Then that barrier just “broke” and everything became easier to engineer and understand again. I genuinely thought I might have lost my abilities in my “older age”, but I’m back to normal now, like my mind was unlocked.
:hushed::eyes::face_with_spiral_eyes:

It was fun engineering how to do "Integrity Checks", which required me to figure out how to take a bunch of logic I just did, and repeat it, but not all of it. IntegrityChecks let you check if a procgen map was successful based on your requirements or if it needs to loop repeatedly until it finishes (up to a max of 5, which then throws a user error telling them the map logic likely needs to be fixed).

This way I can always make sure that all 4 Towns are successfully placed in the map. Villages don’t matter, so they are supposed to fail if they do. Since Towns MUST be part of the game’s map, I enable integrity checks for them. This is verging on becoming spaghetti code duct taped together, but it’s probably the most complicated logic of any command since it touches the actual game loop (while most commands just do some math to a tilemap & that’s it).