れーすのエグゼ流星Blog

エグゼとゲームと雑記

エグゼ解析したりゲーム作ったりいろいろ。

サイト案内(初めての方はこちらを)

初めまして。れーすです。

ここのブログに訪問したのは「流星のロックマン」や「DSネット対戦」などで検索したのがほとんどだと予想しているため、案内を記しておきます。

 

ニンテンドーDSのネット対戦(熱帯)について

 

exe-race.hateblo.jp

exe-race.hateblo.jp

exe-race.hateblo.jp

exe-race.hateblo.jp

 

 

 

ロックマンエグゼ5 チップトレーダー出現チップリストまとめ

エグゼオフを主催したときに収集したデータを記事として掲載しておきます。

エグゼ5ガチャ限リスト

ヒグレヤ(ノーマル)

キャノン
エアシュート
バルカン1
バルカン2
スプレッドガ
マークキャノン1
パルスビーム1
センシャホウ
ワイドショット
エレキリール1
サボテンボール1
サンダーボール
トルネード
ミニボム
エナジーボム
ブラックボム
アースクエイク1
マグマシード
オーシャンシード
アイスシード
クサムラシード
ソード
ワイドソード
ロングソード
カスタムソード
イアイフォーム
フウジンラケット
エンゲツクナイ1
サムライソード1
ヨーヨー
ドリルアーム1
スカルチェーン1
アクアわーる1
エアホイール1
ファイアパンチ
ヒートボディ1
サイドバブル1
カスタムボルト1
ブーメラン
メテオアース1
イナズマキング1
ウッディノーズ1
カモンレイン
カウントボム1
ボーイズボム1
ストーンキューブ
トップウ
スイコミ
オウエンカ
レッドフルーツ1
メットガード1
カースシールド1
クラックアウト
ダブルクラック
トリプルクラック
リカバリー10
リカバリー30
リカバリー50
リカバリー80
パネルスチール
エリアスチール
パネルリターン
デスマッチ1
ヘビーゲージ
ブラインド
インビジブル
バリア
バブルラップ
コピーダメージ
ライフシンクロ
アタック+10
カラーポイント

ごうかきゃくせん(スペシャル)

