flareteam / flare-engine

Free/Libre Action Roleplaying Engine (engine only)
http://flarerpg.org/
GNU General Public License v3.0
1.11k stars 187 forks source link

Wandercall thread - tricky configs #1500

Open clintbellanger opened 7 years ago

clintbellanger commented 7 years ago

I have some tricky engine config questions that come up while setting up Wandercall. Opening a thread to document these and also get feedback for troubleshooting etc.

clintbellanger commented 7 years ago

[solved]

On this update for Wandercall: https://github.com/clintbellanger/wandercall-ch1/commit/ec47a197295eb66dc0488a5ba6399e9422db0a3f

I'm setting up a Dash move in Wandercall. What I want is perfect avoidance during this dash animation, so it works like an action dodge/roll.

What I have set up mostly works, but the Avoidance buff seems to activate late.

I removed the prevent_interrupt tag from Dash to make this more obvious. To test, I stand facing a wall or corner and let an Ogre take swings at me. I try to Dash dodge every move. There is a small window where the dash animation starts but I still get hit.


My error was that the active_frame definition for heroes goes in the base animations/hero.txt file, not in the final animations.

I found my active frames weren't taking by making the animation last way longer (several seconds) and seeing that the Avoidance buff was being added at the default halfway point in the animation.

clintbellanger commented 7 years ago

There are few things I want to try:

