Tut/MM/mapedit
の編集
[
ホーム
|
一覧
|
検索
|
最終更新
|
ヘルプ
] [
新規
]
Top
>
Tut
>
MM
> mapedit
-- 雛形とするページ --
BG
BG/Exercise1
BG/Exercise10
BG/Exercise11
BG/Exercise2
BG/Exercise3
BG/Exercise4
BG/Exercise5
BG/Exercise6
BG/Exercise7
BG/Exercise8
BG/Exercise9
BG/xConclusion
BT
BT/Download
BT/MakingFirstGuide
BT/News
BT/PageMakeNote
BT/Sample
BT/Tools
BracketName
Col
Col/LoD_version
Col/MLS
Col/ModInstall
Col/ModMakeTools
Col/What'sMod?
Comme/ANCRecipe
Comme/ANStat
Comme/ANewWeap2
Comme/BG
Comme/Download
Comme/Future
Comme/MFirstGuide
Comme/MLS
Comme/MnsCol
Comme/Top
Comme/UInterface
Comme/magicmissile
FG
FG/Cubemain.txt
FormatRule
FormattingRules
FrontPage
Help
InterWiki
InterWikiName
InterWikiSandBox
KB
KB/110to111b
KB/EventFunction
KB/ItemClassInSkill
KB/MagicCodeList
KB/ModsMaxValue
KB/Skill and Missile Tips
KB/SkillTabModValue
KB/notes
KB/rows
MenuBar
PKnews
PKnews/log
PM
PM/Image/UserInterface
PM/MS
PM/MS/Hireling
PM/MS/PlugY
PM/MS/WayPoint
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/+
PukiWiki/1.4/Manual/Plugin/++
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
Rf
Rf/A-TypeMOD
Rf/BattleForElements
Rf/Blackened
Rf/BoneMod
Rf/EasternSun
Rf/EscapeFromTheAfterlife
Rf/KingdomOfTenai
Rf/LYNX
Rf/MikuruMOD
Rf/Nezeramontias
Rf/Temp
SandBox
Tut
Tut/AddSuperUniqe
Tut/CE
Tut/CE/NewMusicAdd
Tut/CE/SkTreeCloseBut
Tut/CE/v11bHirelingEdit
Tut/CR
Tut/CR/AddNewCubeRecipe
Tut/EditModMaxValue
Tut/GS
Tut/IM
Tut/IM/AddNewStat
Tut/IM/AddNewWeap
Tut/IM/AuraBugFix
Tut/IM/MagicArrow
Tut/IM/OnStrikingMonsterSkill
Tut/MM
Tut/MM/mapedit
Tut/MS
Tut/MS/JapaneseLocation
Tut/SM
Tut/SM/ElementalHydra
Tut/SM/FireNova
Tut/SM/MultiHoming
Tut/SM/SklRowsLim
Tut/UE/AddNewMons
Tut/UE/AddSuperUniqe
Tut/UI
Tut/UM
Tut/UM/MonsterColor
Tut/UM/ShadowMaster
Tut/UM/SumSkelArch
Tut/UM/SumSkilSkel
counter
***&size(15){lvlprest.txtを編集する}; [#v746f56b] 次に、lvlprest.txtを開きます。''使うタイルを変更する場合は、先にlevels.txtを編集する''のですが、今回は編集しないのでこちらが先です。 今回はcave level2を弄ります。cave level2は caveroom2.ds1を使っているので、「caveroom2」で検索して下さい。一発で見つかります。 ''106行目の「Act 1 - Cave Treasure 2」です。''ここを弄るわけですが、何処を弄るかというとAFJ SheetでW列目の''dt1mask''です。 こいつとdefがModderのマップ自作を挫折させる最大の原因です。ちなみにdefはidみたいなもんなので、大して気にしなくて結構です。 で、dt1maskって何か? これは''lvltypesで使っているタイルのビット総数を計算しろって事です。'' 計算式は以下の通りになります(一番下の公式だけ覚えていればOKです。後はその内慣れれば分かr)。 |&size(13){''全てのタイルを使う場合''};|&size(13){''2^n(nは1から32までの自然数) - 1''};| |&size(13){''公式''};|&size(13){''2^(a-1) + 2^(b-1) + 2^(c-1)..... 2^(n-1) (a,b,c,nのいずれも1から32までの自然数)''};| 例えば、先ほど''Act1/Outdoors/Cottages.dt1''と''Act1/Town/Floor.dt1''と''Act1/Outdoors/stonewall.dt1''の3つを洞窟に追加しました。&br;lvltypes.txtの表をご覧になれば分かる通り、合計で4つのタイルを指定しています。そして、洞窟本来が使っているタイルは使用したくありません。 この場合、dt1maskは以下のように求められます。 |&size(15){2^(2-1) + 2^(3-1) + 2^(4-1) = 2^1 + 2^2 + 2^3 = 2 + 4 + 8 = 14};| よって、''この場合のdt1maskは14!!'' そんなわけでdt1maskの欄には14と記入して保存して下さい。
タイムスタンプを変更しない
//マップの作り方 *&size(20){マップの作り方}; [#gf68099a] // とりあえず完成。追記・訂正歓迎 &size(13){ ここではマップの作り方を紹介。まずはpreset(固定)マップの作り方。}; &size(13){これに慣れるとModderとしてワンステップもツーステップも腕が上がるよ!}; 著者 : 822 ''※ 追記・訂正して下さる方、歓迎。'' **&size(20){目次}; [#nd811ca3] #contentsx **&size(20){用意するもの}; [#o1cca2dc] 以下を用意。素材の調達は各自でお願いします。 ***&size(15){txtファイル}; [#z804d7fc] -levels.txt -lvlprest.txt -lvltypes.txt ※ ''Diablo2はtxt内でディレクトリを指定する時は大文字小文字の区別をしますが、txtファイル自体は区別しません。'' ***&size(15){ツール}; [#nc8c1466] -win_ds1edit : paulさん開発のマップエディター。素の状態だとCUIなので、基本的には下のDS1Edit Loaderで弄る -DS1Edit Loader v2.1 : ds1editをGUIで使えるすげー便利な代物。例えるとオートマなので、細かく弄ったりするにはds1edit本体を使う -タブ区切りのテキストエディタ : Excelだと式が壊れてしまう事があるので、AFJさんのAFJ Sheetがお奨め &br; ※ ds1edit loaderの注意点として、日本語非対応な点。ディレクトリに日本語が入っていると認識しなかったりエラーになったりなので、loaderでディレクトリを指定する場合、diablo2フォルダ直下といった''日本語を含まないディレクトリを指定して下さい。'' ***&size(15){留意点}; [#td7868ee] マップ弄りはコードエディット(DLLの編集)並みにエラーに直面します。それを根気良く一つずつ直していくのがマップ弄りです。''必要なのは根気とバックアップ。''バックアップは必ず取っておき、''マップ弄りをする時は、関係ないtxtはフォルダから全て外すのが重要''です。 例えば、現在製作中のMODのデータがあるディレクトリでマップまで弄ると、余計なエラーも混じってしまい、原因が掴めなくなります。 ''MOD Launch Script Plusも使って、別な製作環境の中で、マップだけ弄れる環境にしましょう。'' **&size(20){マップを編集する環境の準備}; [#f7976d4a] ***&size(15){用意するもの}; [#bc3f42a2] -MOD Launch Script Plus : E-Rさんが製作した、MOD管理用vbsランチャーアプリケーション。つまり何処にでもMod開発環境を作れる優れもの。 ***&size(15){手順}; [#pef5fac4] ※ ここでは参考として、Cドライブ内のプログラムファイル内にインストールしたDiablo2フォルダ直下に作るものとし、cold plainのcave level2を編集する事にします。&br;&br; +Diablo2フォルダを開く。 &br; +Diablo2フォルダ内で新規でフォルダを作る。ここでは、「My Mod」と名前をつける事にします。 &br; +My Modフォルダ内に??_launch.vbsを置く(??はバージョン。10や11など)。Plug-Yを使う場合も、ここにiniファイルを置く。また、パッチを置く場所もここ。 &br; +My Modフォルダ内に data/global/excelとディレクトリを用意し、excelフォルダ内にtxtを入れる。&br;同時に、data/global/tiles/act1とディレクトリを用意し、act1内で更にcavesと名前を付けたフォルダを作り、その中にcaveroom2.ds1を入れる。 これで準備は整いました。さぁ、cave level2を弄るぞ! &br; ***&size(15){補足}; [#ed94de94] と言いたいのですがちょっと待った! もう一つ、Map弄りの環境を整える上で重要な事があります。 それは、''マップ製作をする場合に限り、フォルダ内に置くvbsは1.10版にする事''です。&br;地味ながらとても重要な事です。というのも、''1.10のデバッグ性能(エラーの詳細さ加減)は過去最強''だからです。1.11以降は殆どのエラーを ''"Unrecoverable Error"'' で済ませてしまうので、何をどう弄れば改善されるか全く分からないといっても過言ではありません。 Phrozen Keepに駐屯している玄人の中には、エラー出たライン番号を見る事でエラーの内容を判別する猛者がいますが、著者含めて大抵の人はそんな事は出来ませんし、努力してそうしようとする必要は全くありません。作ったマップを実際に動かす場合は、素直に1.10版のvbsで起動して下さい。 それがデバッグには最良です。 *&size(20){実際の編集の流れ}; [#d46a5415] 主な流れは以下の通り。 +&size(15){lvltypes.txtで使うタイルを定義}; &br; +&size(15){levels.txtで使うタイルの種類を指定}; &br; +&size(15){lvlprest.txtでdt1maskやその他を設定}; &br; +&size(15){ds1edit loaderでtxtの変更を反映させる為、configure loaderで使うds1のパラメータを修正}; &br; +&size(15){ds1edit loaderを起動。マップを弄くり倒す(マップのサイズは必ず覚えておく事)}; &br; +&size(15){再びlevels.txtに戻り、サイズを再調整(実際のサイズ - 1 がlevels.txtでのサイズとなる)}; &br; +&size(15){起動してエラーを見つけては根気良く潰していく(ここからがデバッグで、一番長い)}; &br; +&size(15){何もエラーが出なくなったら完成}; &br; +&size(15){Mod開発環境(本体)に作ったマップを移し、書き換えたtxtのデータを反映させる}; &br; +&size(15){作業終了}; ''※ ここでは、Act1のCold PlainにあるCave Level2を編集する事にします。'' **&size(15){はじめに}; [#w06e6c7f] まずやってはいけない事(お奨め出来ない事)。例えば著者の場合、全てのmpqからデータを抽出してあり、それを一つのフォルダ内に入れてあります。&br;マップを編集する時、そのフォルダ内にあるds1ファイルを弄ってしまうと、余計なバックアップファイルがぽんぽん生成され、ごっちゃごちゃになってしまいます。&br;小さなサイズならともかく、数MB規模のマップのバックアップファイルが次々にぽんぽんと生成されては困りものです。 ''ds1edit loaderでマップを編集する前に、開発環境にds1ファイルをコピーし、それを選択するようにして下さい。''&br;バックアップフォルダ内にあるものを弄っては、''バックアップの意義が無くなってしまいます。'' **&size(15){txtを編集する}; [#i96d1da4] 意外にも最初にtxtで設定を済ませなければなりません。 以下の手順を済ませなければマップの編集には移れないので注意。 ***&size(15){lvltypes.txtを編集する}; [#a641bcd6] まずはlvltypes.txtを開いて下さい。画像のようになっています。このtxtではマップで使うdt1(タイルが詰まったファイル。以下、タイル)を設定します。ここでは試しに、cave level2を小屋のある草原にしてみましょう。 5行目が洞窟で使われているタイルです。見ると、一つしかありません。 まずは3行目、つまりローグのキャンプで使われているタイルから、''Act1/Outdoors/Cottages.dt1''と''Act1/Town/Floor.dt1''と''Act1/Outdoors/stonewall.dt1''をコピーし、5行目のfile2、file3、file4のそれぞれの欄にペーストします。 |&size(13){''name''};|&size(13){''id''};|&size(13){''file1''};|&size(13){''file2''};|&size(13){''file3''};|&size(13){''file4''};| |&size(13){Act 1 - Cave};|&size(13){3};|&size(13){Act1/Caves/Cave.dt1};|&size(13){Act1/Outdoors/Cottages.dt1};|&size(13){Act1/Town/Floor.dt1};|&size(13){Act1/Outdoors/stonewall.dt1};| 上の表のようになっていたら、ここでの作業はこれで終了です。保存して下さい。 ***&size(15){lvlprest.txtを編集する}; [#v746f56b] 次に、lvlprest.txtを開きます。''使うタイルを変更する場合は、先にlevels.txtを編集する''のですが、今回は編集しないのでこちらが先です。 今回はcave level2を弄ります。cave level2は caveroom2.ds1を使っているので、「caveroom2」で検索して下さい。一発で見つかります。 ''106行目の「Act 1 - Cave Treasure 2」です。''ここを弄るわけですが、何処を弄るかというとAFJ SheetでW列目の''dt1mask''です。 こいつとdefがModderのマップ自作を挫折させる最大の原因です。ちなみにdefはidみたいなもんなので、大して気にしなくて結構です。 で、dt1maskって何か? これは''lvltypesで使っているタイルのビット総数を計算しろって事です。'' 計算式は以下の通りになります(一番下の公式だけ覚えていればOKです。後はその内慣れれば分かr)。 |&size(13){''全てのタイルを使う場合''};|&size(13){''2^n(nは1から32までの自然数) - 1''};| |&size(13){''公式''};|&size(13){''2^(a-1) + 2^(b-1) + 2^(c-1)..... 2^(n-1) (a,b,c,nのいずれも1から32までの自然数)''};| 例えば、先ほど''Act1/Outdoors/Cottages.dt1''と''Act1/Town/Floor.dt1''と''Act1/Outdoors/stonewall.dt1''の3つを洞窟に追加しました。&br;lvltypes.txtの表をご覧になれば分かる通り、合計で4つのタイルを指定しています。そして、洞窟本来が使っているタイルは使用したくありません。 この場合、dt1maskは以下のように求められます。 |&size(15){2^(2-1) + 2^(3-1) + 2^(4-1) = 2^1 + 2^2 + 2^3 = 2 + 4 + 8 = 14};| よって、''この場合のdt1maskは14!!'' そんなわけでdt1maskの欄には14と記入して保存して下さい。 ***&size(15){levels.txtを編集する}; [#m0163945] 今回の場合では使用するタイルの種類を変更しませんでしたが、タイルの種類を変更する場合はここも編集しなければなりません。ここを編集せずにds1edit loaderを起動すると、設定の食い違いが生じ、txtの設定が反映されません。ではどうするかと言うと、起動前に以下の項目を変更します。 |&size(13){''DrlgType''};|&size(13){''LevelType''};| |&size(13){X};|&size(13){Y};| (X,Yのいずれも数字) ''DrlgTypeはダンジョンの種類、LevelTypeはタイルの種類''と覚えておくとよいでしょう。 |&size(13){''DrlgTypeの番号''};|&size(13){''意味''};| |&size(13){''1''};|&size(13){Maze型。 ''完全にランダムに生成されるマップ''(cave level1など)};| |&size(13){''2''};|&size(13){Preset型。 ''固定マップ''(andarielの居るcatacomb level4など)};| |&size(13){''3''};|&size(13){混成型。 ''Maze型とPreset型が混じっているマップ''(Act1のburial groundなど)};| つまり、''Preset型のマップを作る時はDrlgTypeを2に''すればいいわけです。 尚、levels.txtの編集でこれと同じくらい大切な設定に''「サイズの調整」''がありますが、これはあとでやる方がいいでしょう。 **&size(15){ds1edit loaderを使う}; [#caeea926] まずは、ds1edit loaderを起動します。起動したらまずは''settings''の項目を選択し、各種設定を行います。ここを編集しなければマップ編集画面すら出ません。設定の手順は以下の通り。 &br; +''"settings"''の項目を選択し、''"configure editor"''を選択。 pathsタブを選択し、各種パスを設定します。ここで''大事なのが、''"mod dir"を編集する事。''''&br;上の手順の中で、diablo2フォルダ直下に環境を用意したので、ここでは ''C:/Program Files/Diablo II/My Mod'' とします。 設定が終わったら''"OK"''を押します。 &br; +''settings''の項目を選択し、今度は''configure loader''を選択。ds1edit(paulさんの作った方。GUI loaderはこれを基に動いている)のパスと名前を設定。 &br; 設定が済んだら、今度はいよいよ編集に移ります。''caveroom2.ds1''を選択して''"modify"''を押します。"modify"を押すと下の画像のような画面になります。 #ref(./tut1.jpg,50%); ''よほど凝った設定をする時以外、変更する箇所は"LevelType ID"のみで結構''です。むしろ、それ以外を弄るととんでもない事になるので弄らない事。&br;''タイルの種類を変更した場合、この"LevelType ID"の数値も変更''しないといけません。今回は変更しないのでそのままで。 ***&size(15){いよいよ起動}; [#j29ae5bf] さて、いよいよ起動して実際に弄ります。まずはMapタブに切り替え、''"File"''メニューを選択し、''"Add"''から編集したいマップを追加していきます。&br;尚、ドラッグアンドドロップにも対応していますので、Mapタブ内にds1ファイルを放り込めば追加されもします。 caveroom2.ds1を追加したら、''"File"''メニューから''"Run"''を選択し、起動します。 |&size(13){''dt1_add() : file Data\Global\Tiles\0 not found''};| 起動時に最も多いエラーがこれ。''ディレクトリ内に0という名前のdt1ファイルが見つからない''よと言っています。当たり前です、そんなもんありません。 何故こんなエラーが出るのかというと、''dt1maskの数値が間違っているから''です。 つまり、''適正な数値より大きい値を指定してしまうと、LvlTypes.txt内の0と書かれた欄まで読み込もうとしてしまう''のです。これを直す方法はただ一つ、''LvlPrest.txt内のdt1maskの欄に書かれた値を正しい値に直すのみ。''上記にdt1maskの求め方の公式を書いているので、それを参照しながら電卓でもう一度計算し直して下さい。&br;''値が間違っているだけなので、正しい値にすれば必ず動きます。'' ***&size(15){編集画面 : 操作方法}; [#nec84e40] 起動に成功すると編集画面に移ります。ここまでの道のりが異様に長いのがマップ編集の特徴(悪い意味で)です。 まずは操作方法から。 |&size(13){''キー入力''};|&size(13){''動作''};| |&size(13){左クリック};|&size(13){タイルを選択};| |&size(13){右クリック};|&size(13){タイル編集画面に移行};| |&size(13){F1};|&size(13){F1レイヤーのタイルの表示/非表示の切替};| |&size(13){F2};|&size(13){F2レイヤーのタイルの表示/非表示の切替};| |&size(13){F3};|&size(13){配置したオブジェクトの表示モード切替(''緑がアニメーション表示、オレンジが静止表示、赤が非表示'')};| |&size(13){F4};|&size(13){配置したオブジェクトの情報切替&br;(''緑が名前とID番号、灰色がサブタイル(タイルを更に細かい座標)上での座標、&br;オレンジがオブジェクトのアニメーションスピード(128を1とする基準。256で倍速)、赤が非表示'')};| |&size(13){F5};|&size(13){W1レイヤーの壁の表示/非表示の切替};| |&size(13){F6};|&size(13){W2レイヤーの壁の表示/非表示の切替};| |&size(13){F7};|&size(13){W3レイヤーの壁の表示/非表示の切替};| |&size(13){F8};|&size(13){W4レイヤーの壁の表示/非表示の切替};| |&size(13){F9};|&size(13){splレイヤー(屋根やら特殊タイル)の表示/非表示の切替};| |&size(13){F10};|&size(13){pathの表示/非表示の切替};| |&size(13){F11};|&size(13){shadowレイヤーの表示/非表示の切替(緑が通常表示、白が白色で表示、灰色で灰色表示(だった気がする)、赤で非表示)};| |&size(13){F12};|&size(13){gamma値を増加(明るくなる)};| |&size(13){F12 + shift};|&size(13){gamma値を減少(暗くなる)};| |&size(13){N};|&size(13){夜景モード。洞窟内に居るように、プレイヤーの周囲のみ明るく、それ以外は暗い表示モード&br;一度押すとタイル単位の照明で、もう一度押すと実際のゲーム画面と同じ照明になる};| |&size(13){shift + P};|&size(13){プリントスクリーン。現在のズーム率に影響される&br;(ds1editのあるフォルダにbmpが生成される。ものすんごいデカいので撮り過ぎ注意)};| |&size(13){1};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;1番目に追加されたds1ファイルを表示};| |&size(13){2};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;2番目に追加されたds1ファイルを表示};| |&size(13){3};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;3番目に追加されたds1ファイルを表示};| |&size(13){4};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;4番目に追加されたds1ファイルを表示};| |&size(13){5};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;5番目に追加されたds1ファイルを表示};| |&size(13){6};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;6番目に追加されたds1ファイルを表示};| |&size(13){7};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;7番目に追加されたds1ファイルを表示};| |&size(13){8};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;8番目に追加されたds1ファイルを表示};| |&size(13){9};|&size(13){マルチタスク(複数のds1ファイルを追加して起動した)時のみ。&br;9番目に追加されたds1ファイルを表示};| |&size(13){-};|&size(13){縮小表示(最大で1/16まで)};| |&size(13){tab};|&size(13){編集モード切替&br;(一度押すとオブジェクト編集モード、もう一度押すとモンスターの移動パターンを編集するモード)};| |&size(13){insert};|&size(13){オブジェクト挿入(オブジェクト編集モード時のみ)};| |&size(13){ctrl+X};|&size(13){選択したタイル/オブジェクトの削除};| |&size(13){ctrl+C};|&size(13){選択したタイル/オブジェクトのコピー&ペーストモード&br;(ペーストしたい地点を左クリックするとペースト)};| |&size(13){ctrl+S};|&size(13){現在編集しているds1ファイルを保存};| |&size(13){home};|&size(13){マップの中央にカーソル&視点を移動};| |&size(13){space};|&size(13){タイルの歩行可能属性の表示/非表示の切替};| |&size(13){ctrl+shift+enter};|&size(13){選択したタイルの属性編集画面に移行。詳細は後述};| |&size(13){esc};|&size(13){''全て保存して終了''、保存せず終了、キャンセルが表示される};| 主に使うのはこれくらいでしょう。 これを覚えておけば、かなり便利です。 ***&size(13){編集画面 : caveroom2.ds1を改変する}; [#q442c510] 起動直前まで話を戻します。''"File"メニュー''から''"add"''でcaveroom2.ds1の次に''cott2.ds1を追加''して下さい。''cott2.ds1はd2data.mpq内のdata/global/tiles/act1/outdoors内にあります。''WinMPQなりで抽出して下さい。 そしたら起動。起動するとまずはcaveroom2.ds1が表示されます。タイルを全て選択したら、''ctrl+X''で全てデリート。これでタイルは全て消えます。今度はtabを押してオブジェクト編集モードに切り替えます。今度は一つずつオブジェクトを選択し、これらも全てデリートします。 真っ黒な更地になったら、2を押します。すると今度はcott2.ds1の編集画面に移ります。 act1で見慣れた小屋があります。全て選択し、ctrl+Cでコピーします。コピーするとすぐペーストモードになりますが、ここで1を押して下さい。 そうすると、今度はcaveroom2.ds1の編集画面に戻ります。画面の中央辺りでペーストして下さい。周りは草地のタイルで埋めて下さい。上手くいくと下の画像のようになります。 #ref(./tut2.jpg,50%); 画像にはWPのタイルもありますが、これは小屋以外のテキトーなタイルを選択したら右クリックでタイルを探して選択して下さい。 これで小屋を作るという目的は達成されましたが、これだと画面端まで歩いて行けてしまいます。 まずはspaceキーを押して、歩行可能属性を表示します。そしたら、小屋以外の草地のタイルを選択し、ctrl+shift+enterを押して属性編集画面に移行します。 真ん中辺りに''"walkable"''という項目があります。''これを1から0にして下さい。''すると一気にタイルがオレンジと黒のグリッドで埋め尽くされます。これで選択したタイルは歩行不能になりました。''あくまで歩けないだけで、ミサイルなどは通れます。''それが嫌ならば壁でテキトーに囲って下さい。上手く行けば下の画像のような感じになります。 #ref(./tut3.jpg,50%); 忘れてはいけないのがスペシャルタイル。エリアとエリアを繋ぐ入り口となるタイルです。 タイル編集画面の右側にある''"special"''をクリックするとそれらのタイルが表示されますが、最初の内は何が何やらさっぱり分かりません。一番簡単なやり方は他のds1からコピってくる事ですが、慣れたらこっちでぺたぺた貼りましょう。その際は''属性編集画面でF1(スペシャルタイルは壁扱い)hiddenの項目を1にセットしましょう。忘れるとエラーが出て強制終了を食らいます。'' ここでは一方通行の入り口を作るやり方で行きましょう。スペシャルタイルから#44のタイルを選択します。配置したら、属性編集画面に切り替え、hidden属性を1にします。そしたら''ここからが重要。''tabを押してオブジェクト編集モードに切り替えたら、#44のタイルのど真ん中でinsertを押して下さい。すると''%%飛べない豚%%''ギードが現れます。このギードを右クリックすると、オブジェクト選択画面になります。type2を選択し、かなり下にあるhell light source1(id=106番)を選択して決定します。すると真ん中にhell light source1が''%%ただの豚%%''ギードの代わりに配置されます。夜ならほんのりと光る、透明なオブジェクトです。 ここまでの作業が済んだらctrl+Sで保存した後(成功したらメッセージが表示される)、escを押して''"quit"''を押します。既に保存したので保存せずに終了して下さい。 これでマップ自体の編集は終了です。 **&size(15){仕上げとデバッグ}; [#mc011be9] ***&size(15){levels.txtの再修正}; [#of53b959] ds1edit loaderを終了する前に、outputタブに切り替えて下さい。そこには起動までの情報が書かれています。下の方にwidth(X)とheight(Y)が書かれているので、その値を覚えていて下さい。 さて、もう仕上げにもう一度levels.txtを編集します。 まずは下の表をご覧下さい。levels.txtの項目の一部です。 |&size(13){''Name''};|&size(13){''Id''};|&size(13){''Pal''};|&size(13){''Act''};|&size(13){''QuestFlag''};|&size(13){''QuestFlagEx''};|&size(13){''Layer''};|&size(13){''SizeX''};|&size(13){''SizeY''};|&size(13){''SizeX(N)''};|&size(13){''SizeY(N)''};|&size(13){''SizeX(H)''};|&size(13){''SizeY(H)''};| |&size(13){Act 1 - Cave 2 Treasure};|&size(13){13};|&size(13){0};|&size(13){0};| | |&size(13){6};|&size(13){24};|&size(13){24};|&size(13){24};|&size(13){24};|&size(13){24};|&size(13){24};| ''ここで変更する箇所は、SizeXとSizeYです。(N)と(H)も含みます。'' サイズは覚えていますか? 今回の場合はサイズはそのままなので変更しなくて結構ですが、もしサイズを変更した場合、levels.txtでのサイズは''実際のマップのサイズ - 1''になるので注意して下さい。尚、Preset型のマップの場合、サイズは各難易度共通で同じでなければなりません。 つまり、SizeXやSizeYが(N)や(H)の値と違うという事はあってはいけません。 もう一つ、変更しなければならない箇所があります。それが下の表です。 ||&size(13){Vis0};|&size(13){Vis1};|&size(13){Vis2};|&size(13){Vis3};|&size(13){Vis4};|&size(13){Vis5};|&size(13){Vis6};|&size(13){Vis7};|&size(13){Warp0};|&size(13){Warp1};|&size(13){Warp2};|&size(13){Warp3};|&size(13){Warp4};|&size(13){Warp5};|&size(13){Warp6};|&size(13){Warp7};| |&size(13){Act 1 - Cave 2 Treasure};|&size(13){0};|&size(13){9};|&size(13){0};|&size(13){0};|&size(13){0};|&size(13){0};|&size(13){0};|&size(13){0};|&size(13){-1};|&size(13){4};|&size(13){-1};|&size(13){-1};|&size(13){-1};|&size(13){-1};|&size(13){-1};|&size(13){-1};| この表は、caveroom2.ds1を使用しているマップ、つまりcave level2のリンク設定です。 visに書かれている番号は各level(ダンジョン、マップの事)のid番号が書かれてあり、warpというのはvisに対応する機能の事です。尚、warpはlvlwarp.txtのid番号に対応しています。 マップ内で使われてるタイルと合わない番号にvisが設定されていたり、visに合わないwarpを設定するとエラーが起きて強制終了になります。これを防ぐにはどうするか? 先ほどの編集では#44のタイルを使いました。#44のど真ん中にvis6と書いてあったのを覚えていますか? そう、このタイルはvis6を使用するタイルなのです。ですから、このままだといけません。 ''Vis1をvis6にコピーした後、vis1を0にして下さい。warp1は-1にして下さい。warp6はそのままで。'' ''一方通行の入り口にする為には、warpの値を19''にする必要があります。この値はどんなものか見てみましょう。 lvlwarp.txtを見て下さい。Nameが''"Act 2 Town to Sewer Trap"''となっているのが分かります。 そう、これはAct2のtown内にあるトラップドアで使われている機能です。''タイル内にあるオブジェクトにアクセスするとリンクが有効になる''、珍しい仕掛けです。 これで、何故タイルのど真ん中にオブジェクトを置いたか分かりますね。この機能はオブジェが無いと正しく動作しないからです。 paulさんが自ら書いたチュートリアルでは、「''一度オブジェにアクセスすると次回からリンクが有効になるが、そもそもオブジェにアクセス出来なければ''(編集で用いた"hell light source 1"''にはアクセス出来るような設定がされていない)''リンクは有効に出来ないので、入り口が事実上使えなくなる''」的な事を書いています。 これが、一方通行の仕掛けです。 では、levels.txtの話に戻りましょう。''warp6を19に設定して下さい。'' これで全ての編集が終わりました。後は実際に起動してデバッグしていくだけです。 もっとも、それが一番長く難しいのですが。 ***&size(15){デバッグ}; [#b4ce20c9] さて、いよいよ起動です。確認をしましょう。以下の項目が間違いなければデバッグに取り掛かります。 -&size(13){caveroom2.ds1が ''My Mod/data/global/tiles/act1/caves'' に入っている}; &br; -&size(13){今まで編集したlevels.txt、lvltypes.txt、lvlprest.txtが ''My Mod/data/global/excel'' に入っている}; &br; -&size(13){Mod Launch Script Plusの1.10対応のvbs(''11b_launch.vbs''または''11b_launch-w.vbs'')が、''My Modフォルダ直下に置かれている''}; &br; 全て出来ていますね? では、デバッグにかかりましょう。 まずはvbsをダブルクリックで起動して下さい。ちゃんと動きますか? Mod Launch Script Plusの使い方まではフォローしないので、各自で設定して下さい。 起動したら、早速、''cold plainのcave level2''に行ってみましょう。 ''行って自作マップに入れたら完成です。そうでなければ、そうなるまでひたすらエラーを修正します。'' エラーのリストはPKのフォーラムで見る事が出来るので、英語が読める方はそちらを読んだ方がずっと早いし為になります。 分からない方は、ここでの作業で起こりうるエラーについてのみ以下に記します。 http://phrozenkeep.planetdiablo.gamespy.com/forum/viewtopic.php?t=34449 ↑がPK Forumの記事。マップ編集で起こりうるエラーのほぼ全てが記載されています。念の為。 ***&size(15){エラーリスト}; [#e80ddc93] このチュートリアルで起こりうるエラーについてのみ記載。 ---- |&size(13){Assertion Failure};&br;&size(13){Location : D2Common\DRLG\Preset.cpp, line #X};&br;&size(13){Expression : Level labeled as Preset, but no preset claims the level};| preset型のマップになっていない。levels.txt内のdrlgtypeの欄を確認する事。 ---- |&size(13){Assertion Failure};&br;&size(13){Location : D2Common\UNITS\UnitRoom.cpp, line #X};&br;&size(13){Expression : DungeonTestRoomGame ( hRoom, nX, nY)};| warpに関連したエラー。もしかすれば、歩行不能属性のタイルにマップの入り口が近すぎるかも。 ---- |&size(13){Warning};&br;&size(13){Location : D2Common\DRLG\Preset.cpp, line #X};&br;&size(13){Expression : ptRegion->ptFile->nSizeX == ptRegion->tCoords.nSizeTileX};| マップのサイズとlevels.txtで設定されているサイズが噛み合っていない。 実際のマップのサイズが25,25(x,y)なら、levels.txtでは24,24(x,y)となる。 一番ありがちなエラー。 ---- |&size(13){Warning};&br;&size(13){Location : D2Common\DRLG\DrlgVer.cpp, line #X};&br;&size(13){Expression : FALSE};| warpがvisに噛み合っていない。 ---- |&size(13){Assertion Failure};&br;&size(13){Location : D2Common\DATATBLS\LvlTbls.cpp, line #X};&br;&size(13){Expression : Error in DRLG related to stairs that connect levels.};| リンクが正しくない。これもよく起こるエラー。デフォルトのリンクを変更した場合によく起こる。 ''デフォルトと異なるvisを使った貴方、levels.txtで元のvisやwarpを消し忘れていませんか?''よーく確認して根気良く潰しましょう。 ---- |&size(13){Warning};&br;|&size(13){Location : d2Common\drlg\roomtile.cpp, line #X};&br;|&size(13){Expression : ptwarp};| マップ(ds1)の中でvisは使ってるけど、levels.txtのvisの欄と設定が関連付けされてない(設定が噛み合っていない)。 または、マップに配置したvisタイルがhidden属性になっていない。後者の場合なら、''ctrl+shift+enterでvisの属性編集画面を開き、対応する壁レイヤー(w1,w2,w3,w4のいずれか)のhiddenの項目を1にセットしましょう。'' ---- |&size(13){Assertion Failure};&br;&size(13){Location: D2Hell/SRC/Archive.cpp, line #X};&br;&size(13){Expression: hFile};| lvlprest.txt内のdt1maskが間違っている。lvltypes.txtを参照しながら、もう一度計算し直しましょう。 ---- |&size(13){ACCESS_VIOLATION (c0000005)};| マップ以外ならとてもよく目にするエラー。画像(dc6やdcc)といったもの関係で非常に多い(主にリンクが正しくないか、ファイルが存在しない)。 マップの場合は、''entering ????(マップ名)''といった、マップに入った時に表示される画像ファイルが無い時によく起こる。 ***&size(13){''その他、エラーの原因となる設定''}; [#y5a05d92] -&size(13){lvlprest.txtでpreset型マップなのにx,yを指定している}; &size(13){(非常にまずい。値が合ってるならともかく、ここでlevels.txtと違う値を設定すると間違いなくエラーが出る。そもそもpreset型のマップはlvlprest.txtでサイズ指定をする必要が無い)}; &br; -&size(13){levels.txtでoffsetの欄をヘンに弄りすぎる&br;(デフォルトのままでも、大規模なマップの場合ならばエラーになってしまう。これについてはまた次回に説明)}; **&size(20){マップをより細かく設定する、詳細の修正}; [#o08f1650] ***&size(15){小屋の中が表示されない!}; [#o9e538cf] さて、今回のチュートリアルは無事に完成しました。上手く行けば下の画像のようになっていますが、ここで問題が起こります。 #ref(./tut4.jpg,50%); ''小屋に入っても小屋の中が見えない''のです。これは困る。地味に困る。 Diablo2には、屋根という属性のタイルもあります。タイルの上にタイルを重ねて見えないようにしてしまうやり方です。 これのお陰で外から建物の内部が見えないようになっているのです。でも、中に入ると内装が表示されます。''この設定は、マップ(ds1ファイル)自体とlvlprest.txtでされています。'' #ref(./tut3 cott.jpg,50%); 先ほどの説明の時の画像の拡大版です。奇妙な緑色のタイルが目立ちます。 ''これがマップ側で屋根や内装の表示といった制御を扱うスペシャルタイルです。'' 恐らく、屋根の非表示に切り替えるタイルと表示に切り替えるタイルなのでしょう。 詳細はPK Forumですら無いので、この辺りはもう''既存のマップからコピー&ペーストして配置して下さい。こればっかりは自力でやらない事。エラーの元になります。'' 今回の場合、lvlprest.txtを弄るだけで結構です。やり方は簡単。 ''cott2.ds1''から小屋をコピったので、スプレッドシートでlvlprest.txtを開き、''「cott2」''で検索します。すると49行目に移動するはずです。では、49行目の以下の項目に注意して見て下さい。 |&size(13){''Name''};|&size(13){''Populate''};|&size(13){''Logicals''};|&size(13){''Pops''};|&size(13){''PopPad''};| |&size(13){Act 1 - Cottages 1};|&size(13){1};|&size(13){1};|&size(13){2};|&size(13){-4};| ここで注目すべきはName以外の4つ。''Populateは、PopsとPopPadの設定を有効にする為のもの''で、''Logicalは壁に近づくと壁が透けるかどうかの項目''です。 小屋に入った時に内装を表示する場合、''Populateを1に''します。今回はcott2を使ったので、''PopsとPopPadはここの値をコピー''しましょう。 今度は''「caveroom2」''で検索して下さい。再び106行目の「Act 1 - Cave Treasure 2」を編集します。この行のPopsとPopPadに、先ほどコピーした値をペーストして下さい。 作業が完了したら保存を忘れずに。今度は普通のマップ同様に、中に入ると内装が表示されるようになります。 ***&size(15){Way Pointを使いたい!}; [#l142e202] Way Point(以下、WP)は大層便利な代物です。誰だって、『自分の作ったマップに置きたい!』と思うはずです。 で、そのやり方どーすんの?ってのをここで解説します。 |&size(13){''WPの追加方法''};| |&size(13){既存のWPと置き換える};| |&size(13){新たにWPを追加する};| 前者は非常に簡単ですが、後者はそれ用のPluginが必要になります。後者に関しては著者自身が未経験なので解説しません。 ここでは、前者の''「既存のWPと置き換える」方法について解説します。'' まずはds1edit loaderでマップを開きます。マップを開いたら、WPを置きたい場所にWPで使われているタイルを置きます(タイル自体に意味はないので、置かなくてもよい)。 次にtabを押し、オブジェクト編集画面に移ります。タイルにフィットすると思う位置でinsertを押して下さい。''%%豚野郎%%''ギードが現れます。そしたら、このギードを右クリックして、オブジェクトを変更します。 #ref(./tut5.jpg,50%); 上の画像をご覧下さい。37番がWPで使われているオブジェクトです。これを選択して''OK''を押します。すると''%%豚%%''ギードがWPに変わります。 これでマップでの作業は完了です。保存した後、終了して下さい。 今度はlevels.txtを開いて編集します。変更すべき欄は以下の箇所。 |&size(13){''WayPoint''};| |&size(13){255};| 今回はチュートリアルで作ったマップにWPを追加する事にします。 15行目の「Act 1 - Cave 2 Treasure」のWayPointの欄を見て下さい。255になっています。 ここの255というのは、''WPに登録しない、WPで使わない''事を意味します。 ここでは、Cold Plainに置き換えてみましょう。5行目のWayPointの欄を見て下さい。 1と記入されています。ここの値を255にし、15行目の欄を1にすればWPに登録されます。 これでlevels.txtでの作業は終了です。実際に起動して見て下さい。 #ref(./tut6.jpg,50%); 成功すると上の画像のように、Cold PlainとCave Level2が入れ替わっています。 ***&size(15){暗いってレベルじゃねーぞ!!}; [#ve3a4cb0] せっかく作ったマップが暗い……。そんな問題に出くわす事もあります。これは何故かというと、''屋内エリアとして設定されているからです。'' これを直すにはlevels.txtとlvlprest.txtを修正します。 まずはlevels.txtを開いて下さい。以下の項目を修正します。 |&size(13){''LOSDraw''};|&size(13){''IsInside''};| |&size(13){1};|&size(13){1};| 作ったマップが暗いのはこれが原因です(正確には、''IsInside''は大して関係が無い。昼夜設定の影響を受けるか受けないかを設定する項目である為)。 ''LOSDraw''の''"LOS"''ってなんだ? これは''"Line of Sight"''の略です。つまり、''視界の事''です。 これが1になっていると、''視界(itemstatのlight radius効果に影響される)以外は見えない''ような設定です。これを0に修正します。 それと、先ほど''IsInside''は大して関係ないと書きましたが、これも0にしましょう。 ここが1のまま''LOSDraw''が0だと、常に昼間のように明るい設定になります。他所が夜なのにここはいつだって昼という、奇妙な設定になってしまいます。一応、直しておきましょう。 これでlevels.txtでの作業は終了です。保存を忘れずに。 今度はlvlprest.txtを開きます。ここで修正するのは以下の項目。 |&size(13){''Outdoors''};| ここを直すのは、単にlevels.txtと設定が食い違わないようにする為です。IsInsideを0にしたなら、こちらは1にしましょう。 これでlvlprest.txtの作業は終了です。 これで一般的な屋外マップと同じ設定になっているはずです。実際に起動して確認しましょう。 ***&size(15){NPCを町の外に配置したい!}; [#vfc57ee4] これも非常に簡単です。今回編集するのはmonstats2.txtとマップ本体のみ。 まずはチュートリアルで作ったマップをds1edit loaderで開きましょう。 前に解説した手順でオブジェクト編集モードに移行し、オブジェクトを挿入します。 今回はぶt……ギードを小屋の中に配置しましょう。ギードはtype1オブジェクトでidが一番最初なので、insertを押すだけで配置完了です。 今度はmonstats2.txtを開きましょう。''「gheed」''と検索し、gheedの行を見てみます。 編集すべき項目は以下の部分。 |&size(13){alSel};| |&size(13){0};| この、''alSel''という部分を''1に変更します。''これで作業は終了です。早速、起動して正しく実装されているか見てみましょう。 #ref(./tut7.jpg,50%); 成功していれば、上のように''%%豚小屋の完成です。%%''小屋の中にギードが現れます。 ただ配置するだけでは、町以外では話しかけられません。上で解説した変更を施す事で、話しかけたり取引が出来るようになります。 *&size(20){コメントやその他}; [#qc48148e] **&size(15){プラグインやツール、チュートリアルへのリンク}; [#x3c97c75] [[Diabolic Cartography:http://diabolic.planetdiablo.gamespy.com/]] : Phrozen Keepの古参であるOnyxさんとVolfさんの管理・運営するマップのプラグイン置き場。豊富かつ魅力的なマップがいっぱいです。&br; [[Ds1 Editor - Tutorial 1:http://paul.siramy.free.fr/_divers/ds1/doc/tut01/index.html]] : paulさんが直々に書いたds1editの使い方。マップ編集の仕方などが書いてあります。''ds1edit loaderの使い方ではないので注意。''&br; [[DS1Edit Loader v2.1 - with Required DLLs:http://phrozenkeep.18v.biz/dload.php?action=file&file_id=1472]] : ds1edit loader。Phrozen Keep内のFile Centerへのリンクです。ここからダウンロードして下さい。''必要なDLLが梱包済みです。''&br; [[Ds1edit本体(win版):http://phrozenkeep.18v.biz/dload.php?action=file&file_id=127]] : paulさん開発のds1edit本体です。''これが無いとloaderは動かないので注意。''こちらもPhrozen Keep内のFile Centerへのリンク。ダウンロードはこちらから。&br; &size(13){今回のチュートリアルのサンプルプラグインを作っておきました。&ref(Tut/MM/mapedit/tutorial_map_plugin.zip);}; **&size(15){コメント}; [#dd8de76e] #comment - てすと -- [[822]] &new{2008-08-27 (水) 01:06:06};