Top / MOD一覧 / MOD製作 / SCENARIO

MOD製作/SCENARIO

MOD製作

(英語版Wiki、http://www.paradoxian.org/hoi2wiki/index.php/Modding_scenariosより訳出)

シナリオは何種類かのファイルから組み立てられています。もしある国家のスタート時の状態を変更したいのであれば、拡張子incのファイル群をエディットすればよろしい。もしシナリオ自体の設定を変更したいのであれば、拡張子eugのファイル群をエディットすればよろしい。ショートシナリオを改造する場合、.eugファイルだけでなく、ショートシナリオ特有の事情も知る必要があります。

eugファイルの改造

(オリジナル記事)

イントロダクション

.eugファイルはシナリオ改造の第一歩。中身には開始日とか、プレイ可能国家とか、どの.incファイルをシナリオで使うのかとかいった情報が満載。

はじめての設定

.eugファイルの最初の部分は、シナリオ名とパネルとヘッダーだ。

例:
name = "1936_SCENARIO"
panel = "scenarios/data/scenario_1936.bmp"


header = {
      name = "Grand Campaign"
      startdate = { 
      year = 1936
      }

nameがシナリオ名になる。これは.cfgファイルにエクスポートされたり、直接書かれたりする。
panelってのはシナリオ名と一緒になってる小さいグラフィックのことだ。
headerにはシナリオを始めたときとF1キーを押した時のポップアップに出る情報が含まれている。注意して欲しいが、本当の開始日は他所にあるのであって、ここにあるstartdateは参照しない。

プレイ可能国

その次はこんな感じのがあるはずだ。
例:

selectable = {
ENG FRA GER HOL POR ITA SOV SWE TUR JAP CHI POL NOR BEL DEN SCH CUB GRE BUL YUG HUN
ROM AUS CZE IRE EST LAT LIT FIN PER AFG BRA ARG MEX COL VEN PRU ECU URU PAR BOL CHL
NZL CAN AST MAN USA ETH SPR CHC ALB SIA SAU MON GUA COS NIC DOM PHI BHU SAL HAI HON
IRQ LIB LUX NEP OMN PAN SIK SAF TAN TIB YEM CGX CSX CXB CYN EGY
}
	ENG = {
	}

	FRA = {
	}

	ITA = {
	}

	GER = {
	}

	SOV = {
	}

	POL = {
	}
	CHI = {
	}
	JAP = {
	}
	CAN = {
	}
	USA = {
	}

}

前半部分が、このキャンペーンシナリオでプレイできる国のタグ一覧だ。もしプレイできないようにしたい国があるなら、その国のタグを表から削除すればいい。プレイできるようにしたい国があるなら、この表に追加すればいい。
後半の縦にタグが並んでいるのが、最初の選択可能画面に出てくる国(右クリックしなくても選べる国)だ。1.2では10カ国でなく12カ国までここに書いておけるようになった。

全体のデータ

ここが眼目だ。同盟がどの国で構成されるのかとか、シナリオがいつ始まっていつ終わるかとかを決める部分だ。

例:

globaldata = {
    startdate = {
        year = 1936
        month = january
        day = 0
        }
    enddate = {
        year = 1947
        month = january
        day = 0
        } 

		allies = {
	        id = { type = 15000 id = 1 }
			participant = { ENG IRQ FRA AST NZL CAN SAF NEP BHU YEM OMN }
				}
		axis = 	{
	        id = { type = 15000 id = 2 }
			participant = { GER }
		}
		comintern = 	{
	        id = { type = 15000 id = 3 }
			participant = { SOV MON TAN }
		}
		alliance = {
			id = { type = 15000 id = 10 }
			participant = { CHI CXB }
			}
		alliance = {
			id = { type = 15000 id = 11 }
			participant = { EST LAT }
			}

startdateはシナリオの開始日。enddateはシナリオの終了日。いずれも、NTL(no time limit patch)を入れてない場合、1936年1月1日から1947年12月30日(訳注・無印の場合)の間に収める必要がある。
次にalliesとaxisとcominternがある。それぞれの括弧中に国タグを追加することで、シナリオロード前に新しいメンバーを同盟に追加することができる。例えばaxisのparticipantの後の括弧内にITAと書き足すと、イタリアが枢軸メンバーになる。それから、同盟のメンバーのうち、最初の国タグが同盟のリーダー国になる。
三大同盟以外にも、他の同盟をここで作ることができる。特に制限はないが、idだけは重複しないようにしてやる必要がある。
例:

#Little entente(小協商)#
alliance = {
id = { type = 15000 id =  13  }
participant = { CZE POL YUG ROM }
}

例の最初の行はコメントしてある(ゲームには無関係)。イベントファイルと同じ感じで、#を使うとコメントアウトできる。
次に、戦争についても同じように作っていける。

例:

         war = {
             id = { type = 9430 id = 1 }
             date = { year = 1935 month = october day = 3 }
             enddate = { year = 1936 month = january day = 0 }
               attackers = {
                       id = { type = 9430 id = 2 }
                       participant = { ITA }
       	}
	        defenders = {
      			id = { type = 9430 id = 3 }
           		participant = { ETH }
       	}

同じように、複数の国が攻撃してたり防衛側に回っていたりといった状況は、attackersとdefendersの括弧内に複数の国タグを入れることで実現できる。もちろん、追加した場合には } できちんとフィールドを閉じてやる必要がある。

条約とかいろいろ

ここでは、複数の国の間で、いろいろな条約を結ばせることができる。

例:

treaty = {
id = { type = 16384 id = 1 }
type = non_aggression
country = "USA"
country = "ARG"
startdate = { year = 1935 month = december day = 30 }
expirydate = { year = 1948 month = december day = 30 }
}

まず最初に来るのがID。ここ重要。すべての条約は、同じID表を使う。貿易でも講和条約でも不可侵条約でも共通。覚えとくように。

例:

id = { type = 16384 id =  1  }

ここ。typeってのが条約の種類。普通は不可侵条約か貿易だと思うけど、まあ、前もっての講和条約も作ることはできるけど。
startdateが条約の開始日で、expirydateが条約の切れる日。もちろん、startdateをキャンペーンシナリオ終了日よりも前にしないと無駄になってしまう。
さて、少し違うので貿易協定も作ってみよう。ちょっと見て欲しい。

例:

treaty = { 

id = { type = 16384 id = 317 }
type = trade
country = "HOL"
country = "MEX"
startdate = { year = 1935 month = december day = 30 }
expirydate = { year = 1948 month = december day = 30 }
rare_materials = -4
supplies = 2
}

下に資源が書いてあるのが分かると思う。type = tradeの下に書く国の順番と、最後に書いてる資源の順番とが一致する必要がある。この場合、オランダ(HOL)がメキシコ(MEX)に、一日あたり希少資源4個を出して、物資2個を受け取ることになる。

使用ファイル指定 VPと.incファイルとイベント

最後は、一番下でこういったファイルを指定する。これを見て欲しい。

例:

################################################
   }

# Vp things
include = "scenarios/1936/vp.inc"

# Countries

include = "scenarios/1936/cyn_36.inc"
include = "scenarios/1936/cgx_36.inc"
include = "scenarios/1936/cxb_36.inc"
include = "scenarios/1936/csx_36.inc"
include = "scenarios/1936/germany.inc"
include = "scenarios/1936/holland.inc"
include = "scenarios/1936/bel_36.inc"
include = "scenarios/1936/den_36.inc"
include = "scenarios/1936/uk.inc"
include = "scenarios/1936/ireland.inc"
include = "scenarios/1936/france.inc"
include = "scenarios/1936/poland.inc"
include = "scenarios/1936/italy.inc"
include = "scenarios/1936/swiss.inc"
include = "scenarios/1936/aut_36.inc"
include = "scenarios/1936/czh_36.inc"
include = "scenarios/1936/spain.inc"
include = "scenarios/1936/portugal.inc"
include = "scenarios/1936/sweden.inc"
include = "scenarios/1936/norway.inc"
include = "scenarios/1936/finland.inc"
include = "scenarios/1936/est_36.inc"
include = "scenarios/1936/lithuania.inc"
include = "scenarios/1936/latvia.inc"
include = "scenarios/1936/hungary.inc"
include = "scenarios/1936/romania.inc"
include = "scenarios/1936/yugoslavia.inc"
include = "scenarios/1936/greece.inc"
include = "scenarios/1936/bul_36.inc"
include = "scenarios/1936/turkey.inc"
include = "scenarios/1936/soviet.inc"
include = "scenarios/1936/japan.inc"
include = "scenarios/1936/chi_36.inc"
include = "scenarios/1936/chc_36.inc"
include = "scenarios/1936/usa.inc"
include = "scenarios/1936/can_36.inc"
include = "scenarios/1936/mexico.inc"
include = "scenarios/1936/cub_36.inc"
include = "scenarios/1936/bra_36.inc"
include = "scenarios/1936/arg_36.inc"
include = "scenarios/1936/uruguay.inc"
include = "scenarios/1936/col_36.inc"
include = "scenarios/1936/peru.inc"
include = "scenarios/1936/chl_36.inc"
include = "scenarios/1936/bol_36.inc"
include = "scenarios/1936/ecu_36.inc"
include = "scenarios/1936/paraguay.inc"
include = "scenarios/1936/ethiopia.inc"
include = "scenarios/1936/southafrica.inc"
include = "scenarios/1936/ast_36.inc"
include = "scenarios/1936/newzealand.inc"
include = "scenarios/1936/siam.inc"
include = "scenarios/1936/persia.inc"
include = "scenarios/1936/venezuela.inc"
include = "scenarios/1936/saudi.inc"
include = "scenarios/1936/mon.inc"
include = "scenarios/1936/phi.inc"
include = "scenarios/1936/dom_36.inc"
include = "scenarios/1936/gua.inc"
include = "scenarios/1936/cos_36.inc"
include = "scenarios/1936/nic.inc"
include = "scenarios/1936/afg_36.inc"
include = "scenarios/1936/alb_36.inc"
include = "scenarios/1936/man.inc"
include = "scenarios/1936/lux.inc"
include = "scenarios/1936/lib.inc"
include = "scenarios/1936/yem.inc"
include = "scenarios/1936/omn.inc"
include = "scenarios/1936/tan.inc"
include = "scenarios/1936/pan.inc"
include = "scenarios/1936/hai.inc"
include = "scenarios/1936/sal.inc"
include = "scenarios/1936/hon.inc"
include = "scenarios/1936/irq.inc"
include = "scenarios/1936/bhu_36.inc"
include = "scenarios/1936/nep.inc"
include = "scenarios/1936/tib.inc"
include = "scenarios/1936/sik.inc"

include = "db\events.txt"
event = "db\events\AI_switches.txt"

ここで、このシナリオがどの .incファイルを使うか指定する。.incファイルは、全部ここに入れとく必要がある。VPについては、このシナリオは自前の.incファイルを持っている。それから、イベントについても、複数のイベントファイルをまとめて指定したものを(include = "db\events.txt")という形で指定している(これはdbフォルダにあるってことだ)。指定するイベントファイルの量が多いときは、こんな感じでイベントデータベースを使うことができる。
イベントデータベース(events.txt)にはaiを切り換えるファイル(AI_switches.txt)が含まれていない。なぜってシナリオ毎に違うからだ。だから.eugファイルのリストのここで、AIを切り換えるファイルも指定している。ところで、イベントデータベースに載せずにイベントを追加するなら、ここにイベントファイルを書いて指定してやればいい。
例:

event = "db\events\Newevents.txt"

最優先事項:このセクションの最初に、最後の締めくくりの括弧、}が入っている。例だと、################ってなってるコメント行の次に入っている(訳注・手元の1936.eugを見てみたら、それは}の次の行に####が入ってそれからファイル指定に入ってました)。もし何かの理由で消してたんだったら、忘れずに書き足しておくように。

