ツインスティックでロボサバ

th_P1090422.jpg



ロボサバ大会では、毎回なにか1つはマイナーチェンジ的なことを加えるようにしているのですが、
今回は操作系をサターンのバーチャロンツインスティックにしてみました。





使用したツインスティックは、今回のために作ったコネクタをプレステ用に改めたものです。

無線はWiiリモコン+USB無線ドングル+SBDBT。
そして、Wiiリモコンの拡張端子をPSコネクタに変換するドングルも使用しています。




arduinoとSBDBTの接続は、前回の記事の通りです。




ロボサバは基本的に無線カメラの映像を頼りに撃ち合うサバイバルゲームです。
なので、操作する場所と戦闘フィールドはベニヤ板やカーテンなどで仕切られています。
Wiiコントローラーの拡張端子を使う利点は実はここにあり、
Wiiコントローラー本体(つまりアンテナ部分)だけを、仕切りをまたいだ戦闘フィールド側にぴょこんと出しておけます。
これで、電波状況が改善し、コントロールが目に見えて安定します♪




遊んでみた感じ、かなりのアサルト感を満喫できました。これぞファミコン版アサルト!(違)いや遊んだ感じはグロブダー。いやむしろサイバースレッドかもしれません^^




脱輪防止処理とか操作系プログラムのきめ細やかな処理をしていないので戦果はイマイチでしたが、ちょっと手を入れれば十分に遊べるものになりそうです。
1度、被弾センサが機能しなくなり焦りましたが、原因はarduinoのシールドが十分にささっていないためでした。
自作のarduino版の被弾センサは、かなり安定している方なので、そろそろオフィシャルサイトでソースを公開しようかと思っています。




th_P1090429.jpg
今回のロボサバ参加ロボたち。
写真だと分かりづらいかもしれませんが、中央のピンクの二足ロボットが吉田さんの愛機「さくら2号」で、今回はボトムズのスコープドッグみたいに、カメラのレンズが回転して切り替わる方式です。理想的です!
さらに、さくら2号の前にあるデフォルメマシンガンが、田中さん制作のフルスクラッチM2です。
ロボがまだ完成していないロボサバ参加者や、ロボが故障して遊べなくなったプレイヤーには、審判などをお願いしつつ、トーチカ戦ではこのM2等でロボを撃ちまくってストレス発散していただいています。
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

arduino + SBDBT!


ファミタンクの無線のSBDBTに切り替えをやっとやりました。
プログラムのバグを友人に教えてもらったりしつつ、動くところまで出来ました。
これで、次回のロボサバはバーチャロン用ツインスティックでアサルト的に操作して遊べる予定です。
さらにハードウェアにオムニホイールを導入すれば、サイバースレッド的な操作感も実現できます。
スケッチのベースは以前miconoさんに教えてもらったものです。(ありがとうございます!)




備忘メモとして、サンプルプログラムを上げておきます。
Wiiコントローラーの入力に応じて、arduinoのシリアルモニタに入力された数値と押されたキーを出力するものです。
(ファミタンク仕様のため、右ボタンをレバーとして表記してしまっていますがすみません。)
初歩的なプログラムですが、私のような電子工作の初心者にとってかなり重要なもので、これさえあればarduinoで作った電子工作ならなんでもかんでも即座にwiiリモコンで操作できるようになります。
ラジコンやロボットはもちろん、クアッドコプターに搭載するマジックハンドとか、LEDのイルミネーションを遠隔操作したりとか、誰でも思いつくような素朴なアイデアを、かなりのハードルの低さで実現できてしまいます♪(人として悪い事につかってはなりません。)

個人的には、レトロゲームをフィジカル化したような、動く卓上ゲームをいろいろ作りたいと思っています。




SBDBTはwii用ファームの「ソース Ver.130722」を使います。



【SBDBTとarduinoの接続】
SBDBT2番ピン:arduinoの3.3V
SBDBT3番ピン:arduinoのGND
SBDBT7番ピン:arduinoのシリアル信号入力(今回の例ではデジタル12番ピン)



【SBDBTの設定】
global.h 内の設定

#define PIN_CODE_DEFAULT "0000"
#define BOARD_SBDBT 1
#define BOARD_SBXBT 0

// Define the baud rate constants UART1
#define BAUDRATE1 9600
#define BRG_DIV1 4
#define BRGH1 1

