clintbellanger / flare

Free Libre Action Roleplaying Engine
http://clintbellanger.net/rpg/
GNU General Public License v3.0
166 stars 41 forks source link

Aiming and Reloading systems #917

Open clintbellanger opened 11 years ago

clintbellanger commented 11 years ago

I'm not sure these are a fit for Flare, but I want to strongly consider them. Especially for the future (e.g. Flare 2.0).

One way to balance ranged weapons is to add the time it takes to aim and reload.

Aiming

Imagine the player is armed with a bow. Hold down the Shoot button and a target oval appears near the cursor. This oval shrinks the longer the player holds the button, until after about 2 seconds it's pinpoint. Such a shrinking reticule based on how long you aim could be used to affect Accuracy, missile Distance, or Damage.

Having some kind of aiming reticule could be useful in more situations. Imagine if we took Flare and made a modern zombie shooter. Shotguns would have a very wide reticule that did not shrink much upon aiming. Machine guns would have a wide reticule that shrunk fast (automatic rifles could have wide pray & spray aiming, but if you took the time they could be very accurate). Sniper rifles could have the best accuracy but take longer to aim.

If this mechanic was in place, we could add item bonuses that affect aiming. Imagine a bonus to e.g. aim 50% faster.

Reloading

Right now powers can have cooldowns, so we can simulate reloading that way. But the cooldown triggers after every use. One thing we'd want to do for guns is have a cooldown triggered after a certain number of uses. A revolver might need a cooldown after 6 uses. To fully facilitate this, we might want an option cooldown sound effect on items. We also might want a "reload now" button to trigger the cooldown at will. Finally we might want an ammo indicator on the HUD that's based on equipped items.

makrohn commented 11 years ago

Reloading might be implemented very easily - if a power can create items (can it?). Something to the effect of: [power] id=100 name=Fire Revolver requires_item=100 [item] id=100 name=Bullet type=consumable power=100 [power] id=101 name=Reload Revolver create_item=id,100,6 state=reload then in animation.txt [reload] position=17 frames=6 duration=120 type=looped. With this setup, the power Fire Revolver SHOULD have the number of bullets left on the power icon. I think.

As far as aiming goes, I'm not so sure it's necessary. We could just vary the "swing time" on the different ranged weapons, or give Shoot itself a longer cooldown. As much as I felt it worked in Bastion, I don't find Aiming to generally be a fun mechanic.

clintbellanger commented 11 years ago

Currently powers cannot create items. It's not that reloading will create items; powers can require and consume items, which is how ammo could work as a collectible resource. We've tested this for arrows already, but I don't have it turned on in the data (I don't find limited ammo fun). So someone might be carrying 100 9mm rounds, but only 10 fit in the current magazine.

makrohn commented 11 years ago

Maybe bullet has power=100 and you drag the bullets into your actionbar the first time, while the revolver has power=101 on it, and you rightclick the revolver to reload.

makrohn commented 11 years ago

I was just trying to think of a way to add reloading that would keep it simple - if it's easier to implement a reloading mechanic than it is to implement powers to create items, then obviously that'd be the way to go. Since my coding skills are weak at best, I tend to think in terms of "How could this be done with existing features?"

makrohn commented 11 years ago

"If this mechanic was in place, we could add item bonuses that affect aiming. Imagine a bonus to e.g. aim 50% faster." Is it possible to selectively haste certain stances? That would grant a few possibilities for aiming/reloading/ranged weapon cooldown: Set the duration of reload stance and shoot stance to a certain fixed value, and then various items and weapons can simply modulate that base - a machine gun might have shoot_stance_haste=12.5, while an English longbow could have shoot_stance_haste=200, and a winched crossbow shoot_stance_haste=500. An Ammo Belt could have reload_stance_haste=25, or [power] smoke screen could have aim_stance_haste=200. The names are clumsy, but hopefully descriptive.