みなさんこんにちは!元素さんです!
もうすぐゼノブレイド3が発売されます(というかこの記事を書くのが遅すぎてもう前日ですね)。楽しみです! 私はコレクターズエディション(特典のみ)を2つ予約し、ソフトはカタログチケットで買いました✌
そんなこんなで今回はゼノブレイド関連のお話です。
ビデオゲームを構成する主な要素を3つに絞るなら、操作、映像、音響でしょう。今回は操作と映像の観点でゼノブレイドについて語っていきたいと思います。
// 各ボタンの出力を管理するフラグ
int a_flag = 0;
int b_flag = 0;
int x_flag = 0;
int y_flag = 0;
int l_flag = 0;
int r_flag = 0;
int zl_flag = 0;
int zr_flag = 0;
int sl_flag = 0;
int sr_flag = 0;
int p_flag = 0;
int m_flag = 0;
int cap_flag = 0;
// 長押しした時間に関わるフラグ
int z_time = 1;
int c_time = 1;
// 十字ボタンの入力値を格納する変数
int dup;
int ddn;
int dl;
int dr;
int sum; // 計算用の変数
int wnc; // cボタンの入力値を格納する変数
int wnz; // zボタンの入力値を格納する変数
main {
//十字ボタンの入力値を取得
dup = get_val(WII_UP);
ddn = get_val(WII_DOWN);
dl = get_val(WII_LEFT);
dr = get_val(WII_RIGHT);
//条件分岐のため合算する
sum = dup + ddn + dl + dr;
wnc = get_val(WII_C); // cボタンの入力値を取得
wnz = get_val(WII_Z); // zボタンの入力値を取得
// Aボタンの入力値を取得
if(get_val(WII_A)){
a_flag = 1;
}
// Bボタンの入力値を取得
if(get_val(WII_B)){
b_flag = 1;
}
// +ボタンの入力値を取得
if(get_val(WII_PLUS)){
p_flag = 1;
}
// -ボタンの入力値を取得
if(get_val(WII_MINUS)){
m_flag = 0;
x_flag = 1;
}
// cボタンを押したとき、Lボタンが出力されるのを防ぐ
if(wnc){
l_flag = 0;
}
// cボタンを押したとき、Lボタンが出力されるのを防ぐ
if(wnz){
zl_flag = 0;
}
if(wnc && wnz){
// cボタンとzボタンを同時押しした時、カメラの引き具合などをリセットする
zl_flag = 1;
sr_flag = 1;
z_time = 0;
c_time = 0;
}else{
sr_flag = 0; // なんでこの行書いたか思い出せない
if(wnz){
// zボタンを押しながら
if(dup){
// 十字の上を押すとマップ切り替え
set_val(SWITCH_UP,0);
sl_flag = 1;
z_time = 0;
}
if(ddn){
// 十字の下を押すと集合
zr_flag = 1;
z_time = 0;
}
if(dl){
// 十字の左を押すとターゲット切り替え
set_val(SWITCH_LEFT,0);
l_flag = 1;
z_time = 0;
}
if(dr){
// 十字の右を押すとターゲット切り替え
set_val(SWITCH_RIGHT,0);
r_flag = 1;
}
if(get_val(WII_A)){
// Aボタンを押すと集中攻撃
a_flag = 0;
zr_flag = 1;
set_val(SWITCH_UP,100);
z_time = 0;
}
if(get_val(WII_B)){
// Bボタンを押すと各自に任せる
b_flag = 0;
zr_flag = 1;
set_val(SWITCH_RIGHT,100);
z_time = 0;
}
if(get_val(WII_PLUS)){
// +ボタンを押すとZRボタンを出力
// Wii版にない操作
// メニュー画面でZRボタンが必要なので
p_flag = 0;
zr_flag = 1;
z_time = 0;
}
if(get_val(WII_MINUS)){
// -ボタンを押すとZLボタンを出力
// Wii版にない操作
// メニュー画面でZLボタンが必要なので
x_flag = 0;
zl_flag = 1;
z_time = 0;
}
}
if(wnc){
// cボタンを押しながら
if(get_val(WII_A)){
// Aボタンを押すとカメラが寄る
a_flag = 0;
zl_flag = 1;
set_val(SWITCH_RY,-100);
c_time = 0;
}
if(get_val(WII_B)){
// Bボタンを押すとカメラが引く
b_flag = 0;
zl_flag = 1;
set_val(SWITCH_RY,100);
c_time = 0;
}
// 十字ボタンでカメラを回す
if(sum > 102){
c_time = 0;
if(dup && dl){
set_val(SWITCH_RX,-70);
set_val(SWITCH_RY,-70);
}
if(dup && dr){
set_val(SWITCH_RX,70);
set_val(SWITCH_RY,-70);
}
if(ddn && dl){
set_val(SWITCH_RX,-70);
set_val(SWITCH_RX,70);
}
if(ddn && dr){
set_val(SWITCH_RX,70);
set_val(SWITCH_RY,70);
}
}else{
if(dup){
set_val(SWITCH_RY,-100);
c_time = 0;
}
if(ddn){
set_val(SWITCH_RY,100);
c_time = 0;
}
if(dl){
set_val(SWITCH_RX,-100);
c_time = 0;
}
if(dr){
set_val(SWITCH_RX,100);
c_time = 0;
}
}
// 誤入力対策のお祓い
set_val(SWITCH_UP,0);
set_val(SWITCH_DOWN,0);
set_val(SWITCH_LEFT,0);
set_val(SWITCH_RIGHT,0);
}
}
if(get_val(WII_ONE)){
// ①ボタンでスキップトラベル
sr_flag = 0;
y_flag = 1;
}
if(get_val(WII_TWO)){
// Wii版とDEの違いで②ボタンが余ったのでキャプチャボタンを割り当て
sl_flag = 0;
cap_flag = 1;
}else{
cap_flag = 0;
}
// zボタン長押しの閾値
if(get_ptime(WII_Z)>1000){
z_time = 0;
}
if(event_release(WII_Z)){
if(z_time){
r_flag = 5; // Zボタンを短く押すとターゲットロック
}else{
z_time = 1; // 一定時間以上長押しした時はターゲットロックしない
}
}
// cボタン長押しの閾値
if(get_ptime(WII_C)>1000){
c_time = 0;
}
if(event_release(WII_C)){
if(c_time){
sr_flag = 5; // cボタンを短く押すとカメラリセット
}else{
c_time = 1; // 一定時間以上長押しした時はカメラリセットしない
}
}
// 以下 最終的にSwitchに送る信号の管理
if(a_flag){
set_val(SWITCH_A,100);
a_flag = 0;
}else{
set_val(SWITCH_A,0);
}
if(b_flag){
set_val(SWITCH_B,100);
b_flag = 0;
}else{
set_val(SWITCH_B,0);
}
if(x_flag){
set_val(SWITCH_X,100);
x_flag = 0;
}else{
set_val(SWITCH_X,0);
}
if(y_flag){
set_val(SWITCH_Y,100);
y_flag = 0;
}else{
set_val(SWITCH_Y,0);
}
if(l_flag){
set_val(SWITCH_L,100);
l_flag = 0;
}else{
set_val(SWITCH_L,0);
}
if(r_flag){
set_val(SWITCH_R,100);
r_flag--;
}else{
set_val(SWITCH_R,0);
}
if(zl_flag){
set_val(SWITCH_ZL,100);
zl_flag = 0;
}else{
set_val(SWITCH_ZL,0);
}
if(zr_flag){
set_val(SWITCH_ZR,100);
zr_flag = 0;
}else{
set_val(SWITCH_ZR,0);
}
if(sl_flag){
set_val(SWITCH_SL,100);
sl_flag = 0;
}else{
set_val(SWITCH_SL,0);
}
if(sr_flag){
set_val(SWITCH_SR,100);
sr_flag--;
}else{
set_val(SWITCH_SR,0);
}
if(p_flag){
set_val(SWITCH_PLUS,100);
p_flag = 0;
}else{
set_val(SWITCH_PLUS,0);
}
if(m_flag){
set_val(SWITCH_MINUS,100);
m_flag = 0;
}else{
set_val(SWITCH_MINUS,0);
}
if(cap_flag){
set_val(SWITCH_CAPTURE,100);
}else{
set_val(SWITCH_CAPTURE,0);
}
// 以下 左スティックの感度調整
sensitivity(WII_NX , NOT_USE, 150);
sensitivity(WII_NY , NOT_USE, 150);
stickize(SWITCH_LX, SWITCH_LY, 140);
deadzone(WII_NX, WII_NY, DZ_CIRCLE, 2);
}