今日の雑記

<< 2008/02 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29

back to TOP PAGE

 | 

2008-02-25

[] GP2X で開発してて辛い事

まあ今更というかなんというか、ここにこうして書くのもどうかというか、書いたところで新たなる開発者の可能性の芽を摘むことになるのは重々承知なのだが。

とりあえず列挙してみる。

  1. αとかまあつまり半透明周りは絶望
  2. なんでかっていうと「事実上8ビット固定」だから<サーフェス
  3. なので全てのサーフェスを共通パレットで絵を作る必要がある(<必ずしもそうでは無いんだけど)
  4. 拡大縮小に関してはまあ「限定」すれば不可能ではないけど実用的ではないね
  5. 「回転」に関しても同様で「事前に準備できる」んなら使ってもいいかも
  6. サーフェスを直接操作するのはそこまで遅く無いんだけど過信してはいけない感じ(フルスクリーン1枚くらいならありか?)
  7. CPUが二つあるんだけど事実上一つしか使ってないので二つ使わないとどうにもと言う感じ
  8. というかGP2Xの「SDL」はそんなに最適化されて無いっぽい(<憶測)のでそれが嫌なら専用でコード組む必要アリ(<恐らくエミュはそうしてるのでは?)
  9. 最終手段としては「CPUクロックを上げる」とかHogeHoge(<拙作サウンドプレイヤーでやったけどあれはむしろ『クロックダウン』だしなあ)

この辺にしとく。

以上を踏まえて「GP2Xゲームを作る」指針としては、「256色以内の古臭い感じのゲームを作る」には向いてます。これが「最低限」。

下手に「SDL 使えまっせ」というのが良くない。使えるけど、ねえ、というのが正直なところだ。

DK_alphaDK_alpha 2008/02/26 13:37 最近凄く思い当たる節が!
まぁSDLを使うとどうしても2Dになってしまいますよね。

DK_alphaDK_alpha 2008/02/27 12:32 忘れてましたが、SDLミキサーを使うとファイルアクセスでBGMが止まるとか。

トラックバック - http://d.hatena.ne.jp/isshiki/20080225

2008-02-23

軽く記述のみ

[] Project Euler

http://projecteuler.net/

最近やってます。

[] D BOF

http://www.ospn.jp/osc2008-spring/modules/eguide/event.php?eid=62

ボクもなんか話すくさいです。

では。

トラックバック - http://d.hatena.ne.jp/isshiki/20080223

2008-02-18

最近、いろいろ忘れてて良くないと思った。

きっと、SCSIHDD が飛んでしまったせいだ。ボクの記憶も一緒に飛んだよ<んな馬鹿

[] FM 音源の曲をチャンネルごとに聴く

という行為は随分前から、いや、FM 音源だけではなく PSG の頃からやっている趣味だ。MSX楽譜打ち込んで、チャンネルコメントして聴いてみる、みたいなことを高校の頃は随分やった。

最近はツールが発達しているおかげで、ツール上でリアルタイムにお手軽にできたりする。そこでいろんな発見もあったりする。

ボク自身は作曲できないので、そうやって聴いて得た知識を曲作りで発揮する場面なんて無いんだけど、それでもそういう発見楽しいというか、「軽い雑学」を入手した気分になれる。問題はそれすら「発揮する場」がない事なのかもしれないけど。

なので、ここで具体的に「このゲームのこの曲のこのチャンネルを切るとほら不思議!」なんて事を書いても誰も付いてこれない。ついてこれる方々にとっては「何を今更アホちゃうか?」とか言われてあっふ〜ん...。

でもまあ、興味ある方はその手のツールを入手してチャンネルごとに聴いてみてください。「あーこうやって音の厚みを増してるのねえ」とか、「あーこのチャンネルを殺して効果音出してるんだー」とか、いろいろ発見があるので。

