コントローラーの「モード拡張性」問題

複数あるボタンのセットに対する入力状態解析をするアルゴリズムセットを、
仮に「制御モード」と呼びます。
まずはインタフェースの概観です。方向制御レバー1本と、ボタンA,B、Cの三つがあり、ボタンAが一番大きくて押しやすいボタンとします。
次にこのインタフェースを使って起動できる機能群であるところの、「制御モード」についてです。今回、制御モードは、仮に以下の複数種類実装されるべきものとします。

制御モード1は「弾を撃つ」です。
制御モード1では、一番押しやすいAボタンで、弾を撃ちます。
制御モード2は、「ボム」です。
Bボタンを押して離したタイミングでボムが発射されます。
制御モード3は自機の、「スピードアップ・ダウン制御」です。
制御モード3では、Bボタンを押しながら、
Aを押すとシフトアップ、Cを押すとシフトダウンするものとします。
制御モード4では、若干裏技チックになりまして、
Bボタンを押しながら、AとCを同時に叩くことで、
時間制限つきの残像モードに入れます。
残像モードでは、移動すると、
自機の1〜5フレーム前辺りまでの位置の残像が残るようになり、
若干ですが敵を惑わせる効果を発揮できるものとします。
最後に制御モード5です。
制御モード5では、Cボタンを押しながら、
Aボタンを押すと、次に押されたABCいずれかのボタンに対応して、
武器の種類の選択切替ができます(Aならマシンガン、Bならバズーカ、Cならレーザー)
あるいはCボタンを押しながらBボタンを押した場合には、
次に押されたABCいずれかのボタンに対応して、
ボムの種類の選択切替ができます(Aは通常爆弾、Bはねばねば爆弾、Cはお楽しみ爆弾)。

はい。というわけで前置きが長くなりましたが、、
A,B、C,の三つのボタンに対し、
一見複雑なものも含め5つもある複数の制御モードを、
どう実装したものか、というのが、今回のお題です。

もちろん今回の主旨としては、上述要件が動けばいいだけのやっつけコードではなくて、上述要件を実装するうえで何か普遍概念のようなものを考え、それに基づいて、問題に対処する際の一つの常套手段を見出し、共有しようというものです。

各ボタンのコールバックではどういう実装をすればよいでしょうか。

制御モード1や2あたりまでなら、このボタンが来た時にはこの処理、と、単純に実装すればよさそうですが、制御モード3まで対応しようとすると、例えばAボタンの処理にしても、Bボタンが今押されているかどうかの判定などが必要になりそうですね。

しかしそれだけでは、制御モード4や5に対応できないことは明らかです。しかも、ゲーム企画側の気が変わって新たな制御モードが今後増え続けないとも限りません。
さてさて制御モードの拡張性をどうすれば担保できるでしょうか。答えは、みなさんの宿題とします。
じゃ今日はこの辺で。チャオ!