キャノン
ハイキャノン
エアシュート
バルカン1
バルカン2
スプレッドガ
マークキャノン1
マークキャノン2
パルスビーム1
パルスビーム2
センシャホウ1
センシャホウ2
ワイドショット1
ワイドショット2
エレキリール1
エレキリール2
サボテンボール1
サボテンボール2
ミニボム
エナジーボム
ブラックボム
パラライズボム
アースクエイク1
アースクエイク2
バグボム
マグマシード
アイスシード
オーシャンシード
クサムラシード
ソード
ワイドソード
ロングソード
イアイフォーム
エンゲツクナイ1
エンゲツクナイ2
サムライソード1
サムライソード2
ドリルアーム1
ドリルアーム2
スカルチェーン1
スカルチェーン2
アクアワール1
アクアワール2
エアホイール1
エアホイール2
ファイアパンチ
ファイアパンチ
ヒートボディ1
ヒートボディ2
サイドバブル1
サイドバブル2
カスタムボルト1
カスタムボルト2
メテオアース1
メテオアース2
スペースユラ1
スペースユラ2
イナズマキング1
イナズマキング2
ウッディノーズ1
ウッディノーズ2
カウントボム1
カウントボム2
ボーイズボム1
ボーイズボム2
ストーンキューブ
トップウ
スイコミ
オウエンカ
ディスコード
レッドフルーツ1
レッドフルーツ2
メットガード1
メットガード2
カースシールド1
カースシールド2
クラックアウト
ダブルクラック
トリプルクラック
リカバリー10
リカバリー30
リカバリー50
リカバリー120
リカバリー150
パネルスチール
エリアスチール
パネルリターン
バスターアップ
ブラインド
インビジブル
バリア
バリア100
バブルラップ
コピーダメージ
ライフシンクロ
アタック+10
カラーポイント
ロール
ジャイロマン(ブルース)
ナパームマン(ブルース)
マグネットマン(ブルース)
シャドーマン(カーネル
トマホークマンカーネル
イトマンカーネル
リザードマン
シェードマン
クラウドマン

オラン島(スペシャル)

キャノン
ハイキャノン
メガキャノン
エアシュート
バルカン1
バルカン2
バルカン3
スプレッドガ
マークキャノン1
マークキャノン2
マークキャノン3
パルスビーム1
パルスビーム2
パルスビーム3
センシャホウ1
センシャホウ2
センシャホウ3
ワイドショット1
ワイドショット2
ワイドショット3
エレキリール1
エレキリール2
エレキリール3
サボテンボール1
サボテンボール2
サボテンボール3
エレメント嶺二
サンダーボール
トルネード
ノイズストーム
ミニボム
エナジーボム
メガエナジーボム
クラックボム
パラライズボム
リセットボム
アースクエイク1
アースクエイク2
アースクエイク3
バグボム
ホウガン
ブラックボム
カンケツセン
マグマシード
オーシャンシード
アイスシード
クサムラシード
ソード
ワイドソード
ロングソード
ワイドブレード
ロングブレード
カスタムソード
バリアブルソード
イアイフォーム
フウジンラケット
エンゲツクナイ1
エンゲツクナイ2
エンゲツクナイ3
サムライソード1
サムライソード2
サムライソード3
ヨーヨー
ドリルアーム1
ドリルアーム2
ドリルアーム3
エアホッケー
スカルチェーン1
スカルチェーン2
スカルチェーン3
アクアワール1
アクアワール2
アクアワール3
エアホイール1
エアホイール2
エアホイール3
ファイアパンチ
ファイアパンチ
ファイアパンチ
ヒートボディ1
ヒートボディ2
ヒートボディ3
サイドバブル1
サイドバブル2
サイドバブル3
カスタムボルト1
カスタムボルト2
カスタムボルト3
ブーメラン
メテオアース1
メテオアース2
メテオアース3
スペースユラ1
スペースユラ2
スペースユラ3
イナズマキング1
イナズマキング2
イナズマキング3
ウッディノーズ1
ウッディノーズ2
ウッディノーズ3
バンブーランス
ツナミホール
アカツナミホール
ドロツナミホール
カモンレイン
カモンスネーク
マグナム
サークルガン
カウントボム1
カウントボム2
カウントボム3
ボーイズボム1
ボーイズボム2
ボーイズボム3
ステルスマイン
ストーンキューブ
トップウ
スイコミ
オウエンカ
ディスコード
ティンパニ
サイレンス
レッドフルーツ1
レッドフルーツ2
レッドフルーツ3
ラニンギョウ
メットガード1
メットガード2
メットガード3
カースシールド1
カースシールド2
カースシールド3
クラックアウト
ダブルクラック
トリプルクラック
リカバリー10
リカバリー30
リカバリー50
リカバリー80
リカバリー120
リカバリー150
リカバリー200
リカバリー300
パネルスチール
エリアスチール
スチールゼリー
スチールパニシュ
スチールリベンジ
パネルリターン
デスマッチ1
デスマッチ2
デスマッチ3
ヘビーゲージ
クイックゲージ
バスターアップ
ブラインド
スーパーキタカゼ
ホーリーパネル
インビジブル
バリア
バリア100
バリア200
バブルラップ
カキゲンキン
ダイコウズイ
ヒライシン
マヨイノモリ
カワリミ
シラハドリ
ナビスカウト
バッドメディス
コピーダメージ
ライフシンクロ
アタック+10
ナビ+20
カラーポイント
ブルース(ブルース)
サーチマン(サーチマン)
メディ
カーネルカーネル
ナンバーマン(カーネル
トードマン(カーネル
コスモマン
スワローマン
フットマン

GBAプログラミング 5日目

取り組んだ内容

Tutorial.6 キー入力とデバッグ
http://akkera102.sakura.ne.jp/gbadev/index.php?tutorial.6

やってみたこと

1.上 下 右 左 Bボタンのキー入力、同時入力の受け取りをVisualBoyAdvanceのloggingを用いて確認してみる

f:id:rai17321:20180606160308j:plain

#include "lib/gba.h"

//---------------------------------------------------------------------------
void WaitForVsync(void)
{
	while(*(vu16*)0x4000006 >= 160) {};
	while(*(vu16*)0x4000006 <  160) {};
}
//---------------------------------------------------------------------------
int main(void)
{
	// モード設定なし

	u32 x = 0;

	for(;;)
	{
		WaitForVsync();

		if( !(REG_KEYINPUT & KEY_UP)  ) TRACEOUT("上ボタン\n");
		if( !(REG_KEYINPUT & KEY_DOWN)) TRACEOUT("下ボタン\n");
		if (!(REG_KEYINPUT & KEY_LEFT)) TRACEOUT("左ボタン\n");
		if (!(REG_KEYINPUT & KEY_RIGHT)) TRACEOUT("右ボタン\n");

		//if (!(REG_KEYINPUT & KEY_UP & KEY_DOWN)) TRACEOUT("上と下\n");
		//if (!(REG_KEYINPUT & KEYIRQ_OR & KEY_RIGHT)) TRACEOUT("テスト\n");

		if( !(REG_KEYINPUT & KEY_A)   ) TRACEOUT("%d回押したよ\n", x++);
	}
}

考察

コメントアウトした部分の動作がうまくいかなかった。
&条件なので上と下を押さないと動作しないはずが、常に動作してしまっている。
KEYIRQ_ORとかを使うみたいなんだけど、使い方がよくわからなかった。

GBAには標準でリセット(A & B & SELECT & START)機能があるので、実装はできるはず。

GBAプログラミング 4日目

取組んだ内容

tutorial.4

mode4

やってみたこと

1.フレームバッファを無限ループでずっと切り替えさせてみる。

 

int main(void)
{
	// モード設定
	// 4bit目(BACKBUFFER)を1にすることで、フレーム2が有効になります
	SetMode(MODE_4 | BG2_ENABLE | BACKBUFFER);

	// 画像と色データの読み込み
	Mode4SetFrame((u8*)&frame1Bitmap, 1);
	Mode4SetFrame((u8*)&frame2Bitmap, 2);

	Mode4SetPalette((u16*)&frame1Pal);

	while(1){
	SetMode(MODE_4 | BG2_ENABLE);
	SetMode(MODE_4 | BG2_ENABLE | BACKBUFFER);
	}
	

	for(;;)
	{
	    WaitForVsync();
	}
}


f:id:rai17321:20180530155500j:plain

考察

 フレームバッファが画面切り替えに使われるのはわかったけど、BACKBUFFERの値をソースコード上で変えたら切り替わるのか?
という考えから、試しに無限ループでやってみたところ見事にヒット。

BACKBUFFERが定義されているのは
#include "lib/gba.h"
#include "res.h"
のどちらなのかな。

そして、助言をいただきはてなブログの記法を見たままからはてな記法にしました。
これでソースコード問題も解決だね!

GBAプログラミング 3日目

取組んだ内容

tutorial.3

ビットマップモード

 

やってみたこと

1.png画像を出力してみる

 

// 画像の読み込み

Mode3DrawImage((u16*)&imageBitmap);

f:id:rai17321:20180524133602j:plain

読み込ませるときの処理がよくわからない。

チュートリアル3のフォルダを流用し、gritで画像をGBA用に変換したものを読み込ませようとしたら、どうやらどこかの処理で画像をGBA用に変換、インポートまでしてくれてるみたいだ。(tut3/res)

楽っちゃ楽だけど、仕組みをきちんと知りたさがある。

 

 

2.四角形の描画をしてみる

f:id:rai17321:20180524142928j:plain

 

#include "lib/gba.h"#include "lib/gba.h"
//---------------------------------------------------------------------------

void WaitForVsync(void)

{ while (*(vu16*)0x4000006 >= 160) {};

while (*(vu16*)0x4000006 <  160) {};}

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

void Mode3PutPixel(u32 x, u32 y, u16 col){

u16* ScreenBuffer = (u16*)0x6000000; ScreenBuffer[y * 240 + x] = col;}

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

// モード3で四角形を塗りつぶすvoid Mode3DrawBox(u32 sx, u32 sy, u32 ex, u32 ey, u16 col){ u32 x, y;
for (y = sy; y<ey; y++) { for (x = sx; x<ex; x++) { Mode3PutPixel(x, y, col); } }}int main(void){ // モード設定 SetMode(MODE_3 | BG2_ENABLE);
// ドットの描画 u32 sx = 50; u32 sy = 50; u32 ex = 150; u32 ey = 150; u16 col = RGB5(31, 31, 31);
Mode3DrawBox(sx,sy,ex,ey,col);

for (;;) { WaitForVsync(); }
}

 

はてなソースコードの貼り付けするとインデント消えるのかよ!!!!!!!

 

DXlibでの描画と対して変わらない。

2つの頂点を設定することで描画を実現している。(sx,sy & ex,ey)

 

やってて思いましたが、UnityはDXlibを楽にしたもので、DXlibはこのような古典的なゲームプログラミングを楽にしたもの、このゲームプログラミングもアセンブリを楽にしたものなんじゃないかな。

GBAプログラミング 2日目

取組んだこと

・開発wikiチュートリアル2

tutorial.2

 

学んだこと(印象に残ったこと)

GBAの描画形式がmodeという種類で分けられている。

0-2がタイル

3-5がビットマップ

タイルとビットマップの違いは、このサイトがわかりやすいかも。

画像処理の話の中で、ラスター形式やタイル形式という言葉がでて… - 人力検索はてな

ビットマップが一番細かい描画なのかな?

 

processingのvoid setup()みたいに初期設定で描画設定を行う。

 

SetMode(MODE_3 | BG2_ENABLE);

 

で、この分解していくと

0x04000000~0x04000001

に代入する値によってmodeが切り替わるらしい。

 

f:id:rai17321:20180516162221p:plain

 

 

 

 

GBAプログラミング 1日目

はじめに

私は現在大学4年生であり、研究室にも所属しています。

その研究室で扱う研究テーマを

GBAプログラミング

にすることとしました。

 

理由は以下となります。

1.長年ロックマンエグゼ6の解析を行い、GBAアーキテクチャの知識がついた

2.知識がついたことにより、解析ではなく制作目線でも興味が湧いた

3.GBAプログラミングで1からロックマンエグゼを作ってみたい

 

よって、ここから2019年3月ほどまで、GBAプログラミングの勉強を行い、その成果としてGBAソフトの制作を目指します。

 

これからについて

まず、GBAプログラミングの学習を始めます。

幸運なことに、エグゼハックに比べるとチュートリアルや人口が充実していることから大変な苦労はしないと思われます。エグゼハック初期は本当に大変だった・・・。

 

GBAプログラミングを学ぶための学習教材

 

1.GBA develop wiki

GBA develop Wiki

2.GBAプログラミング跡地

GBAプログラミング跡地

3.GBATEK 日本語訳

https://meraman.dip.jp/secret.php?M3DSS_GBATEK

4.WILD ZONE 

WILDZONE -GBA Program-

5.金沢大学

Kanazawa Univ. Information System Design

 

+手元にある「Linuxから目覚めるぼくらのゲームボーイ!」

(偶然研究室においてありました。感謝します。)

https://www.amazon.co.jp/Linux%E3%81%8B%E3%82%89%E7%9B%AE%E8%A6%9A%E3%82%81%E3%82%8B%E3%81%BC%E3%81%8F%E3%82%89%E3%81%AE%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%9C%E3%83%BC%E3%82%A4%EF%BC%81-%E8%A5%BF%E7%94%B0-%E4%BA%99/dp/479732564X

 

特に、GBA develop wiki、GBATEK、Linux本で適度にインプット、アウトプットを繰り返しながら、制作の方に入りたいと思います。