// Define Hardware Flow Control UART1 (0:off 1:on)
#define UART1_HW_FLOW 0
#define UART1_TX_POLARITY 0 //(※反転なしなので注意。)
#define UART1_RX_POLARITY 0

#define WII_REMOTE_CONNECTION_SYNC 0

#define MODE_NO_INQUIRY 0

#define WII_REMOTE_REPORT_MODE 0x30
#define WII_REMOTE_REPORT_MODE_EXT 0x35

#define SERIAL_TRANSFER 2

#define SEND_ON_DIFFERENT_DATA 1
#define UART1_MINIMUM_INTERVAL 0

#define WII_REMOTE_HORIZONTAL 1
#define WII_REMOTE_ACC_SCALE 6
#define WII_REMOTE_ACC_DEADZONE 25
#define WII_CC_ANALOG_DEADZONE 25
#define NEUTRAL_DATA_SUPPRESS 1
#define NEUTRAL_ADDITIONAL_PACKETS 0


// Define the baud rate constants UART2 (Debug)
#define BAUDRATE2 115200
#define BRG_DIV2 4
#define BRGH2 1

// Define LED1 communication indicator on time(ms)
#define LED1_ON_COUNT 10




【arduinoのスケッチ】

//-------------------------------------------------------------

#include

#define MYRX 12 //デジタル12番ピンはソフトウェアシリアルRX
#define MYTX 11 //デジタル11番ピンはソフトウェアシリアルTX
SoftwareSerial mySerial(MYRX, MYTX);

unsigned char c[8];
unsigned long chksum;

void setup(){
mySerial.begin(9600);//SBDBTとArduinoは2400bps
Serial.begin(19200);//シリアルモニター表示
c[0]=0x80;//SBDBTからのシリアル信号の1個目は固定。
}

void loop(){
//まずは無線からシリアルを読み込む。c[1]とc[2]にキー入力が格納される。
int i;
if (mySerial.available() >= 8) { //8byte以上あるかチェック
if (mySerial.read() == 0x80){ //1byte読み込んで0x80のスタートビットかチェック
Serial.print(c[0],HEX);//16進数で数値を表示。
Serial.print(",");//コンマで区切る。
for (chksum=c[0],i=1;i<8;i++){//スタートビットは読み込み済みなので、次の7個のデータを読み込む。
c[i]= mySerial.read();
if(i<7) chksum+=c[i];
Serial.print(c[i],HEX);//16進数で数値を表示。
Serial.print(",");//}//コンマで区切る。
}
if(c[7]==(chksum & 0x7F)){//ボタン部分のみのチェックサムを簡易計算してみる。
Serial.println("check sum OK !");//チェックサムOKを表示。
}
else {
Serial.println("check sum * * ERROR * *");//ダメならエラーを表示。
}

//ここから、キー入力に応じて、メッセージを出す。
if(c[1] == 0x00 ){//何も押されていなければ静止
if(c[2] == 0x00 ){//何も押されていなければ静止
Serial.println("* STOP *");
}
}

if((c[1] & 0x10) == 0x10 ){//右トリガ:ショット(R2ボタン)
Serial.println("FIRE!!");
}
if((c[1] & 0x08 ) == 0x08 ){//右ボタン:照準センタリング(R1ボタン)
Serial.println("Centering");
}
if((c[1] & 0x02 ) == 0x02 ){//左ボタン:照準UP(L1ボタン)
Serial.println("Target_UP");
}
if((c[1] & 0x04 ) == 0x04 ){//左トリガ;照準DOWN(L2ボタン)
Serial.println("Target_DOWN");
}
if((c[2] & 0x01 ) == 0x01 ){//左レバー上(十字↓)
Serial.println("LEFTLEVER_UP");
}
if((c[2] & 0x02 ) == 0x02 ){//左レバー下(十字↑)
Serial.println("LEFTLEVER_DOWN");
}
if((c[2] & 0x10 ) == 0x10 ){//右レバー上(Xボタン)
Serial.println("RIGHTLEVER_UP");
}
if((c[2] & 0x20 ) == 0x20 ){//右レバー下(Bボタン)
Serial.println("RIGHTLEVER_DOWN");
}
}
}
}

//-------------------------------------------------------------

テーマ : 自然科学
ジャンル : 学問・文化・芸術