問題はそうやって得た知識を(ry

FlorianFlorian 2008/02/19 09:20 個人的にはこの趣味かなり活用しています。作曲以外に。
寝るときにFM音源の曲を流しながら、特定のチャンネル(たとえばOPNのFM2とか)をひたすら追いかけているとかなりの確率ですぐ眠りにつけます。極度に疲れて不眠の時によくこの手を使います。
これを一般音楽でやるとなぜか眠れないんですよねー。不思議不思議。

みがくみがく 2008/02/24 22:46 昔、古代祐三氏の曲をチャンネル意識して聞いたとき(というかFMPとかで視覚したとき)はチビッたね本当に。

isshikiisshiki 2008/02/25 02:52 >昔、古代祐三氏の曲をチャンネル意識して聞いたとき(というかFMPとかで視覚したとき)はチビッたね本当に。
うおー久しぶり!元気してましたか?
上の話は、最近では古代さんや崎元さんの曲を MDXwin でやってたりしてます。MD とか PC88 のとかで。
特に MD の Guntlet とかでやってみると、なんつーか、驚きの連続というか、目から変な汗が出てくる勢いです。

ZinniaZinnia 2008/02/25 12:21 ガントレットはすごかった!
あとXakシリーズもけっこうすごかった!

isshikiisshiki 2008/02/26 01:11 >あとXakシリーズもけっこうすごかった!
あー当時のマイクロキャビンも行っちゃってましたねー。
MSX の FM 音源の使い方も上手かった記憶が。他社のと比べて音が厚かったんだよなあ。

トラックバック - http://d.hatena.ne.jp/isshiki/20080218

2008-02-17

[] 自作ゲームとキーアサイン

先日(http://d.hatena.ne.jp/isshiki/20080212/p1)の雑記は、以前(4年前?)に公開した「AREA2048」というゲームのキーアサインを追加しました、というものだったんですが。

家庭用ゲーム機とかと違って、PCゲーム作ってると「キーボードのどのキーにどう割り当てるか」という問題があります。国内だと何も考えずに「カーソル(and テンキー)+ZXC」くらいで良いんですが、海外(主に北米)の方に遊んでいただこうと思うと、文化の違いやらなんやらで、全く違うアサインをする必要があったりします。有名なところでは「WASD(<これが移動用のアサイン)+右SHIFT/バックスラッシュ」とかでしょうか?

先日、久々に EU 圏(恐らく)の方からメールを頂いて、その内容が「左SHIFTとか左CTRLとかに対応してほすぃ」というものだったんですよ。

んで、まあ、対応しました。追加するのは全然簡単なので。

今回の事で思ったのは、家庭用ゲーム機向けのゲームでもたまに見かける、「全部自分でエディットできるキーアサインモード」を実装すべきなのかなあ?と。確かにその方が親切だしね。

いっそその内容をテキスト保存しておいて、テキスト編集でも対応できるようにしておいた方がいいのかな?対応しているキーはそのテキストコメント部分に記述しておけば、コピペで対応できるし。

そういえば、国内の同人タイトルに対して苦言を呈しておくと、いい加減プレステパッド専用キーアサインをやめていただけませんか?というか、プレステパッドキーアサインにしているタイトルこそ別のキーアサインを用意しておくべきだと思うのですが。せめて「○が決定」とか(<あくまで国内限定の話)。「START」が決定とか、そんなにキー(というかボタン)が無いパッドとかありますからー。

まあそういうゲームに限って内容がどうでも良かったりするので別に構わないのですが(<おや大きく出たねえ)。

shinichiro_hshinichiro_h 2008/02/18 13:36 そんなあなたに SDL_pad とか。

isshikiisshiki 2008/02/18 14:53 あーそんなのありましたね忘れてました<ぉ

DK_alphaDK_alpha 2008/02/19 11:58 しかし4ボタンを決定に割り当てるのはやめてほしいな、と本当に思います。

2008-02-15

[][] mmsp2

J http://morihyphen.hp.infoseek.co.jp/log2/200802.html#02149

うほ!こんなところに情報が!

ありがとうございます。後で読む&試す。

dev][C] sizeof 追記

先日のコメントより。

gcc -std=c89 -pedantic a.c とすればC89のコードだけが通りコンパイルエラーにできると思います.

あー「-pedantic」なんてオプションがあったの忘れてた。めったに使わないからなあ。ありがとうございます。

トラックバック - http://d.hatena.ne.jp/isshiki/20080215

2008-02-13

[][] sizeof が定数で無い件

J http://morihyphen.hp.infoseek.co.jp/log2/200802.html#020813

隣の人がこういうコードを書いててびっくりした。動くらしい。これってC99準拠なんだろうか。

ほへえ。知らなかった。てっきり「コンパイル時定数(こんな言葉あったっけ?)」かと思ってた。

続きを読む

sa-ysa-y 2008/02/14 13:14 そもそもC89には可変長配列が存在しないので最初の結果が期待通りではないのだと思いますが…
gccの -std=c89 は指定した標準に対する非互換な機能を無効化しますが矛盾しない機能はそのまま通します.つまりC99のコードは(gccのサポートしている範囲で)通ってしましまうはずです.
gcc -std=c89 -pedantic a.c とすればC89のコードだけが通りコンパイルエラーにできると思います.

トラックバック - http://d.hatena.ne.jp/isshiki/20080213

2008-02-12

[][] AREA2048 Version UP (1.03)

AREA2048(Ver1.03) http://homepage2.nifty.com/isshiki/a2k.zip

About capped AREA2048 mail. Thanks!

He wrote. "I want to add and assign key."

I answered his request.

The release is the key assign additional.

It is detailed in the archive that includes reading the Readme.

The latest version, DMD Ver1.026 respond.

2008-02-05

[] そういえば最近聴いてなかったな

S&G の S の方。

まあ、 Paul Simon なんだけど。

というか、 S&G もご無沙汰だったな。久しぶりに堪能した。

[] そういえば taspo だよ

めんどくせえぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇなあ。

Google 風に記述してみた。したところで何の解決にもならんのだが。

実兄実兄 2008/02/10 00:15 >S&G
何聴いたー?やはりBookendか?

トラックバック - http://d.hatena.ne.jp/isshiki/20080205

2008-02-04

[] お気に入りのヘッドフォン

ちょっと調子悪くなってきた。今日は突然左チャンネルが聴こえなくなったり。

SONY MDR-505 http://www.ecat.sony.co.jp/headphone/product.cfm?PD=802&KM=MDR-505

まだ売ってるのかな?あれば欲しいのだが。

とりあえず、左聴こえない問題は端子拭いたら直った。でもできれば予備が欲しい。

しかし、この雑記AV 機器関連の事書くなんて珍しいな。書いてて恥ずかしくなってきた<なんでだよ

実兄実兄 2008/02/10 00:13 >しかし、この雑記で AV 機器関連の事書くなんて珍しいな。書いてて恥ずかしくなってきた<なんでだよ

ってかなんで?(笑)。
ちなみ私も1年以上使っていたノイズ・キャンセリング・ヘッドフォンがいきなり片方聞こえなくなった。右だけど。
1万円近くしたんだけどなぁ・・・・。
というわけで、今はふつーのインナーイヤーでお茶を濁す毎日(涙)。

トラックバック - http://d.hatena.ne.jp/isshiki/20080204

2008-02-02

[][] GP2X での libSDL_gfx の注意点

正確には「GP2Xでの」では無くて「8bit カラーモード」な訳だが。

GP2X」では、カラーモードというかプライマリサーフェスは「8bit」が推奨となっている。単純に「それ以外のモードが重い」せいなのだが。

んで、GP2X に標準で入っている(んだが Wiki では標準扱いになっていないみたいな)「libSDL_gfx」なのだが、これがまた、とんでもない事をしでかいてた。

ちなみにこの「libSDL_gfx」だが、こんな機能がある。

  • プリミティブ(線や四角三角や円)が描ける
  • 拡大縮小ができる
  • 回転ができる

まあこんな感じ。今回問題となったのは、このうち「回転ができる」部分。

問題となったコードを見てみよう。今回挙げるコードは「SDL_gfx-2.0.16」の「SDL_rotozoom.c」の641行目くらい?

void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos)
{
    int x, y, dx, dy, xd, yd, sdx, sdy, ax, ay, sw, sh;
    tColorY *pc, *sp;
    int gap;

    /*
     * Variable setup 
     */
    xd = ((src->w - dst->w) << 15);
    yd = ((src->h - dst->h) << 15);
    ax = (cx << 16) - (icos * cx);
    ay = (cy << 16) - (isin * cx);
    sw = src->w - 1;
    sh = src->h - 1;
    pc = dst->pixels;
    gap = dst->pitch - dst->w;

    /*
     * Clear surface to colorkey 
     */
    memset(pc, (unsigned char) (src->format->colorkey & 0xff), dst->pitch * dst->h);
    /*
     * Iterate through destination surface 
     */
    for (y = 0; y < dst->h; y++) {
	dy = cy - y;
	sdx = (ax + (isin * dy)) + xd;
	sdy = (ay - (icos * dy)) + yd;
	for (x = 0; x < dst->w; x++) {
	    dx = (short) (sdx >> 16);
	    dy = (short) (sdy >> 16);
	    if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) {
		sp = (tColorY *) (src->pixels);
		sp += (src->pitch * dy + dx);
		*pc = *sp;
	    }
	    sdx += icos;
	    sdy += isin;
	    pc++;
	}
	pc += gap;
    }
}

