SMB INSIDE

マリオ工作員Ｓハウス(仮)

SMB INSIDE

2004年4月6日設立
2004年10月14日更新

お詫び
・SMBラボの方が、またもやトクトクのメンテナンスでサイトに接続できない可能性があります。「メンテナンス後より発生しているアクセスし難い現象」が改善されるそうです。ご迷惑をおかけいたしますが、ご理解とご協力をよろしくお願い致します。
・「従来のYahoo!ジオシティーズ（旧ジオシティーズ）を拡張版ジオシティーズ（新ジオシティーズ）に統合」により、旧ジオの機能を使用していた掲示板が使えなくなってしまいました。早急に機能を復帰できるよう対応を検討中ですので、しばらくお時間を頂きたく存じます。とりあえず、新ジオの機能を使って掲示板を設置してみました。あまりにも使い勝手が悪いようなら、また新しい手段を検討したいと思います。なお、このサイトにリンクいただくサイト管理者様には「http://www.geocities.jp/smbinside/」の方へリンクいただきますようお願い致します。2004年11月1日には、旧アドレスは削除予定です。

このサイトでは、私、M.K.S(マリオ工作員S)が、だらだらと改造マリオ関連の話題を取り上げていこうかと思います。サイト名は、SMB INSIDEに決定しました。設立年月日は、ポータブルSMB計画始動日の2004年4月6日ってことに致します。リンクも「http://www.geocities.jp/smbinside/」へは、フリーとします。活動方針としては、「完全なSMBソース計画」の完成をメインに、SMB Utilityのバージョンアップをぼちぼちやっていきます。これからも、ご協力の方、よろしくお願い致します。m(_ _)m

※掲示板

※　兄弟リンク

SMB Software

(2004年8月4日)【1.03が】SMB Utilityをより良くするために【リリースされましたっ】(2004年10月5日)

現在、SMB Utilityの開発を再開しつつあるのですが、1.00までの開発を行っていたペン200のPCは、逝ってしまい、新しいＰＣで開発を行っています。SMBラボにある必要運用環境で十分動作するように心がけて、仕様の決定およびコーディングを行っていくつもりではおりますが、もし動作が重くなったとか、ひどい場合、動作しないとかありましたら、運用環境とともに、ご報告いただけると助かります。改善案、実装してほしい機能等、ご意見もお待ちしております(全部対応できるとは限りませんが、善処したいと考えています)。SMB Utilityは、オリジナルマップ作成環境であるということを忘れず、さらに快適な環境を目指していきたいと思います。また、1.00以降のソースコードは、希望者にのみ配布することにします。インターナショナルバージョンは、翻訳してくださる方がいらっしゃらない限りリリースしません。僕が翻訳すると、また、Engrishと馬鹿にされるのがオチですから(´_ゝ｀)

○　ルーム移動命令作成、分解ウィザード
３つの敵オブジェクト→ルーム移動命令
ルーム移動命令→３つの敵オブジェクト
これを値の直接入力なしで行えるといいかなと思いました。
なるほど、これは思いつきませんでした。あると便利かもですねぇ。

○　「ルーム／エリアの設定」ツールバーボタン
比較的使うことの少ない機能だと思い、実装していないのですが、どうでしょう。M.K.Hがカスタマイズできるようにしろと、とてつもなく面倒な要求を突きつけてきました(-_-;)

○　「全般の設定」と「その他の設定」の統合
これは、ちょっと無理なんです。なぜかというと、「全般の設定」では、クリアとなるワールドを設定できるようになっており、この設定に基づいて「その他の設定」で設定できる1UPキノコの為のコインの枚数、クッパの正体のワールド数を決定している為、これらデータには上下関係があり、同時に設定することは、好ましくないのです。

○　タイトル画面エディタ。
う～ん、でもこれを実装するとCHRROMエディタっぽいのも欲しくなっちゃうなぁ･･･。見送りかなぁ･･･。

○　テストプレイにまつわる点

エミュレーターでテストプレイ時に、
開始位置が1マス左にずれてしまうのですが、（ルーム/エリアの設定の開始時点の文字が2.5でなく1.5になっている）
修正できないのでしょうか。（1度死ぬと本当の位置から再開になる）→途中ページテストプレイがページテストプレイのコードを応用しているだけなため、対応が難しい。

もう1つ、（オリジナルの）城面などで、
途中開始地点でテストプレイしようとすると、
なぜか4-2.5ではなく、10-1.5から再開になるのですが・・・→高さを固定値にしていた仕様を地形ヘッダ依存に。また、テストプレイの設定の出現位置を反映するように。→実装完了(1.02でリリース)。

というか･･･

途中ページテストプレイは、必要なのか。確かにあればあるで便利だが、テストプレイの設定で、ある固定ページからのスタートの設定が可能なので、代用機能が存在する。よって、必要ないのではないだろうか。もし、廃止するとしたら、