Have some benefit for blocking just-in-time (let's call this parrying). When blocking starts I want to trigger a very short buff (less than 500ms) called parry. What effect should this have? I'm thinking missile reflect at least. Is there a way to stun an enemy (put them in Hit state) if they attack the player while the player has a certain buff up? Is there a way to give a Counterattack buff if the player performs a parry?

I added a second melee attack animation (backswing). Right now I have it rigged up to a Cleave power. What kind of interesting things can I do with this extra animation? Is there merit to making a base Light and Heavy attack? Is there a way for the basic Swing power to automatically swing-backswing in one-two pattern?

Swing is more overhead and Backswing is more horizontal so they can be styled for special melee powers. Imagine Cleave (backswing) and Smash (overhead) with some fancy particle visuals.

In Wandercall I'm currently testing with 8 main action bar slots. My idea here is to have some parity with dual stick controllers (4 face buttons, 4 top buttons). I'm considering having Block and Dash be base powers automatically on the action bar and mapped to Ctrl and Space. What about having default Healing and Mana potions be mapped to Q and E? If those get dedicated keys I'll bump up to 10 action bar slots. I want keys 1,2,3,4 available for class powers. Would it be too weird to have Dash and Block be automatically mapped to action bar slots 9 and 0 and hide those slots on the screen? Sort of treat those slots like dedicated buttons that can't easily have its power replaced.

dorkster commented 7 years ago

Have some benefit for blocking just-in-time (let's call this parrying). When blocking starts I want to trigger a very short buff (less than 500ms) called parry. What effect should this have? I'm thinking missile reflect at least. Is there a way to stun an enemy (put them in Hit state) if they attack the player while the player has a certain buff up? Is there a way to give a Counterattack buff if the player performs a parry?

You might want to look into the return_damage effect. It deals damage back to the attacker when they strike, so it can trigger their hit animation.

I added a second melee attack animation (backswing). Right now I have it rigged up to a Cleave power. What kind of interesting things can I do with this extra animation? Is there merit to making a base Light and Heavy attack? Is there a way for the basic Swing power to automatically swing-backswing in one-two pattern?

I like a light->heavy attack combo. I don't like the idea of automatically triggering the heavy part. Let the player choose the attack time vs attack damage balance.

In Wandercall I'm currently testing with 8 main action bar slots. My idea here is to have some parity with dual stick controllers (4 face buttons, 4 top buttons). I'm considering having Block and Dash be base powers automatically on the action bar and mapped to Ctrl and Space. What about having default Healing and Mana potions be mapped to Q and E? If those get dedicated keys I'll bump up to 10 action bar slots. I want keys 1,2,3,4 available for class powers. Would it be too weird to have Dash and Block be automatically mapped to action bar slots 9 and 0 and hide those slots on the screen? Sort of treat those slots like dedicated buttons that can't easily have its power replaced.

First off, wouldn't you still only need 8 slots (2 main, 2 potion, 4 misc)?

I do like the idea of more sensible default bindings for the action bar. I think we could map the first 4 to Q, E, R, F and shift the remaining numbers down to be 1-6.

I think it would be a good idea to add the ability for modders to lock specific slots so that they can't be changed via drag/drop. That way, you could lock in the basic powers that the player should always have access to.

pennomi commented 7 years ago

I like the idea of a heavy attack that triggers on each third melee strike. If the player fails to continue an attack, the effect should reset. This way it gives tanky heroes a reason to sit still and fight directly while mobile heroes can focus on kiting enemies.

I feel like there needs to be a build that favors direct combat. Maybe another (synergistic) power there would be a berserker's rage that grants stacking attack speed over melee attacks.

dorkster commented 7 years ago

I've tried changing the default action bar keys to QERF + 1-6. Of course, if you already have a keybindings config, you'll have to reset to the defaults to notice this.

I've also added the ability to lock action bar slots in menus/actionbar.txt. Slots are unlocked by default. To lock them, add true to the end of an existing slot definition like so: slot_M1=384,3,true.

SarcrofS commented 7 years ago

@dorkster I see your commit about chance to roll post_power and wall_power, can you make to post_effect too? This will be nice 😄

SarcrofS commented 7 years ago

@clintbellanger why not make the dash distance more great and use the moviment to dodge without buffs? a missile coming to you, you dash for out of the line of the missile, so you dodge the missile. Well, if I make a roll/dash or anything like this, will be this how will work 😄

dorkster commented 7 years ago

@SarcrofS

can you make to post_effect too?

Yup. I've added a chance roll to post_effect as well.

SarcrofS commented 7 years ago

@dorkster thanks!!!!!!!!!!!!! 😄

clintbellanger commented 7 years ago

Dash move ideas: I want to leave a trail of kicked-up dust particles on the floor. What's a reasonable way to do this? I'm thinking of spawning off a new small dust animation on the player's position on each frame during the Dash move. Maybe this -- what ways are there to trigger a new power/effect every N frames while a required effect is active?

Curious about attack speed stuff. I have Swing as a light attack and Cleave as a heavy. I slowed down Cleave's animation, that feels good. What's a good way to have Power animation speeds also altered by a weapon's attack speed? Right now Swing is 600ms and Cleave is 800ms. Examples: for a great hammer weapon i'd want those slower, maybe 800ms and 1066ms. For a dagger I'd want it faster, maybe 400ms and 600ms.

Regarding the question, why does Dash avoid all attacks instead of just moving out of the way being enough? Both ways could work well. I like some combat strategy that comes up with having i-frames during dodges. You can dodge towards your enemy and be in position to counter attack. I also want to mess with the idea of using Dash to avoid deadly traps like a row of floor spikes -- dash over them and they will always miss.

In comparison, not too sure yet what I want to do with Blocking. I have just-in-time missile reflect which is very fun. What I don't want is to someone to stay in Blocking stance and be invulnerable. I'm thinking of having Blocking often allow chip damage (better shields would be closer to 0% chip allowed). Then players could choose one defensive moves:

Should certain defensive stats on shields only take effect while actively blocking?

How to set a per-item shield's chip damage (e.g. steel shield absorbs 90% and allows 10% through). Secondly, how to reconcile something like shield chip damage with regular armor absorb? If calculate % chip damage first then run that against the player's scalar absorb, there won't be any damage left. Maybe if blocking, apply standard armor absorb first, then apply the shield's chip damage?

Should I set high poise on shields during blocking so that chip damage doesn't put the player in a hit state?

dorkster commented 7 years ago

Curious about attack speed stuff. I have Swing as a light attack and Cleave as a heavy. I slowed down Cleave's animation, that feels good. What's a good way to have Power animation speeds also altered by a weapon's attack speed? Right now Swing is 600ms and Cleave is 800ms. Examples: for a great hammer weapon i'd want those slower, maybe 800ms and 1066ms. For a dagger I'd want it faster, maybe 400ms and 600ms.

Reminder that it's currently impossible to make attack speed slower, so I'd recommend making Swing and Cleave 800ms/1066ms respectively (or whatever your slowest desired weapon speed is). From there, you can give the items a passive power. Here's an example that changes the speed of the swing animation of flare-game's Dagger from 400ms to 320ms (125% increase):

# in powers/effects.txt
[effect]
id=dagger_swing_speed
type=attack_speed
can_stack=false
attack_speed_anim=swing

# in powers/powers.txt
[power]
id=300
type=fixed
buff=true
passive=true
post_effect=dagger_swing_speed,125,0

# then in the Dagger item def in items/items.txt
power=300

How to set a per-item shield's chip damage (e.g. steel shield absorbs 90% and allows 10% through).

Would block_percent=0,90 in engine/combat.txt help here? This should let that 10% through even with an excessively high absorb bonus from blocking.

dorkster commented 7 years ago

Would a cooldown for blocking be something desirable? Instead of applying the cooldown when the power is activated (current behavior; useless for block powers), cooldown for blocking powers should be applied when the blocker takes a hit. It would emphasize blocking's ability to mitigate a lot of damage in a short window.

SarcrofS commented 7 years ago

A cooldown after some hits for type=block will be amazing for ARPG.

dorkster commented 7 years ago

@clintbellanger Cooldowns for block powers has been implemented. The cooldown will only activate when the blocker enters the hit animation. So high poise (or avoidance if you allow misses) makes such block abilities naturally stronger.


Dash move ideas: I want to leave a trail of kicked-up dust particles on the floor. What's a reasonable way to do this? I'm thinking of spawning off a new small dust animation on the player's position on each frame during the Dash move. Maybe this -- what ways are there to trigger a new power/effect every N frames while a required effect is active?

I figured repeater powers would be a good candidate for this. The requirements for this became:

Here's a demo where I show how all this works together, albeit using the Freeze graphics instead of some nice puffy dust clouds. Just use your imagination for now.

And here's what the "dust" power looks like:

[power]
id=300
type=repeater
new_state=instant
animation=animations/powers/freeze.txt
speed=12
visual_random=3
lifespan=400ms
delay=100ms
count=8
starting_pos=source
no_attack=true
lock_target_to_direction=true
movement_type=ground

It is then called in the Shield Bash power with:

pre_power=300
clintbellanger commented 7 years ago

Can anyone think of a clever way to do an effect like this?

Whetstone
Requires edged weapon
Weapon deals bonus damage for a short time

mechanically something like this?

Your first attack gets +20% damage
Your second attack gets +19% damage
repeats until the blade is dull again

I don't know of a way to make it only affect the weapon you used it on. If it can't be done, what about a "magical whetstone" (or other theming) that affects your next 20 melee attacks with any weapon?

Or, what other interesting temporary attack buffs can be done?

dorkster commented 7 years ago

@clintbellanger Here's the best I can come up with:

  1. Whetstone is a consumable item that adds 20 stacks of the equivalent of 1% damage. We can't do percentage based bonuses to damage at the moment, so you'd have to estimate this yourself and use dmg_melee_min and dmg_melee_max. You would create these as separate effects in power/effects.txt, as they need to be referenced in the next step (I'll call them whetstone_min and whetstone_max).
  2. All of the player's melee abilities would need a replace_by_effect line. It would be something like: replace_by_effect=(new power id),whetstone_min,1. Note, we're currently limited to only 1 replace_by_effect line per power. That will be sufficient to detect we're under the whetstone effect, but it limits use to only 1 of these sorts of bonuses for each group of powers.
  3. The "new power id" from step 2 would be identical to the original melee power (maybe different sfx/gfx to represent the buff), but it would have two lines like this:
remove_effect=whetstone_min,1
remove_effect=whetstone_max,1
clintbellanger commented 7 years ago

Interesting, I thought it might need the replace_by_effect.

I think similar enough effects could be done easier? e.g. "potion of strength", so I'm not worried about any new features on this whetstone thing.