//itsファイル構造 //カッコ内()の数字・変数は構造体や配列の数を表す //文字列は全てsjis //ファイルヘッダ(1) struct SITSHeader { char ext[4]; //"its\0" char warning[64]; //"test scenario data for interurban" int ver; //10004 }; //シナリオヘッダ(1) struct SITSDataHeader10004 { int width; //マップ幅 int height; //マップ高さ int objectivenum; //マップ上の地名数(SITSObjective) int region; //ランダム駅名の地域設定 0:日本 1:アメリカ int motorization_flag; //平均評定速度が乗車数に影響するか 0:しない 100:する short num_staname; //初期配置された駅の名前(SITSStaName)の数 (0-) 指定のない場合はランダム short num_debt; //初期状態の借金(SITSDebt)の数 (0-) int add_capt; //追加初期資金(初期配置線路・駅・関連事業は開始時に初期資金を使って建設されるので多めに設定すること) int centerx; //マップロード時に表示される座標 int centery; char exist_rival; //ライバルが存在 0:存在しない 1:存在する(存在する場合はmotorization_flagは0にすること) char reserved011; //以下予約。0を指定。 char reserved012; char reserved013; int reserved02; }; //勝利条件ヘッダ(1) struct SITSVCHeader { int ver; //10000 char pvyear; //完全勝利までの時間(年) 1- char pvmonth; //完全勝利までの時間(月) 1-12 char nvyear; //通常勝利までの時間(年) 1- char nvmonth; //通常勝利までの時間(年) 1-12 int victoryconditionnum; //勝利条件データ数(SITSVictoryCondition) char title[128]; //シナリオタイトル char breifing[2048]; //シナリオ状況説明 char msg_perfectvictory[512]; //完全勝利時メッセージ char msg_normalvictory[512]; //通常勝利時メッセージ char msg_defeat[512]; //敗北時メッセージ }; //勝利条件(SITSVCHeader.victoryconditionnum) struct SITSVictoryCondition { short victorykind; //勝利条件の別(別テキスト参照) int param1; //パラメータ1(勝利条件参照) int param2; //パラメータ2(勝利条件参照) char necefor_pv; //0:通常勝利条件 1:完全勝利条件 }; /* 勝利条件は複数指定可能。 みちのくのインターアーバンの例 SITSVCHeader pvyear=25 pvmonth=12 nvyear=25 nvmonth=12 victoryconditionnum=3 SITSVictoryCondition[0] victorykind=700 param1=1 param2=-1 necefor_pv=0 SITSVictoryCondition[1] victorykind=501 param1=75000 param2=0 necefor_pv=0 SITSVictoryCondition[2] victorykind=501 param1=100000 param2=0 necefor_pv=1 完全勝利のためには通常勝利の勝利条件をすべて満たす必要がある。 また、完全勝利と通常勝利は常に別個に設定する必要がある。 例えば、NYシナリオで完全・通常勝利の輸送人キロが同じで、達成時期が異なる場合、以下のように設定。 SITSVCHeader pvyear=25 pvmonth=12 nvyear=30 nvmonth=12 victoryconditionnum=2 SITSVictoryCondition[0] victorykind=200 param1=300000 param2=0 necefor_pv=0 SITSVictoryCondition[1] victorykind=200 param1=300000 param2=0 necefor_pv=1 */ //地名(SITSDataHeader10004.objectivenum)。役所等の上に出ているアレ。 struct SITSObjective { char name[64]; //地名 char id; //id(重複しないように。また、必ず0をどれかに指定) int x; //位置 int y; }; //初期配置された駅の名前(SITSDataHeader10004.num_staname) struct SITSStaName { char name[64]; //駅名 int x; //駅の位置 int y; }; //借金(SITSDataHeader10004.num_debt) struct SITSDebt { short repay_year; //返済年 short repay_month; //返済月 int interestrate; //金利(0-100) }; //マップデータ(1) short[SITSDataHeader10004.width*height] //res/blddata.csvの1列目の数字参照。 //線路データ(1) short[SITSDataHeader10004.width*height] //関連事業もここで指定。別テキスト参照。 //SITSDataHeader10004.exist_rival==0のときはここまで //他社データ(1) struct SITSRivalData { char name[64]; //他社社名 char shortname[64]; //他社省略社名(乗換案内等で表示) char presidentname[64]; //他社代表者名 int capital; //他社資本金(初期配置線路・駅・車両は開始時に初期資金を使って建設されるので多めに設定すること) int subsidy; //0を指定 short num_debt; //借金の数(SITSDataHeader10004と同じ 0-) short num_train; //保有車両(SITSRivalTrain)の数 (0-) short num_schedule; //ダイヤ(SITSRivalSchedule)の数 (0-) short ableto_takeover; //買収可否 0:不可能 1:可能 int reserved01; //予約 0を指定 int reserved02; //予約 0を指定 }; //借金(SITSRivalData.num_debt) 自社のそれと同じ struct SITSDebt //所有車両データ(SITSRivalData.num_train) //開始時にこの車両を使ってダイヤを組むので、十分な数を準備すること struct SITSRivalTrain { int trainid; //車輛ID(res/traindata.csvの1列目を参照) int num_train; //編成の数 }; //ダイヤデータ(SITSRivalData.num_schedule) //経由地点を2ヵ所以上を指定してルートを決定。その後に運転本数、車両割り当て、停車通過設定を開始時に行う。 //割り当てるべき編成数が足りない場合や、線路容量がオーバーしたとき等のエラー処理は行っていないので注意。 struct SITSRivalSchedule { char name[64]; //ダイヤ名(例:普通 京都-大阪 等) int trainid; //車輛ID(res/traindata.csvの1列目を参照) int num_train; //割り当てる編成数 int num_perh; //運転本数 int num_viapos; //経由地点数(2-16) 通常は始点駅・終点駅の2で良い int num_comego; //停車通過設定数 short viaposx[16]; //経由地点座標 通常は始点駅・終点駅の2ヵ所を指定。残りは-1で埋める。 short viaposy[16]; char comego[256]; //経由する駅全てを往復で指定。駅の順序は経由地点のそれに従う。0:停車 1:減速通過 2:通過 }; //他社線路データ(1) short[SITSDataHeader10004.width*height] //自社のそれと同じ