・　ある固定ページの設定に途中ページを一発で入力できるような手段を用意する。→実装完了(1.02でリリース)

・　オブジェクトビューの途中ページの矢印をマリオのスタートの位置におく。

のような対応があれば十分なのではないだろうか。とりあえず、廃止するかは保留。M.K.Hに消すなと言われたので、残します･･･(M.K.Hには、逆らえませんヽ(´Д｀；)ノ)

完璧な（具体的に言うと、マリオの出現位置がきちんとオリジナルと同じになるような）途中ページテストプレイの実装。

○　ループをもっと容易に作成できるような機能の模索。
・　「戻り位置の指定の時にオブジェクトを選んで指定する」というものです。オブジェクトビューをクリックして指定できれば個人的に楽かなと。

○　ページテストプレイで、ページをまたいだオブジェクト(例えば、横に並んだレンガブロックなど)が表示されない問題。

○　オリジナルの8-4で、テストプレイの設定で「開始ページの敵も出現させる」の設定をオンにして16ページからテストプレイを行うと、３体のクリボーが出現する。

○　INIファイルから初期値を読み込んでいる設定について。全部レジストリに格納してしまってもよいのではないか。なぜ、INIファイルに格納したのかが思い出せない(´Д｀；)ヽ

○　ビルトインバイナリエディタの実装。これは、エンジン作成(追加プログラミング)時にとても便利ではあるが、レベル編集時にはあまり必要ではないと思うのです。よって、エンジン作成環境であるSMB Reformerの機能として実装しようと思います。

○　スクリーンショット機能をつけることは可能でしょうか？

○　クイックセレクトツールウィンドウ
編集ダイアログでは、すべてのオブジェクトを変更することはできるが、直感的に、即座に選択することは難しい。
そこで、よく使うオブジェクトをビットマップによるボタンで、素早く変更できる入力ウインドウ”クイックセレクトウインドウ”を作成する。

(2004年4月6日)ポータブルSMBの可能性について。(2004年9月10日)

僕は、以前からSMBのファミコン用に組まれた6502CPUの機械語をいろいろなハード用にコンパイルできるＣソースの形にできないものかなぁと考えていました。そうです。ポータブルSMBというのは、「持ち運べる」SMBというわけではなく、様々なハードに「移植可能な」SMBというわけです。（ちなみに、「持ち運べる」SMBなら、GBAで、PocketNES・転送ツール・書き換え可能カートリッジ等を利用して、もうすでに実現可能です。）

しかし、実現には、まずSMBの完全な解析が必要不可欠です。その様なことを僕一人の力では、できそうにありません。そこで、みんなで力を出し合って完全な6502CPUのソースを作り上げていきたいと考えるのです。

これが実現すれば、ポータブルSMBの実現の足がかりとなるだけでなく、現在、主流の追加プログラミングを取り入れた改造マリオ作成の大きな助けとなることでしょう。また、そこからプロのプログラミング技術の多くを学ぶこともできるでしょう。

完全な6502CPUソースの作成にみんなで取り組む為のシステムを考えているのですが、ユーザーがログインし、サーバーにあるテキストデータをログインユーザーが自由に改変できるというシステムが理想的だと思うのですが、僕には、そのようなサーバープログラムを組む力は、残念ながらありません(泣)また、この方法であると、悪意をもった人によるいたずらなどの問題も生じてくるでしょう。いま、最も簡単に実現できるシステムといえば、掲示板を設置し、その掲示板にみなさんにルーチンに対する説明を書いてもらって、僕がそれをテキストに反映していくという方法であると思います。早速、掲示板をテスト感覚で設置してみたいと思います。ここには、ルーチンの説明やデータの意味、RAMの使用目的などを書き込んでいただきたいのです。

SMBの完全な6502CPU機械語ソースを作ろう！計画の掲示板

書き込まれた情報は、私がテキストに反映させていきたいとおもいます。　みなさんの貴重なまた一生懸命探したルーチンの説明やデータの意味をどうか改造マリオ界発展のために提供いただければ、幸いです。

※　掲示板に書き込む際、以下のような表現の統一をお願い致します。

・メモリアドレスは、$○○○○の形で、16進数で。
・16進数は、○○hもしくは○○Hという形で。10進数は、○○という形で。
・ファイルの位置で報告する場合、フォーマットは、.NESフォーマットで統一し、トレイナー無しにおけるもので。また、位置○○○○という形が望ましい(アドレスと明確な区別をするため)。

現在のSMBの6502CPU機械語ソース

RAMの使用目的

※　貢献くださった方々(順不同)

・ATAさん
・F.Hさん　'Super Mario Bros NES' R.Eng project.
・MHSさん
・天津fanさん
・ドーコカラキさん　「マリオ音楽改造入門」
・ゆーだいデュンさん
・わいわいさん　多数の解析結果

