OneTimeInclusion
という便利マクロがあるらしい。VC++6.0の話。
使い方は
メニューバーから
「ツール」
「カスタマイズ」
カスタマイズダイアログでまず「アドインおよびマクロファイル」タブを開いて
中の「SAMPLES」マクロにチェックボックスをつける。
で、「キーボード」タブを開いて
カテゴリ:「マクロ」
下のリストボックスから「OneTimeInclusion」を選択。
キーを割り当てる( デフォルト環境だとCtrl+Qが空いているはずなのでそこに一時的に割り当てた )。
で、使ってみる。
Ctrl+Q( 割り当てたキー )でY/Nダイアログが開く。
個人的にVCの機能に寄りかかるのが好きではないので「Yes」を選ぶ。
ちなみに「No」だと「#pragma once」を挿入する。
「Yes」でインプットダイアログが開き制御変数の入力が入る。
#ifndef ほにゃらら
これで挿入してみたのがしたのヘッダファイル( 抜粋 )。
#ifndef __PLANE_H__
#define __PLANE_H__
//
// 機体クラス
//
// Copyright(c) 2006 KODAMA,Yoshinori All Right Reserved
//
#ifndef _plane_h_
#define _plane_h_
#include "wing.h"
#include "vector3.h"
// stlコンテナのためのforeachマクロ
#define foreach(a,b,c) \
for(a::iterator c=(b).begin();(c)!=(b).end();(c)++)
#define const_foreach(a,b,c) \
for(a::const_iterator c=(b).begin();(c)!=(b).end();(c)++)
#define dbg(a) \
printf(#a" : %f\n",a)
typedef unsigned int (__stdcall *THREADFUNC)( void* pParam );
// 親クラス
class CSky;
enum {
WING_HIGH = 0,
WING_MIDDLE = 1,
WING_LOW = 2
} ;
( 略 )
#endif
#endif //__PLANE_H__
元々自分で入れた物の上下にこのマクロで入れたものが入ってます。
便利だ。知らなかった…。
IDEの機能を知っているかどうかで生産性が倍くらい違うんではないか、と思った。
便利なIDEの使い方、って本でないかな。
ショートカットキーのコマンド覚えるだけでもだいぶ違うとは思うが。
何が正しいのか、何が正しくないのか
最近色々思うことがあるのです。
http://blog.livedoor.jp/erolin2ch/archives/500434.html : 大人の2ちゃんねる:もしアンパンマンがバイキンマンにお金払っていたら - livedoor Blog(ブログ)
ちょっぴり感動的なお話です。以下はねたばれを含みます。
実はバイキンマンは、アンパンマンが正義を守るために、アンパンマンから「悪」の仕事を委託されていた、というお話です。
( 余談ですが、アンパンマンは変換できて、バイキンマンは変換できませんでした )
途中でVIPPERの人たちがアンパンマンに殺意を抱いていますが、もしも、まだこの物語に奥行きがあったら、どうか。
バイキンマンの言うとおり、あるいはもっと深い理由でアンパンマンは正義を続けなければいけない、としたら。
まあ、アンパンマンの態度にはいささかの問題がありますが、それさえ説明がつきそうなものです。
コストを抑えるために、バイキンマンに本当の「復讐心」を植え付けるための演技だとしたら。
アンパンマンはなんで正義を守らなくちゃいけないんでしょうね…。
livedoorのことなんか、もう誰も見向きもしてないかも知れません。
あの会社のことが分からない。
粉飾決算は事実のようです。まあ、某社や某社も死ぬほど粉飾してますが、東証上場一部企業ですし…。
livedoorは虚業じゃない、という話を読みました。
確かに言われてみれば、マスコミで大々的に取り上げられて、サーバーにアクセスが集中しても尚、レスポンスが目に見えて悪化することなく粛々とlivedoorのサーバーは運転を続けました。
技術力はあるみたいです。
その他の画期的なシステム。
あるいは、livedoorが今みたいにM&Aの代名詞みたいになる前には自社開発の製品で評判を上げていたそうです。
虚業か実業かという割り切りに意味はありませんが、位置づけは分かりません。
表面には見えない物があるみたいですね…。
雑記
出ました「雑記」!
タイトルも考えるのが面倒なほどに疲れていると言い訳させてください。ゲームやってただけですが。
出掛けました。本屋まで。
…欲しい本があったらAmazon頼むもん。ほとんど本屋さん行かないんだもん。
スパイラルの14と15巻が出てたので買おうかな…あ。
持ち金601円。
…orz。
出掛けるときにお金を持ち歩く癖をつけよう。たまたま財布に入ってた小銭ですし、その601円。
小学生でも今日日買い物に行くときはお金を持っていくと言うに、むぅ。
あと昼に作ったクリームスパゲッティ( 手抜き。それほど手をかけたくなかったのです、昼飯ごときに )、
塩と砂糖を本気で間違えた。
…orz。
空想世界でも今日日塩とこしょう間違えるなんて下手なボケは引かれるというに。
お前はどんな萌えキャラかと。
もったいないので食べましたけどね。ええ。甘い。それほど入れなかったので( 触った感じで気付いたけど遅かった )食べられたけど、…塩と砂糖は中和できないことを改めて知りました( お菓子に塩を間違えて入れるの逆パターン )。
コンマニュ技術開発室 : スクリプト駆動ゲーム環境
ということで、メインの方のゲームエンジンはスクリプト駆動を中心に据えていきたい。
理由はシーケンシャルにゲームを制御できるので。
ゲームはその起動から
・初期化諸々
・オープニング( スプラッシュロゴなりライセンスの表示なりオープニングムービーなどなど )
・タイトル画面
|->ゲームスタート
|->ロード画面
|->エクストラモードとか
|->オプション画面
|->終了
現状cHapter-5はその全てをスクリプトで制御しています。
;
; スクリプトの例
;
; システムモードにする
; これで、メインメニューがセーブできなくなる
mode system
; タイトル画面を読み込む
load bg title001
fadein 1300
*mainloop
; メインメニューの表示
menu result
START
CONTINUE
LOAD
END
end
if result == 1 then ; 初めから
system clear ; パラメータをクリアして
exec start ; start.scrを読み込む
else if result == 2 then ; 前回の続きから
system continue ; コンティニュー( 最新のセーブデータをロード )
else if result == 3 ; ロード
system load ; ロード画面へ移行
else if result == 4 then ; 終了
system exit ; アプリケーションを終了する
endif
goto mainloop
こんな感じ。
余談ですが、書籍「アドベンチャーゲームプログラミング」のサンプルをすごい勢いで改良したのがこのエンジンです。
多分ソースコードの3分の2程度は自作です。残りはサンプルのまま…だと思いますが、ほとんどの関数に手を入れてありますね。
さて、見事にスクリプト本位、スクリプト駆動なゲーム実行環境です。
ゲームの立ち上がりから終了までの全てがスクリプトに記述されています。
これをそのままCOMBAT MANEUVERにも当てはめればよいわけです。
オープニングでDirectXGraphicsの機能をフル活用した演出で画像をぐりぐり動かしたりするのも
system opening
という命令一発でオープニングのぐりぐりをやればいいわけです。
battle battle01.xxx
で戦略シミュレーションモード開始。
みたいなね。
幸いにもアドベンチャーゲームプログラミングのスクリプト仕様には一通りの制御構造が含まれており( ifとかサブルーチンとか )、問題ありません。
無ければ足せばいいですし( forループとかね。要るかどうかは不明だなあ )。
ちうわけで、cHapter-5をもう一度ちゃんと書き直すことにしましょう。拡張しまくって汚いので。
あと描画は基本的にDIBベース。
GetDCでGDIを使っていく方向で。…慣れてるからね。
アルファブレンドなんかはMMXでごりごり書きましたが( ダブルピクセル更新萌えー! )ビデオカードにやらせた方が早いみたいですね。
あとGetDCが遅い遅いと脅されていたのですが( MicrosoftのQ&Aみたいなのとか )そんなに遅くないそうです。少なくともGDIベースと同じくらい、かも、だそうで。遅い処理だけDirectXGraphicsフル活用すれば良いだけですしね。
よーし、さいせっけいさいせっけい!
と、同時にパイロットディスクも視野に入れた立ち絵、UIまわり等の素材作りも平行して…。
いつまでも著作権が他の誰かにあるおにゃのこの絵では制作過程でスクリーンショットをとるのもままなりません(汗
コンマニュ技術開発室 : 展望
コンマニュの開発再開です。
今日が3月6日であることに注目されている方もいるかも知れませんが、甘い。2日ぐらい甘い。
さあて来週のサザエさんは…。
新しいシリーズではなくて、企画室に対抗して技術開発室です。
今回はCOMBAT MANEUVERのインターミッション部分に使う汎用スクリプト駆動ノベルエンジンcHapter-5の展望について。
トラックバック先の「今か無しか」の2004年5月20日の話です。
やってみました体験版。
ノベルゲームエンジンで、特に描画面、演出面で話題になることが多いアージュのAges、rUGPですが、これらは描画にGDIを使っています。
わかる人にはわかると思いますが、蛇足の解説。
GDIというのは、Microsoft Word等でも使われているウィンドウに絵を描くための機能。今cHapter-5はGDIで動いています。
利点は機種依存性が低いこと。欠点はなにより遅いのです。
具体的にはWindowsのGDIを通して画面描画を行うので、Windowsが動くパソコンなら、必ず描画は成功します。
どんなビデオカードも手なずけたマネージャーさんを通して仕事をするので、どんなグラフィックボードでも動くのです。
ただ、何でもかんでもGDIというビデオカード担当のマネージャーさんを通してお仕事を依頼するので遅いんですね。
それに、ゲームで使われることを想定していません。
そのためにマイクロソフトが出したのがGameSDK。後のDirectXです。
「今か無しか」の2004年5月20日で話題になっているのLittlewitchのFloating Frame Director( 以下FFD )はDirectXの機能であるDirectDrawを使っているようです。
DirectDrawのアクセラレータを無効にしたら警告が出た上に遅かったです。特に全領域描画が。
cHapter-5の次期バージョンはDirectDrawベースのシステムになると思います。3Dアクセラレータを使いたくない、という方向で。
DirectDrawはGDIよりもグラフィックボードにべったりくっついて、ハードウェアアクセラレーションが効くような処理は全てハードウェアアクセラレーションを利用し、無い部分はソフトウェア処理をする。
主にゲームに必要な機能について、このような処理をすることで高速化を図りました。
もちろんソフトウェア処理は遅いです。でも、半ばハードウェアメーカーに「この機能、ハード実装しとけや」と命令することに等しいため、マイクロソフトのDirectXが採用した機能はいち早くハードウェアアクセラレーション対応になるわけです。
DirectX x.0対応グラフィックボードなんて言うのは、これのことを指してます。
さて、LittlewitchのFFDですが、というよりもプログラム自体、演出自体、良かったです。
さすがDirectDrawアクセラレーションが効くだけあって描画が淀みなく続きます。この点rUGPだとGDIの限界なのか、ロボットががしゃがしゃ動くと描画がかくかくします。
あとコンシューマーゲームみたいに画面のいろんなところが動きます。メニューを出すにもかったるくない範囲で右からすっとメニューが伸びてきたりします。
下手にフェードでシステム設定画面にはいるよりよっぽどストレスレスなゲーム環境です。
スキップは悪くないです。x32が一番速いモードですが、x64があっても良いと思います。
いやしかし実用的には十分でしょう。スキップって難しいんですよ。ええ。
FFD色々芸が細かく気の利いたシステムと言って良いと思います。
システムの一つの到達形としては「それは舞い散る桜のように」のシステムFullEffect.exeが上げられるでしょう。
ノベルエンジンとして必要にして十分な機能を備え、ストレスレスという観点から見れば最高の環境です。とても丁寧に作られたエンジンです。スキップは超高速でがくがくしたりせずグラフィックが読み込まれようが何をしようがするすると進んでいきます。
FFDが良い刺激になりましたまる。
さて、「今か無しか」の2004年5月20日の続き。
何故PCゲームと言う物は、わざわざHDDにインストールしなければ遊べないのでしょうか?
少なくともPS2以上のメモリ容量と、(多分)数倍高速に回転するDVDドライブ(あれ、DVDドライブって倍速とか無いんだっけ?)を持っているのですから、コンシューマと同じ作り方をすれば、円盤から直接起動する事が出来るのではないでしょうか? ストリーミング? キャッシュしなさいよ。データが圧縮されている? リアルタイムで解凍すればよろしい。
数メガバイトのメモリと等速CD-ROMで動かしていた時とは時代が違うのです。FateやQuartett!では、コピープロテクトの為にCDを一枚使っていましたが、これって、HDDにインストールする事が前提になっている為に発生する事であって、本末転倒ではないでしょうか?(もちろん、ディスク起動にしたところでコピープロテクトは必要になるんですけど)
思いつきで喋ってるんですけど、「HDDインストールは伝統的に行われているに過ぎない」を覆す論拠ってありますかね? 汎用OS上で動くアプリケーション特有の問題とかあるんでしょうか?
( quote from 、「今か無しか」 2004年5月20日 " PCゲームの謎 ")
むむむ。
これについてはcHapter-5でCDROMプレイを目指して再設計を行っています。
もともとは超高速スキップを実現するための効率的なグラフィックキャッシングの研究ということで、いろいろとやっています( 画面表示と同期しないスキップの実験などもやってます )。
これを応用すれば、効率的なデータキャッシングとデータ読み出し最適化( ファイルのパッケージングとか )によって、CDROMプレイが可能ではないか、という考えに至りました。
さて、問題点は「データをどうやって保存しよう」。
ここで言うデータとは
・セーブデータ
・ユーザ固有の設定データ
のことですが、どうしましょう。
一番良いのは
・レジストリにセーブデータ位置を記憶してセーブデータ位置は適当なところ( ユーザの指定可能 )に配置
というものです。レジストリいじるなとか言うな! *.ini原理主義は無視して進めます。
レジストリってゴミが残っても問題ない気がします( 数byteデータが大きくなった程度で有意な性能低下は認められないと考えられる )。
それに正しく削除すれば良いだけですしね。もちろん、ちゃんと消す手段を提供するのが前提です( ゴミデータがあることが良いことであるわけはない )。
Windows OSに根ざした問題というのはそれほど考えられませんね。
というわけでcHapter-5再設計開始です。
とりあえず描画関係全部載せ替えないといけないな…。
手抜きマルチスレッドをちゃんと実装し直さないといけないし…前途多難ね。
Googleデスクトップ
新しもの好きなので、入れてみました。
http://desktop.google.co.jp/ja/index.html : Google デスクトップ
えと、今インデックス作成中で、単にウェブ検索をデスクトップから出来るだけになってますが、これが稼働した暁には「ひぐらし」と入力すればスタートメニューの中からひぐらしを見つけて起動することも出来るそうです。
ローカルに保存したウェブページが大量にある自分としては、いつかNamazuやらGETAやらを駆使してインデクシングしてやるぜぐらいは思ってたのですが、グーグルデスクトップだけでこの目的は達成されてしまいました。
ウェブで見たページを勝手にキャッシングしてくれるそうです。
詳しくは上記のページをどうぞ。
ただ、サイドバーの説明のところにあるサイドバー例に
「株価情報
GOOG 318.27 -0.41」
株価下がってるじゃん。気を遣ったりはしないのがGoogleクォ リティ。変に媚びるより良いですが。良いのか…。
コンマニュ企画室 : 2 styles, 2 alignment
自作戦術級シミュレーションゲームCOMBAT MANEUVER in 2011( 仮 )のシナリオ/企画を考えようと言うマニアのためのシリーズです(コピペ)。
自衛隊の出動の話。
二種類あるのは皆さんもご存じ…ではないかも知れませんのでご説明をば。
一つは「治安出動」。もう一つは「防衛出動」
読んで字の如くではありますが、以下解説。
・治安出動
字の通り、治安を守るための出動です。
例えば強盗犯程度ならば警察の機動隊なんかで鎮圧できます。
ならば、テロとか、素人ではない犯罪集団が強力な指揮統制下に集団的な犯罪を起こしたら、どうなるか。
あるいはその犯人が密輸した小型ランチャーを以てミサイル攻撃を首都東京に対して行おうとしたら。
治安維持活動において、警察の処理能力の限界を超えたとき、より専門的でより強力( 強制力の強い )な法執行能力を持つ自衛隊が出動し、状況の対処に当たることを治安出動といいます。
ちなみに内閣総理大臣が発令の権限を持っています。
防衛庁長官には「出動準備」命令の発令権限があります。
ちなみに治安維持活動ですので、警察と同じ「警察官職務執行法」の適用を受けます。よって、決められた要件の下においてのみ武器の使用を許可されます。
海上保安庁の治安出動を海上警備行動といいます。概要は同じです。
・防衛出動
端的に言えば戦争状態における自衛隊の出動です。
発令に際しては国会の承認が必要です。
防衛出動が発令されたときは、有事下、戦争状態下であるので、隊員は武器の使用を完全に許可されます。
内閣総理大臣が発令の許可を持っており、防衛庁長官には「出動準備」命令の発令権限があります。
海上保安庁を防衛庁の指揮下、自衛隊の統制下に編入することが出来ます。海の上に人は住んでいないので、治安維持をしなくても良い、というか海は日本の国境ですので、警察程度の武装ではやられてしまうのです。
ですが、実際に編入されることはあまり考えられませんし、編入されたとしてもその活動には警察官職務執行法の適用を受けることになります。
ちなみに、この状態ではジュネーブ条約の適用を受けるので、防衛出動下における拘束員は戦時捕虜として人道的に扱わねばならず、警察による取り調べ等は一切禁止です。
また、防衛出動命令下では、つまり戦争状態下では警察が敵に対して武力を行使することは全面的に禁止されています。警察が敵と交戦するためには交戦相手団体に承認を得なければなりません。
ちなみに戦争行為そのものに関してもハーグ陸戦規約をはじめとするルールがたくさんあって、必ずしも戦争が無秩序かつ野放しに行われるわけではないのです。戦争にもルールはあります。
次は先制的自衛権の話が上がると思います。
教育という制度を教育するという制度を教育するという制度を…
前にあった青臭い文章( 昔のブログは抹消したいんです実は )を書く時期は過ぎましたので。
"提案"って言う意味がしっくり自分の中で落ち着いてます。
昔冗談で、友達と話をしていたんです。
「だから、FAXの作動原理を知らない奴の中のFAXみたいに、霞ヶ関に張り巡らされたチューブの中を秒速うん十メートルでスパーって書類が行き交ってキャッチしようとすると手がスパーってかまいたちみたいな」
さて、この言葉。いつも僕が馬鹿ばっかりを言っているからかも知れませんが、実は僕の言葉の三分の一は実に真面目なことを馬鹿のオブラートで包んで出していたりします。
民主主義、というシステム。
民主主義は、主義ではありません。
民主制度、民主政治、というシステムの名前です。
それはつまり、「民衆が政治の主導権を握っている」という体制を表す物です。
僕たちは、殻を破らないといけない。
僕たちは、民主政治のこの国で、教育を受けています。
当たり前のことに気付かないといけないんです。
民主体制下で、民主政治を無下にするような言動は、許されない。
体制批判はどこの政治体制でも、タブーです。当たり前です。僕たちが寄りかかっているシステムを壊すなんて、自殺行為です。
だから僕たちは、中学校で、小学校で公民を習っても「民主主義」システムがどう運用されるかを学んでも、他のシステムとの対比、あるいは長所短所。つまり、本質に良く迫るようなことは学ばないのです。
本質に迫る必要はないのです。僕たちはその中に居るんだから。
件の友達は僕の発言の前に言いました。
「そんなことしたら、例えばミサイルが飛んできて迎撃しようとしても迎撃の許可が下りないから、だめじゃん」
それが、民主主義の限界です。北朝鮮云々、制度改革がどう、そういう議論がありました。
僕はそういう頭の悪い議論を見ながら、なんか頭がじんじん来ちゃったので( 伊集院的表現 )見ないようにしましたが、つまりそういうことです。
さて、こっからがCOMBAT MANEUVERの話。
現状、日本国憲法には「国家緊急権」に関する規定はありません。
当たり前ですね。
国家緊急権が何のことなのかはWikipediaでちゃんと見てもらった方が良いのですが、簡単に説明すると「政府が倒れそうなときは緊急避難措置を執っても良い」
国家緊急権の代表的な措置が「戒厳令」と呼ばれる物です。重大な危険が迫っている場合には国民の行動を制限して、起こりうる事態に備える。
ここら辺の話はパトレイバー2をご覧ください。ちょろっと出ます( アニメ薦めるあたりが真面目なんだか不真面目なんだか )。
現状、国家緊急権は日本国憲法に定められていませんし、戒厳令も定められていません。
まだ詳しくは読んでいないのですが、武力攻撃事態法のあたりに記述がありました。が、憲法の後ろ盾はありません。別にどうということはないのですが。
民主体制( 主義、というと語弊を招きそうで )には「国家緊急権」というパッチを当てないとその運用に重大な危険をもたらすセキュリティホールが開いている、とは学校で教わりません。
当たり前です。僕たちはその中で暮らしている。動揺を煽るような真似をするはずはありません。
民主主義にはもともと「迫り来るミサイルをその場で迎撃する」力はないのです。
僕たちは、それを承知で暮らしていかなければいけない。けど、知らない。
だって、効率を最優先にして、社会的平等( 最大多数の最大幸福byJ・S・ミル )を最優先にして「即応性」を犠牲にするシステムなんだから。
だから、知っておくのはよいことです、というお話でした( 嘘。行間を読む、というやつです )。
政治体制って色々種類があってたとえが悪いけどトレーディングカード感覚で覚えていくとコレクションの感覚が味わえておもしろいです。
COMBAT MANEUVERにどう絡むかは…わかる人にはわかるかも知れませんね。
以上のようなことをCivilizationをやりながら思いました。
民主主義にも色々あって代表的なのは「自由民主主義」「社会民主主義」「人民民主主義」…、それぞれ違います。Civilizationでも現実でも。