これをこうした。新しく付いてるコメント部分が問題の個所。

void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos)
{
    int x, y, dx, dy, xd, yd, sdx, sdy, ax, ay, sw, sh;
//  tColorY *pc, *sp;	// これは構造体なので(↓後述)でポインタ加算すると +4
    Uint8 *pc, *sp;	// なのでこうする
    int gap;

    /*
     * Variable setup 
     */
    xd = ((src->w - dst->w) << 15);
    yd = ((src->h - dst->h) << 15);
    ax = (cx << 16) - (icos * cx);
    ay = (cy << 16) - (isin * cx);
    sw = src->w - 1;
    sh = src->h - 1;
    pc = dst->pixels;
    gap = dst->pitch - dst->w;

    /*
     * Clear surface to colorkey 
     */
    memset(pc, (unsigned char) (src->format->colorkey & 0xff), dst->pitch * dst->h);
    /*
     * Iterate through destination surface 
     */
    for (y = 0; y < dst->h; y++) {
	dy = cy - y;
	sdx = (ax + (isin * dy)) + xd;
	sdy = (ay - (icos * dy)) + yd;
	for (x = 0; x < dst->w; x++) {
	    dx = (short) (sdx >> 16);
	    dy = (short) (sdy >> 16);
	    if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) {
//		sp = (tColorY *) (src->pixels);	// どこ指すんだという話
		sp = (Uint8 *) (src->pixels);	// きめうちだけど 8bit カラーなので
		sp += (src->pitch * dy + dx);	// 凄いところを指すポインタに
		*pc = *sp;			// オーバーしてたら凄いところに書き込みを…(実際してたし)
	    }
	    sdx += icos;
	    sdy += isin;
	    pc++;				// ここで +1 ではなくて +4 に
	}
	pc += gap;				// ここも同様だが、実際の値は「0」なので弊害無し
    }
}