忍者プリンセス


RGB化したセガマーク3で『忍者プリンセス』を遊んでみました。




『忍者プリンセス』は1986年に発売されたSG-1000対応のゲームです。
85年の時点で映像表現でファミコンに勝るセガマーク3が発売されていたので、立ち位置が微妙なゲームです。
しかしながら、単色スプライトの時代遅れ感を払拭するかのように主人公は3色。背景も力の入ったカラフルさでかなりがんばっています。
ゲーム内容、動きの滑らかさ的にもなかなかの良作です。発売当時は友人の家で満喫しました。
遊んだ中では個人的にはフリッキー(1984年)と並ぶ傑作で、「遊べるゲーム」でした。
ゲームの面白さは絵じゃない、動きだ!と教えてくれたゲームの一つです。
(その2本を家に揃えていた友人、ゲームチョイスのセンスがありますね。ちなみに私の家にあったセガはセガギャラガとロードランナーでした。忍者プリンセスの頃にはファミコンも持っていたのセガではあまり遊ばなくなっていました。)


th_P1090418.jpg
SG-1000版とは思えないカラフルさ!当時のテレビではやや潰れていた民家の表現もRGB化で本領発揮。(※使用機はマーク3です。)
これで敵の忍者が単色じゃなかったら、ファミコンのゲームと見分けがつきません♪




さてゲームの攻略です。
プリンセスを十字キーで操作し、画面の上へ上へと進めていき、ボスを倒せば面クリアです。
攻撃は右ボタンが上方固定の手裏剣ショット、左ボタンがプリンセスの向きに応じた8方向へのショットです。
(ん、この打ち分けシステム、そして敵の動き、ゲイングランドに似ているぞな!と思って調べてみたら、作者が同じようです。大納得。)
また、左右ボタンの同時押しで遁術を使う事ができます。1秒ほど姿が消え無敵になります。
遁術は無制限で使えますが、無敵中は攻撃が出来ないのでグッドバランスです。使いこなすことで白土三平の劇画のような忍者アクションを満喫できます♪
赤巻物を5つ集めないとラスボスにたどり着けないので注意が必要です。




これから遊ぶ人のための攻略メモです。

1面:途中の左の岩に隠れた青忍者を倒すと1つ目の赤巻物

2面:写真の民家の画面右下、田んぼに少し入ったところを踏むと2つ目の赤巻物

3面:この面は命中率100%でクリアする必要があります。
   黄巻物の貫通ショットを取った後、猫みたいな忍者を集めて1発で倒す事で命中率を100%以上に
   ためておく事が出来ます。
   ボスは相殺不可の手裏剣を単発で撃ってきます。
   ボスと自機のX軸をずらして、斜めに手裏剣を撃たせてから正面から打ち込むか、
   タイミングよく遁術を使い敵手裏剣をスルーすることで、ガッツリと打ち込むことできます。

4面:3面で命中率100%を獲得していると、最初のグレー忍者が3つ目の赤巻物を落とします。

5面:城下町。右に張り付いて撃ちながら進むと、隠れている忍者を倒しやすい。
   透明忍者は重なると姿を現すので、重ねてから下がりつつ撃つ。
   撃つタイミングが遅れると逆に斬りつけられる。

6面:城壁のある面。2つめの城壁の中庭(画面右半分)を進み、
   突き当たりの壁の左端あたりを踏むと4つ目の赤巻物

7面:石垣を登る面。慎重に進めば大丈夫。

8面:中庭。ボス戦の時に一緒に出てくる薙刀黒忍者は触れるだけでアウトなので注意。
   画面下からも薙刀黒忍者が出現するのでこれも注意。あとは3面と同じ要領で倒す。

9面:再び石垣を登る面。
   ボスがいる場所の右上あたりを踏むと、5つ目の赤巻物
   とった瞬間、下の画面が現れ、中庭面へ。

10面〜:巻物が揃っていないと、お城の中に入る事が出来ます。
     床ばりの面や畳の面を見る事が出来ます。代官みたいなボスを倒していきますが、
     数面進むと最初から(巻物を取り忘れた面から?)やり直しになります。
     
th_P1090419.jpg


中庭面:敵の攻撃がかなり激しいので注意。
    巻物の命令に従うと、最終面へ。