incファイルの改造

(オリジナル記事

バックアップを作ろう! MODる時は、忘れずに。

それじゃあ次は.incファイルの番だ。ここでは1936シナリオのフォルダにあるpersia.incを使って説明していこうか。ファイルのパスは /scenarios/1936/persia.incだ。
ファイルを開いてもらうと、まず最初にこんな感じのことが書いてあるはずだ。
 

province = {
        id = 1492
        anti_air = 2
        naval_base = {
                 size = 3
                 current_size = 3
        }
        air_base = {
                 size = 1
                 current_size = 1
        }
}

.incファイルのこの部分では、特に変わったことのあるプロヴィンスを書いておく。この場合、id番号1492のプロヴィンスに、対空砲2レベルと、海軍基地3レベルと、空軍基地1レベルが存在するように改められている。もしここの数字を変更したら(上限値は10)、ゲームスタート時に指定された数字の建築物がある状態になってる。ただし、このとき注意して欲しいが、最大のサイズ(size)の数字以下に現在のサイズ(current_size)をしておかないといけない。

しかし、ここをもっと変えたいとしたら? たとえばもっとたくさんのICをペルシャに与えようとするとすればどうかな? やり方は二つある。私は最初に紹介する方が好みだが、どのやり方でも結果としては同じだ。

ic = { size = 50 current_size = 50 }

もしくは

ic = 50

どのやり方でも、これでプロヴィンス1492が工業力50点をたたき出すようになる。これは理論上はこれで、プロヴィンスに設定されていることなら(資源とか要塞とかその他)なんでも設定できる。まあ限界値(対空とか基地類だったら10とか、そういうのだ)はあるけどね。それから、最大サイズを50に設定する一方で現在のサイズを0にすることで、全力になるまで回復する時間が必要なようにもできる。

この二つの書き方の微妙な違いは覚えとくといい。それから、同じやり方でプロヴィンスの他の設定値、インフラとか海軍基地とか空軍基地とかを変えることもできる。最初の書き方は新しい値を設定するやり方で、2個目の方は値を修正するやり方になる。

え、どういう意味かって? まあプロヴィンス1492の代わりにプロヴィンス1184(東京)で説明しようか。もし最初の書き方で書いたら、そのシナリオでの東京のICは単に50になる。もし2個目の、簡単な方の書き方でやったら、本来のICに加えてさらに50IC増えた値になる。東京はprovince.csvファイルでは20ICになってるから、このシナリオでの東京のICは70だってことになる。

これはシナリオファイルでは累積して働く。仮に間違って、ファイル中に同じプロヴィンスについて2回記述してしまうと、例えば50ICを2回追加することになる。だから50+50+province.csvの本来の値、で100以上のICになってしまう。で、もしもっと面倒な書き方(最初の書き方)でやってた場合は、何回書いたとしてもそのプロヴィンスは50ICのままだ。

おまけにもひとつ。このやり方でプロヴィンスのインフラを上げるか修正しようと思ったら、値(と現在の値)は、かならず0.0から1.0の間で指定しないと駄目だ。うん、province.csvとは違ってる。province.csvファイルでは、インフラはパーセンテージ表示で10〜100って書いてるんだよね。

ではより大事なことへ。すべてのプロヴィンスを変更し終わったら(たまにあるよね、チート国家アメリカ並に強化してるファイル)、普通は次にこんな感じのヘッダーがあるはずだ。

country = {
  tag = PER

でもって、もしこの国が傀儡国だったり、指揮権を他国が持ってる場合には、こんな感じで書き足せばいい。

control = GER

これで、ペルシアはドイツ(まあどこの国タグでもいいわけだが)に指揮権を譲渡している状態になる。それから、

puppet = GER

これで、ペルシアはドイツ(まあどこの国ry)の傀儡国になる。

それから、こんな感じのが続いているはずだ。

# Resource Reserves
energy = 1000 metal = 1000 ...

見ての通り。これをいじれば、スタート時のその国の資源備蓄が変わることになる。次に、

capital = 1502

ここがペルシアの首都になる。

manpower = 96

これが労働力の現在値だ。それから最後に、

policy = {
date = { year = 0 month = january day = 0 }
democratic = 3
political_left = 4
freedom = 3
free_market = 5
professional army = 3
defense_lobby = 5
interventionism = 5

これでその国のスライダーの位置が決まる。1だったら右端、10だったら左端になる。まあこれで全部分かったと思う。
それから、「province」セクションになる。国の一部なのか、支配しているのか、中核州なのか。こいつは本当にやっかいの種だ。
最初の二つを変更することは問題を引き起こす。なぜかって? じゃあ仮にプロヴィンス1を支配してることにしてみよう。さて、これでペルシアとデンマークが、同じプロヴィンスを支配して国土の一部としていることになった。まあ不可能だね。しょうがないんで、プロヴィンスを追加するか減らすかしたら、対応する側も変更してやらないと駄目だ。この場合、プロヴィンス1を追加したら、デンマークの.incファイルを開いて、そこから取り除いてやる必要がある。ああまだ終わりじゃない。revolt.txtってのにも新規建国時の国土が書いてあったりもするよね。必要ならそっちも変えとかないと駄目だ。

中核州はそれに比べたら大人しいもんだ。同じ土地に領有主張している国なんて幾らでもある。資源のないゴミプロビでも、しょっちゅう戦争の種になってるよね。

さてさてさて、次には外交、diplomacyセクションだ。

diplomacy = {
relation = { tag = AFG value = 25 }
relation = { tag = DEN value = 50 }
relation = { tag = ENG value = 25 }
relation = { tag = IRQ value = 125 }
relation = { tag = SAU value = 100 }
relation = { tag = SOV value = -20 }
relation = { tag = SWE value = 50 }
relation = { tag = TUR value = -50 }
}

これで、シナリオ開始時に指定した国との関係を設定しておける。もし最初からその国に軍隊の通行許可を出しておきたい場合、「access = yes」と外交値の後(ただし、かっこを閉じる前にだ)に書き足してやればいい。例えばこんな感じだ。

relation = { tag = SOV value = -20 access = yes }

これで、ソ連に通行許可を出しておける。

もし最初からどっかの国に独立保証をかけときたいなら、「 guaranteed = { day = NA month = NA year = NA } 」ってのを張り付けて、NAの代わりに日付を入れてやればいい。例えばこんな感じだ。

relation = { tag = AFG value = 25 guaranteed = { day = 1 month = january year = 1936 }

これで、ペルシアはアフガニスタンに独立保証を掛けてることになる。

その次は技術、Techsセクションだ。まあここに書き出したりはしないけど、すげー単純。要はその国が開始時に持ってる技術のIDを書いとくだけだ。増やすも減らすも思いのまま。簡単だよね?

さて、いよいよ最大の分量を占める部分だ。もちろんキツイぜ。最初の部分はこんな感じかな。

landunit = {
location = 1502
name = "Lasgar Parsi"
id = { type = 16600 id = 1 }
        division = {
        id = { type = 16600 id = 2 }
        name = "1. Dastebandi Sarbaze Piyade"
        type = infantry
        extra = artillery
        }
       ....
        }

...以下翻訳中
はいこれがペルシアのキャンペーン開始時の陸上ユニットだ。二つばかり、特に注意しておくことがある。最初に、idフィールドで「type」ってIDが設定されてるけど、ここの値はそのキャンペーンに登場するすべての国で共通して参照している。だから、国内だけじゃなくてキャンペーン全部で被ってないかチェックしないと駄目だ。調査した限りでは5000以上(5050までテストした)であれば、他国とは競合しないようだ、が、もちろん新しい国を作っていた場合は自分で面倒見てくれ。
次の「id」は国単位での参照用だ。例示したユニットでは1になっていて、それから師団が2になっている。他の師団(ちょっと表示はしてないが)が3になっている。よってこのユニットをコピー&ペーストしたのであれば、idの値を4,5,6に変えてやる必要がある。

This is the land units that Persia will have when starting the campaign. Note two big things. First the "type" ID. This ID must be unique compared to all the countries in the campaign. I know that 5000+ (tested through 5050) will not conflict with any other nations, but that is only if you are creating new nations. Next is the id. This must be unique among the nations units. Notice that the unit has a 1, then the division has 2. The other division (not seen here) has a 3. If we were to copy these units (from landunit down to the last bracket) we would only need to change the ID numbers to 4, 5, and 6, and they would appear in the game.

But, at the bottom is another unit, or so it seems. Notice the '#'s? These are basically the comments for the language HoI uses (like // in C). This means the parser will skip these when reading this. If we were to remove these, Persia would start off with a Destroyer in province 1497 (based there also).

Well, I think that about covers it. If I run across something more useful, I'll edit this. And feel free to edit this yourself. I know there are things I've missed. Hope this helps!

  • Tux 03:46, 5 May 2005 (CEST)

Top / MOD一覧 / MOD製作 / SCENARIO