まあ、これも移植性というかポータビリティ的に問題はあるので誉められたもんではないです。

元の原因となった「tColorY」という型ですが、見てみると…、

typedef struct tColorY {
	Uint8 y;
} tColorY;

これはないだろ…。「typedef」でいいだろうに…。

というわけで、GP2X 以外で「8bit カラーモード」を使ってる人は注意。

いねーよそんな奴。

[][] ここに至るまでの経緯

とある場所への報告のコピペ

  • ??:?? (isshiki) ・とりあえず、回転呼んだだけで落ちる->なんだこれ?
  • ??:?? (isshiki) ・仕方が無いので、付属ライブラリは捨てて自分でビルド->やっぱだめ
  • ??:?? (isshiki) ・とりあえず自分で調べてみる
  • ??:?? (isshiki) ・ソース追っかけて8bitの転送部分を切る->動いた->やはり貴様
  • ??:?? (isshiki) ・実際にドットを転送してる部分が怪しいので切る->やはり動く
  • ??:?? (isshiki) ・なんか転送時の型が怪しいので調べてみる->「構造体」かよ!
  • ??:?? (isshiki) ・8bit転送のはずなのに、構造体宣言のため p++ で +1 ではなく +4 に!
  • ??:?? (isshiki) ・Uint8 * に修正して実験->直った orz

こんな糞ライブラリ作った奴出てこい。

というか、GP2X 版はデバッグろくにされてないだろ?このライブラリに限った事ではないが。

あと、さっきも書いたけど、GP2X 以外で 8bit 環境で作っている人は注意してください。いないと思うけど。

o_megao_mega 2008/02/03 15:15 そもそもハードがデバッグされていない恐怖

isshikiisshiki 2008/02/04 01:28 ハードというよりファームウェア、ですな。

トラックバック - http://d.hatena.ne.jp/isshiki/20080202
 | 
20040203040506070809101112
20050102030405060809101112
2006010203040506070809101112
2007010203040506070809101112
2008010203040506070809101112
2009010203040506070809101112
2010010203040506070809101112
2011010203040506070809101112
2012010203040506070811
201301020708101112
20140203040509101112
2015010203040506070809101112
201601020304101112
20170405091012
201801020410
プロフィール

isshiki

isshiki

上級NEETの実態