最終面:お城の地下。敵の手裏剣のスピードが早いので注意。
    忍者に注意しつつボスを倒せばクリア。

th_P1090420.jpg

充実のゲーム内容の割に、エンディングは文字だけ。そして無音。レトロゲームのエンディングのお手本のような突き放しっぷりがたまりません。(笑)

テーマ : 自然科学
ジャンル : 学問・文化・芸術

tag : 忍者プリンセス sg-1000

セガマークIIIのRGB化

th_P1090411.jpg



セガマーク3のRGB化を行います。




さほど難易度が高くないRGB化ですが、
解決すべき課題としては、

1)RGB出力が背面から出てるが、出力が低く画面が暗め。
2)FMサウンドユニットを接続すると、RGB出力のDIN端子がふさがってしまう。


という2点が挙げられます。

本体内部に手を加えることで配線をスッキリさせることもできるそうですが、
RGBを標準出力しているマシンの志の高さをリスペクトし、本体無改造の方針で進めてみたいと思います。




まず、RGBの出力のアンプについてですが、前回のNintendo64で使ったアンプと同じもの を使ってしまいます。(レシピは爆竹銃さん
もちろんそのままだと画面が明るすぎるので、RGB出力のところの抵抗を高く設定します。
もともとの75Ωに加え、280Ωほど追加してみました。
(アフターバーナーではよい発色でしたが、SG-1000用のスーパーモナコGPだと敵のブルーカーがちょっと暗すぎるような気もします。あと、縦縞も若干残っているので調整は必要かもしれません。)




問題はFMサウンドユニットの扱いです。

FMサウンドユニットにはDin5ピンによる入力と出力があり、

・FMサウンドユニットのDin5ピンオス(入力)→マーク3本体のDin8ピンへ
・FMサウンドユニットのDin5ピンメス(出力)→専用ケーブル→テレビへ

という風に接続することになっています。

FMサウンドユニットが内部で生成したFM音声とマーク3本体から入力したPSG音声をミキシングして出力していると考えるのが自然です。

が・・・




FMサウンドユニットがどうやって本体からのPSG音源をミキシングしているのかが分かりません・・・
というのも、FMサウンドユニットのDinオスピン(本体に接続する方)のサウンドピンが、入力どころかむしろFMサウンドをバリバリに出力しているからです。
PSGを入力してミキシング処理するぞという意思がユニットから伝わってきません。




サイトを検索してもミキシングの謎についての答えがなかなか出てきません。
しおんパパさんにTwitterで質問したところ、以下のサイトを教えていただきました。
「超弩級変態電気眼鏡」-セガマークⅢのFM音源ユニット小改造

拡張端子の空きラインを使って、FM音源をマーク3本体の背面から出力するという裏ワザの記事です。
しおんパパさんはこのサイトの情報から、FM音源と本体PSGのミックス出力にも成功されているとのことでした。




結論としては、
本体のPSG音源出力とサウンドユニットのFM音源出力は、出力同士を結線するだけで音声合成可能
ということのようです。




th_P1090407.jpg

ということで作成したのがこちらのケーブルです。
本体と色を合わせ、タカチのグレーのケースにしてみました♪
たぶんやっていることは東京RGBホスピスさん製のケーブル とだいたい同じだと推測されます。

ケースの中では、
・RGB用信号の増幅
・本体からのサウンド線にFMユニットからの音声出力を単純に結線

という2つの処理を行っています。

テレビ側はローカル規格 になっていて、AVマルチ入力端子などに接続可能です。




th_P1090406.jpg

接続してみたところです。
サウンドユニットの後付け増築感がたまらなくダサカッコいいです。
ガンダムのジムバリエーションぽくて好きです。(SG-1000IIは初代ジムっぽい色ですし。)
SG-1000/SC-3000からの流れを組む元祖コア構想ですよね。



th_P1090409.jpg

背面はこんな感じです。
FMサウンドユニットのDinメスピンには何もささっていませんが、特に問題はありません。
アフターバーナーをスタートするとBGMと同時に本体PSGによる音声合成の「ゲットレディ!」が発声されています。
(ちなみにFMサウンドユニットのDinピンを外してアフターバーナーを開始すると、BGM無しで「ゲットレディ!」だけが聞こえてきます。)

テーマ : 自然科学
ジャンル : 学問・文化・芸術

プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク