いろいろな情報

フリーでゲーム関連の仕事(企画、シナリオ等、主に美少女ゲーム(エロゲー)のシナリオライター)をしています。

企画、ゲームシナリオ、その他文章の仕事募集中。お問い合わせはこちら

最近の仕事

乱れて交わる俺と姫ゲームシナリオ

WAFFLE様10周年のタイトルだそうです。

「メイドと魔術師」に続きファンタジーもののAVGシナリオに参加しています。

公開されているストーリーやキャラクター紹介を見た方はおやっと思ったかもしれませんが、前作「メイドと魔術師」と一部リンクしています。でも続編では無いので単体プレイでも問題なし、両方ともプレイする(どちらからプレイしても大丈夫)とより世界観が広がるかも──そんなゲームです。

ワッフル
メイドと魔術師

ノベルゲームのシナリオ作成奥義

己が持っているノウハウを無理矢理絞り出して1冊の本としてみました。

ゲームシナリオに関するノウハウだけでなく、「そもそもアドベンチャーゲームってどうやって動いているの? どうやってつくるの?」という疑問に答えられるような、ゲーム制作全般を見据えた内容となっています。

シナリオにはまったく関係無い小ネタあり、そもそもゲームですら無いオッサンホイホイあり(シナリオ本でBEEP音とか世界初だろう)、ずっと口頭でしか言わなかったノウハウ、映像脚本でよく使われるテクをゲームシナリオで使う方法、特殊な演出をシナリオではどう書くのかといったサンプルなどなど。

自分でいうのもなんだけど、これ1冊で何とかしようとせず他のシナリオ入門書とあわせると結構いいカンジです。

シナリオライター兼ゲームプログラマーだから書けた本……だと思います(汗)

最近の無

ページを作り直しました。TABLEタグからCSSに……

見た目同じなのでありがたみナッシング(笑)

置いてけぼり日記

はてなRSSに追加Add to GoogleMy Yahoo!に追加RSS Feed
何だか夏休みの宿題というかアサガオ観察日記の風体になってきた……。

首無しガンダム

昨日の朝見たらBパーツ上から背骨? が出ていて「グロさが増したなあ……」とか思いきや、今日になったら胴体と両腕が生えていてびっくり。
mixiでも同じ写真を掲載してザクヘッドの話をしたら、マイミクの人がコラージュでこんなのつくってくれました(笑)

 http://mixi.jp/view_diary.pl?id=1191705359&owner_id=181089
 コメントの一番上にて

日に日に画質が上がっているのは、少しずつズームを上げているからだったり。
今回のは1.5倍くらい。なんとかブレ無しでいけてます。
ガンペリーでの空中換装に失敗して、下半身だけ取り残されたガンダム。
なにやってんだよハヤトぉ!! という図。

お台場ガンダム

以前よりシュールさが増したかもしれーん。
というもの。
http://udagawafriday.ifdef.jp/minantoka.html

みな…なんとか

うちのイメージカラーを設定するとこんな感じかな。

そいやお台場ガンダムに関する日記に専用タグを付けました。もしかしたら、ちょいちょいネタにするかもしれないので。完成した暁には飽きると思いますけど(笑)
「1/1ガンダム」タグへのリンク(6/8タグ名変えました)
今日のガンダムは久々に見た目が更新されていて、腰回り……冷却フィルムが出てくる赤いアレと四角の黄色いアレができあがっていました。
撮影できたらまたアップするぜー。
お台場の1/1ガンダムだけど、ゆりかもめからだとこんな風に見えます。

お台場ガンダム

ゆりかもめから見えるのは、せいぜいデジカメで撮影できる程度の時間。
ピントを合わせる時間は無いので、ズームは等倍にして、あらかじめピントを合わせた状態で撮影に臨んでみた。
上記の写真は以下の場所から撮ったものだ。

お台場ガンダム

最初の写真を拡大するとこんな風。

お台場ガンダム

見ての通り、まだBパーツしかありません(笑)
しかも見えるのは数秒程度なので、ゆりかもめに乗っている人たちでこれに気付くのはほぼ皆無だったり。
まあ、腰から上もできてくれば「おや?」と思うかもしれないけどね。
「USB温度・湿度測定モジュール」というものを入手した。
http://www2.strawberry-linux.com/products/usbrh/

実際に組んでみた

単に室温を知りたいだけなので、別に100円ショップで買えばよしなんだが……まあ、なんとなく。
実際に使うにはプログラムを組む必要があるのだけども、使えるAPIは結構シンプル。

[DllImport("USBMeter.dll",CharSet = CharSet.Ansi)] public static extern String FindUSB(ref long index);
[DllImport("USBMeter.dll",CharSet = CharSet.Ansi)] public static extern long GetTempHumid(String dev,ref double temp,ref double humid);

ドライバは自動認識・自動インストール、供給されているUSBMeter.dllから上の2つを呼び出せば十分なわけで、

 String USBDEV = ""; // デバイスID
 long USBNUM = 0; // デバイスの数 or インデックス
 double temp = 0; // 温度(度)
 double humid = 0; // 湿度(%)

 USBDEV = FindUSB(ref USBNUM);
 GetTempHumid(USBDEV,ref temp,ref humid);

C#だとこんだけで温度が引っ張れる。
実はサンプルにはVBの場合とVCの場合しか無かったので、あえてC#で挑戦ってことで(笑)
Cサンプルを参考にアンマネージAPIの呼び出し宣言を書いていたのだけど、一部のlongパラメータがそのまま使えずに難儀した。あれこれ試していくうちにintにすればOKってことで落ち着いたが。
諦めかけたりもしたけど、メーカーサイトにあるサンプルアプリの再現はこの通り完成。

メーカーサイトには対応OSはXPと2000と書いてあるが、この通りVistaでも動かせるようになっている。.NET Framework呼び出しも少し工夫すればOKだ。

C#で書いたアプリ

ここまでできればあとは使いたいアプリに組み込むだけさーといいながら、実は温度計アプリ以上にネタはなかったりする(笑)
メーカーから提供される制御API「USBMeter.dll」の内部はブラックボックスであり、提供されているAPI自体もあとはテスト用ヒーターON/OFFとか、基板についているLEDのON/OFFとかしか機能は無い。本当にシンプルな回路なのだ。
以下にC#用に書いたラッパーを置いておくので、興味のある人はいじってみてほしい。もちろん、回路購入は必須です(笑)


  ■使い方
  public USBMeter usbMeter = new USBMeter(); // オブジェクトの初期化
  if(usbMeter.IsUSBMeter()){ // 回路が認識できるか?
    usbMeter.GetData(); // 値を取得
    textBox1.Text = usbMeter.Temp.ToString(); // 温度(℃)
    textBox2.Text = usbMeter.Humid.ToString(); // 湿度(%)
  }


  /// ----------------------------------------------------------------------
  /// <summary>
  /// USBMeter.dll呼び出しクラス
  /// </summary>
  /// ----------------------------------------------------------------------
  public class USBMeter {
    /// ------------------------------------------------------------------
    /// <summary>
    /// モジュールの検索
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern String FindUSB(ref long index);

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度・湿度の取得
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="temp"></param>
    /// <param name="humid"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long GetTempHumid(String dev,ref double temp,ref double humid);

    /// ------------------------------------------------------------------
    /// <summary>
    /// ヒーターの制御
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="val"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long SetHeater(String dev,int val);

    /// ------------------------------------------------------------------
    /// <summary>
    /// LEDの制御
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="port"></param>
    /// <param name="val"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long ControlIO(String dev,int port,int val);

    /// ------------------------------------------------------------------
    /// <summary>
    /// ファームウェアバージョンの取得
    /// </summary>
    /// <param name="dev"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern string GetVers(String dev);

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度・湿度の取得(2)
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="temp"></param>
    /// <param name="humid"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long GetTempHumidTrue(String dev,ref double temp,ref double humid);

    /// <summary>
    /// デバイス名
    /// </summary>
    public String USBDEV = "";

    /// <summary>
    /// FindUSBで取得される数値
    /// </summary>
    public long USBNUM = 0;

    /// <summary>
    /// パラメータ
    /// </summary>
    public struct USBMETER_DATA{
      /// <summary>
      /// 温度
      /// </summary>
      public double temp;

      /// <summary>
      /// 湿度
      /// </summary>
      public double humid;
    }
    public USBMETER_DATA Data;

    public USBMeter() {
      Data.temp = Data.humid = 0;

      USBDEV = "";
      USBNUM = 0;
      try{
        USBDEV = FindUSB(ref USBNUM);
      }catch{
        USBNUM = 0;
        USBDEV = "";
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// USBMeterが有効かどうかのチェック
    /// </summary>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public bool IsUSBMeter() {
      return USBNUM > 0 && USBDEV != "";
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 値を取得する
    /// </summary>
    /// ------------------------------------------------------------------
    public void GetData() {
      GetTempHumid(USBDEV,ref Data.temp,ref Data.humid);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 値を取得する(2)
    /// </summary>
    /// ------------------------------------------------------------------
    public void GetData2() {
      GetTempHumidTrue(USBDEV,ref Data.temp,ref Data.humid);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度を取得
    /// </summary>
    /// ------------------------------------------------------------------
    public double Temp {
      get {
        return Data.temp;
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 湿度を取得
    /// </summary>
    /// ------------------------------------------------------------------
    public double Humid {
      get {
        return Data.humid;
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// ヒーターON/OFF
    /// </summary>
    /// <param name="b">ONならtrue</param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public void SetHeater(bool b) {
      SetHeater(USBDEV,b ? 1 : 0);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// LEDのON/OFF
    /// </summary>
    /// <param name="port">LEDポート 0-1</param>
    /// <param name="b">ONならtrue</param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public void SetLED(int port,bool b) {
      ControlIO(USBDEV,port,b ? 1 : 0);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// ファームウェアバージョン
    /// </summary>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public string GetVersion() {
      return GetVers(USBDEV);
    }
  }


GoogleはTwitterのランキング特別扱いしている?
http://www.sem-r.com/google09/20090430150112.html

インデックス化をしていく上でたまたま相性がよいってことなのですかね。
twitterは特定ユーザーへのリプライはリンクで結んでいくけど、会話が加熱していけば、あるコミュニティ内で網の目のようにリンクが結ばれていくわけだ。
それが同一テーマであればあるほど、内部リンクが密になればなるほど、Googleからすれば重要な内容であると判断して順位が上がっていくと……?
なんとなくだけど、そんな感じなのかな。

そういう意味では、ブログなんかも同じ環境が自然にできあがるはずなんだけど……でもほら、ブログってもうアレですし。
昼から行動。
免許更新→上野で買い物→ウォッチメン→晩ご飯

恥ずかしながら、「ウォッチメン」は今年見てきた最初の映画だったりする _| ̄|○
http://www.watchmenmovie.co.uk/intl/jp/
http://www.youtube.com/watch?v=2VLA0tg5yI0 ←もう少し詳しい予告編
グロ、エロ、ちn(** ピー **)丸見えなヒーロー映画だった。
原作者のアラン・ムーアというと「V・フォー・ヴェンデッタ」があるけど、自分としては「ウォッチメン」の方が好みかな。
とにかく長い映画。163分だそうだから3時間弱。
物語の長さはしっかり感じるけど、見終わった後は500ページの小説を一気に読んだような満足感がある。
強制的に脳の筋トレをフルセットかまされた感じもするけど……まあ、気分よかったからいいや。

日本ではまず放送不可能な映画なのは間違い無い。
何しろDr.マンハッタンが丸出しですから(笑) 最初見たときは笑いそうになったわ。歩くとしっかり揺れるんだもん。

ヒーロー的展開を期待して見に行ったのだけど、それに相当するシーンはわずかしか無い。だけど文句を言う隙を見せないほど物語に引き込まれる。
ニトロプラスみたいな雰囲気を求める人なら間違い無くハマるかな。たぶん(←デモンベインしか知らんくせに)。
現在進行中の事件に合わせて回想シーンが差し込まれるのだが、その場その場で必要な情報のみ提供されていくので、頭で整理しなくてもすんなり入ってくるのがいい。
前半ぱっとしなかったナイトオウルが、じょじょにヒーローらしくなっていく課程はよかったなぁ。

とりあえずグラフィックノベルズ注文した〜。

検索キーワードTOP20