貴重な情報をありがとうございましたm(_ _)m

※　トピックス

１．bit命令について

※　リンク

モナーアクション(仮)製作ＨＰ

(2004年4月26日発足)SMB Reformer2.0の可能性について(2004年9月9日更新)

僕は、マリオファンをリリースの後、追加プログラミングの要素(ポール1UPや毒キノコなど)をコンポーネント化し、自由に組み合わせることのできるようなツールがあれば、システムのカスタマイズが自由に行えると考え、それを行うためのソフトウエアSMB Reformerを開発しました。SMB Reformerは、主にトレイナーを追加プログラミングの領域として用い、コンポーネントへのコード、RAM領域の割り当て、コンポーネント同士の特定アドレスへの二重書き込みのチェックなどを行う、エンジン作成(追加プログラミング)環境です。しかし、その反面、
①　コンポーネントの作成がめんどう
②　ドキュメントが分かりづらい（というか、まだ完成していない（＾＾；
③　トレイナー領域を追加プログラミングには、用いない傾向がある。
などの問題点も自分で認識しています。
①の問題点の解決法として、コンポーネント開発環境の整備を行っていく必要があると思います。③においては、SMB Reformerでは、トレイナーだけでなくROMにコード領域をRAMにRAM領域を確保することもできるようになっています。
また、新機能として、
○パッチ実行前にコンポーネントのパラメータをいじるUIを出す設定ファイルみたいなものを実装→setファイル
これによりバイナリエディタで、カスタマイズ可能なコンポーネントのパラメータ設定を容易にします。また、それぞれのパラメータの説明を表示する機能も実装。
<コマンドの仕様>
<string : name> <string : comment> <address_destination : address> <word : offset> <word : size> <bool : defaultflag> <byte : data> ･･･
[概要]
ユーザが入力可能なデータを指定されたアドレスに指定されたバイト数分だけ書き込む。
[パラメータ]
name : パラメータの名前。
comment : パラメータの説明。この説明にスペースを使用可能にするために、スペースを含むstring値を「”」で囲めば、認識できるようにする。
address : 開始アドレス。
offset : addressに足す値。
size : 入力を受け付けるバイト数。
defaultflag : 後にデフォルトのデータが存在するかのフラグ。bool型は、0の場合偽、1の場合真。
data : defaultflagが1(真)の場合、ユーザの入力が無かった場合に書き込むデフォルトのデータを設定する。
[説明]
アドレス(address + offset)からユーザーからの入力があったデータをsizeバイト分、入力されたデータを書き込む。ユーザーの入力がなく、デフォルトのデータが設定されている場合は、それを書き込む。

| ユーザの入力有り | ユーザの入力無し
デフォルトのデータ有り | (入力されたデータを)書き込む | (デフォルトのデータを)書き込む
デフォルトのデータ無し | (入力されたデータを)書き込む | 無視

[setファイルの動作]
SMB Reformerでの動作としては、コンポーネントリストで、設定したいコンポーネントをダブルクリック(なり、右クリックなり)すると、名前のコンボボックス(当然、setコマンドが1個とは、限らないため、複数項目の中から選択できるようにする必要がある)、データ入力のテキストボックス、setコマンドの説明表示用テキストエリアから成るダイアログボックスが表示され、そこから入力していく形になると思います。

○　address_destinationの定義済み文字列にキャラクタROMのベースアドレスを表すchrを追加する。(ん～不要かな･･･)
これにより、cpyコマンドで、キャラクタROMの内容を書き換える事が可能になる。

○　トレイナー未使用の場合、トレイナーを挿入しない
適用する全コンポーネントで追加コード領域、RAM領域共に使用されてない場合
CFGファイルで、トレイナーにコード領域、RAM領域のどちらも割り当てられていない場合

○　ビルトインバイナリエディタの実装。

(2004年6月30日)追加プログラミング領域をいかに確保するか（工事中）

これは、深刻な問題です。いくつか考えられる解決法を挙げてみます。

①　トレイナー領域を用いる。
（長所）手軽に大きな領域の確保が可能。
（短所）IPSでの配布は、難しい。ハードウエアでの実装が困難(というか不可能？七休さんの情報により実装可能であることが判明)。iNESフォーマットで定義された領域で、NESには、ないアドレス空間であり、規格外である。

②　マッパーを用いる。
（長所）CHRROM領域も確保可能。ハードウエアでの実装が比較的容易。
（短所）IPSでの配布は、難しい。マッパーの動作の習熟が必要。

③　ROM領域で削れる部分、例えば、地形・敵オブジェクトの領域、その改造マリオで使用していないコード領域を用いる。
(長所)これまで通り、IPSでの配布が可能。ハードウエアでの実装が容易。
(短所)使用可能な地形、敵オブジェクトが削られてしまったり、つぶしてしまったコードの機能が使えなくなる。