2010年にプレイしたフリーゲーム

今年は4本ですが、自分で思ってたよりプレイできてました。

毎度のことですが、エンディングのあるものについてはエンディングを見たものだけを載せています。

Romancing Sa・Ke

森○朗や小泉○一郎が登場するRPG、『ダメフロンティア』の作者の作品です。やはりRPGで、今回の主役は中川○一です。まあちょっと不謹慎ですね。今回もマルチエンディングです。

政治風刺だかなんだかよくわからないような作風は健在で、そっち方面が苦手な人でも楽しめるかもしれません。

残念ながら作者サイトは消滅してしまっているようです…

YAS

Hello Windows』などの楽曲作品で有名なヒゲドライバーさんが製作した完全オリジナルRPGです。もちろんBGMも全曲ヒゲドライバーさん制作のオリジナル、しかもファミコンを思わせるピコピコテイストです。多くの仲間キャラが登場し、やり込み要素やミニゲームも充実しすぎというくらい充実しています。

ところで今初めて知ったのですが、サウンドトラックも発売されてるみたいですね。買っちゃおうかしら…

もしもロワイアル完全版

VIPRPGの「もしもシリーズ」のキャラクターが「バトルロワイアル」を行うという、いわゆるパロロワと言われるジャンルの作品です。「もしもシリーズ」は大部分がコミカルで、登場キャラクターも可愛らしいものが多いのですが、この作品の中では本当にガチで彼らが殺し合いをしてしまいます。テキスト主体で、グラフィックは背景と顔グラだけ(だったと思う)ですが、グロテスクなシーンも多いです。そういうのが苦手な人にはとてもおすすめできません。

ストーリーは一本道で、選択肢により展開が変わるということもなく、インタラクティブな要素はほとんど無いのでゲームと言うには微妙なところかもしれません。ただ、現在の登場人物の状態や、「禁止エリア」等の情報は節目節目で確認できるようになっています。

パロロワには、完結せず投げ出される物も多いのですが、これはちゃんと結末まで描かれています。テキストのボリュームも非常に多く、多分5時間は最低でも読むのにかかると思います。登場人物が多数登場するにもかかわらず、その一人一人の動静も非常に丁寧に描写されています。ちなみに「完全版」となっているのは、この作品はもともとVIPRPGの「祭り」の度に章が追加されるという形式で配布されていて、これが投下された「VIPRPG紅白2008」においてついに完結したという経緯からです。

VIPRPGの伝統に則り、ダウンロードファイル中にはRPG_RT.exeが含まれないので、何か他のRPGツクール2000製ソフトから抜き出してフォルダに入れる必要があるのでご注意を。

いりす症候群!(「滅」モード)

「いりす症候群!」に追加された「滅」モード。イベントで先行頒布されていたものが今年2月に無料でダウンロード出来るようになりました。ゲームルールが無印とやや異なっており、追加ストーリーも語られます。また、BGMも追加されており、既存のBGMもブラッシュアップされています。

ツイッターには書けない『ゴーストトリック』ネタバレつぶやき

  • 最終章は泣けて来るほどアツいというのはツイッターで書いたけど、一番泣けるのは「最後の運命更新」が終わって改変された世界で、あの仕掛けが「正しく」動作したところだった
  • ミサイルのなんと健気なことか

PRESS START 2010夜の部@東京芸術劇場(9/11)

物販では本日発売の5周年CDがイベント価格3000円で売ってた。エビテンで買ってたのでスルー

1.クロノ・トリガークロノ・クロス メドレー

再演だけど、曲増えてたかな

2.NewスーパーマリオブラザーズWiiメドレー

数少ない新規。杉並児童合唱団が「ワッ、ワー」を担当。杉並児童合唱団はまだまだ活躍します

3.ファミコンここまで出てるのにメドレー上級者編

再演。半分もわからなかったな…。曲リストは誰かに任せる。『たけしの挑戦状』では笑いが
ドラスレIV妙に静か…

4.ICO

再演。ED曲ボーカル付き。歌詞がスクリーンに映し出されるのは前にはなかったですね

5.ゼルダの伝説古代祐三バージョン

スマブラXで没になった幻のバージョン。
桜井さんは2分の曲を発注したつもりが、古代さんが勘違いして3分で作ってしまい、その後で2分バージョンも作り、折角なので合わせて5分のをスマブラXに収録しようとしたが、容量が足りなかった(笑)という曰く付きのアレンジ。
司会さんが「こういう話を聞けるのはPRESS STARTならでは」と言ってたけど、これはもう本人が以前言ってて有名な話…
一回聴いただけじゃあまり印象に残らなかったな、音源化希望

6.MGSPW

桜井さんいわくこれ歌ってる人は東海道新幹線の英語アナウンスもやってるそうです。
自分も聞いたことありますね

7.ロックマン2Dr.ワイリーの謎

再演。音のバランスが前回よりも良くなっていたと思います。桜井さん手作りのアートワークも健在(ただし説明無し)

8.ワイルドアームズセカンドイグニッション

再演。見事に口笛リベンジしてました(違う人だけど)

9.ナムコアーケードメドレー2010

新編曲による再演。特に言うこと無し

10.朧村正

数少ない新規その2。メインテーマ、とのこと。
植松さんも言ってましたが、和楽器とオケとディストーションギターの組み合わせがいいですね。
一応ゲームはやってるんだけど、そういやこんなメロディあったっけってぐらいの認識だったなあ。あとでゲームで聴き直すか。
同じアクションでもNewマリオの曲は印象に残ったのに、これやマリオギャラクシーの曲はいまいちなんだよな。
尺八の音量が安定していなかったのが気になる。

11.リズム天国

前回に引き続き「忍者」。植松さんが黒忍者のコスプレで登場www
酒井さん植松さんが一人ずつ参加者を募って、それぞれチームでやったあと、会場で
紫からお越しのナスさんがいいキャラしてました。
あと植松さんのセクハラまがい行為(「イヤーン」など)

12.ファイナルファンタジーX

「ザナルカンドにて」。いつもの。特に言うこと無し

13.MOTHERメドレー2010

1のCDのアレンジ。個性的な声のボーカルと、杉並児童合唱団による日本語発音の「ららら」が新鮮でした

アンコール

一発目はまさかのLocoRoco杉並児童合唱団とボーカル続投。タイトルでたときは客席から笑い声が漏れてましたね。
歌詞はローマ字で出てましたw
お次は佐野電磁さんと光田康典さんと、名前聞きそびれたけど多分岡宮道生さんの三人が芸人みたいな派手な色のスーツ姿で出てきて未発売のKORG M01クロノ・トリガーの世界変革の時と、知らない曲と、そして四魔貴族バトル1を演奏。
いつの間にかピアノのところにはイトケンさんが座っていて(気付いてびっくり)、四魔貴族バトル1が終わった直後、ロマンシング・サガミンストレルソング(再演)がスタート。
演奏終わってから初めてイトケンさんに気付いた人も多かったかも。
てかまともな紹介もなくそのまま終わっちゃったので最後まで気付かなかった人もいたんじゃ…
ちなみに杉並児童合唱団の出番はLocoRocoで終わってたけど、最後まで立ちんぼで待機してた…お疲れ様です

まとめ

全体的に音質は過去最高に感じられました
ただ、トーク少なめだったのが残念だった。特に、KORG M01について何の説明も無しというのは…ゲーム音楽好きだからといってみんなが知ってるわけじゃないですからね
今年は「"ゲーム音楽"三昧」とか「題名のない音楽会」というゲーム音楽に取って重要なイベントがあったのに触れられませんでしたし
あと、今年も浜渦曲はありませんでしたね…アンケにはサガフロ2曲希望って書いてきましたよ。あと同人も

@wikiに貼れる、CSVをWikiの表組み書式に変換するJavaScript

10/07/25更新

連続するダブルクオーテーションがダブルクオーテーションを表すのはエスケープされているときのみにした

今取り掛かってるWikiが大きな表をバンバン作るものなんですが、いちいち手動で打ち込むのは大変なので、表計算ソフトとかで作った表を変換できればいいなと考えてCSVから表組み書式に変換するJavaScriptを作ろうと思いました。*1
で、都合よく、借りてる@wikiではJavaScriptが使えたので、Wikiに埋め込めるようなスクリプトを作りました。

使用例http://www23.atwiki.jp/freegamemusic/pages/27.html

JavaScriptは初心者同然なので、非効率な書き方やバグなどあると思いますが、もし何か気になるところがありましたら指摘してくださるとありがたいです。

仕様

  • テキストエリアにCSVを貼りつけて"変換"ボタンを押す
  • "元に戻す"ボタンで変換前に戻せる
  • 正しい書式のCSVなら読み込めるはず
  • 間違っていても特にエラーは出さない
  • セル内での改行は改行プラグイン'&br()'に変換する
  • 連続する改行は削除される
  • セル中の'|'は文字参照に変換される(Wikiに貼りつければ'|'と表示される)
  • テキストエリアの行数は内容の行数で変わる

補足

  • 比較演算子を使ってないのは、@wikiに上げたときに実体参照に変換されてしまうからです
  • returnでの戻り値にカッコをしてスペースを入れないようにしているのは、@wikiに上げたとき、returnと戻り値の間に改行が挟まれて意味が変わらないようにするためです
    • 特に意識してませんが、同様の理由で文字列リテラルには半角スペースを入れるべきではないでしょう
  • 匿名関数の終わりに';'を付けているのは、逆に改行が取り除かれてしまうため
  • 長いswitch文はあまりよくないですね
var thisScript = (function (e) { if(e.nodeName.toLowerCase() == 'script') return e; return(arguments.callee(e.lastChild)) })(document);
var thisScriptParent = thisScript.parentNode;

function createButton(id,value) {
  var button = document.createElement('input');
  button.id = id;
  button.type = 'button';
  button.value = value;
  thisScriptParent.appendChild(button);

  return(button);
}

function createTextArea(id) {
  var textarea = document.createElement('textarea');
  textarea.id = id;
  textarea.cols = 10;
  textarea.rows = 10;
  textarea.style.width = '100%';
  thisScriptParent.appendChild(textarea);

  return(textarea);
}

function resizeTextArea(textarea) {
  var limit = 10;/* これ以上は小さくならないようにする */
  var lines = textarea.value.split('\n').length;
  var tmp = lines;
  for (;;) {
    if (tmp == limit) {
      tmp = lines;
      break;
    } else if (tmp == 0) {
      tmp = limit;
      break;
    }
    tmp--;
  }
  textarea.rows = tmp;
}

function csv2table(text) {
  var escape = false;/* エスケープフラグ */
  var bol = true;/* 行頭フラグ */
  var i = 0;

  var textArray = text.split('');
  textArray.push(null);/* 番兵 */

  for (;;) {
    if (bol) {
      textArray.splice(i,0,'|');
      i++;
    }
    var c = textArray[i];
    if (c == null) {/* 番兵が見つかったので終了 */
      textArray.pop();
      break;
    }
    switch (c) {
      case ',':
        if (escape == false) {
          textArray[i] = '|';
        }
        i++;/* gotoでdefaultに飛びたい… */
        bol = false;
        break;
      case '\"':
        textArray.splice(i,1);
        if (escape) {
          if (textArray[i] == '\"') {/* エスケープされたダブルクオート */
            i++;
          } else {
            escape = false;
          }
        } else {
          escape = true;
        }
        bol = false;
        break;
      case '\r\n':
      case '\r':
      case '\n':
        if (escape) {/* セル内改行 */
          textArray[i] = '&br()';
          i++;
        } else {
          if (bol) {
            textArray.splice(i-1,2);
            i--;
          } else {
            textArray.splice(i,0,'|');
            i += 2;
          }
          bol = true;/* エスケープしてないときにのみ行頭フラグオン */
        }
        break;
      case '|':
        textArray[i] = '|';
      default:/* 置換する以外はその他の文字と一緒 */
        i++;
        bol = false;
        break;
    }
  }
  if (bol) {
    textArray.pop();
  } else {
    textArray.push('|');
  }

  return(textArray.join(''));
}

new function () {
var idTextArea = 'my_textarea';
var idConvert = 'my_buttonconvert';
var idUndo = 'my_buttonundo';

var prevText = "";
var isConverted = false;

var buttonConvert = createButton(idConvert,'変換');
var buttonUndo = createButton(idUndo,'元に戻す');
var textArea = createTextArea(idTextArea);

textArea.onkeyup = function () {
  resizeTextArea(textArea);
};

buttonConvert.onclick = function () {
  prevText = textArea.value;
  textArea.value = csv2table(prevText);
  isConverted = true;
  resizeTextArea(textArea);
};

buttonUndo.onclick = function () {
  if (isConverted) {
    textArea.value = prevText;
    resizeTextArea(textArea);
  }
};
};

*1:何でJavaScriptでやろうとしたかというと、ブラウザの別のタブで開いておけば編集時に便利だと思ったから