【PC】Idol Manager ユニークアイドル作成とそれに必要なセーブデータの解析
丁寧に書くのはまた今度にして、とりあえず自分が詰まった点だけ雑に書き留めておく記事。
セーブデータの解析
場所はC:\Users\(ユーザー名)\AppData\LocalLow\Glitch Pitch\Idol Manager\data。
ゲームで読み込んだ後だと改行されておらず見づらいので、一度セーブしゲームを終了してから読み込むようにしよう。
アイドルのステータスは "data_girls__Girls"の中で定義されている。
今回読むアイドル
読み込んだタイミングによってわずかにステータス等に違いがあるかもしれないが、基本的なところは同じはず。
![](https://assets.st-note.com/img/1684558645251-YO179sShBG.jpg?width=1200)
![](https://assets.st-note.com/img/1684558656866-pUQHbiE2kH.jpg?width=1200)
![](https://assets.st-note.com/img/1684558664522-VQn9ZcCDIk.jpg?width=1200)
セーブデータの中身
"data_girls__Girls"の中
{
"status": 0, #0:活動中、4:卒業、7:卒業予定
"previous_status": 1,
"id": 122, #スタッフを含めた雇用順に割り当てられていると思われる。
"age": 0,
"peakAge": 19, #誕生日毎に能力が伸びる限界の年齢。ここを超えるとキュートを筆頭にどんどん下がる(早咲きだとさらに加速する?)。99にしたら少しずつだが毎年伸び続けている。
"birthday": "2019-12-15 10:00:00", #雇用時の年齢から逆算して決まってる。
"firstName": "育海",
"lastName": "黛", #アイドルの名前
"nickname": "", #つけたニックネーム
"sexuality": 1, #性的嗜好。 0:男性のみ。1:男女共に恋愛対象。2で女性のみ。
"training": 1,
"trait": 23, #特性。IDとの対応表はWiki等で確認できる(23は早咲き)。
"Type": 0,
"Trivia": [
"チョウの標本を集めている",
"兄が猫を20匹以上飼っている"
], #雑談の最初の二回で聞けるやつ。
"Wish_Type": 0, #アイドルの希望。写真撮影とか番組が欲しいとかのやつ。
"Wish_Formula": "",
"Wish_Fulfilled": false, #希望をかなえた状態であるかどうか。クリックすれば効果が受けられる状態で保留していたりするとtrueになる。
"Wish_Effect_Until": "1900-01-01 00:00:00", #これに限らず当てはまらない場合は1900年1月1日と入力されている
"LastDate": "2038-02-06 11:40:00", #最後に行動した日時。
"TransferDate": "2035-10-02 05:20:00", #姉妹グループへの移籍日時。多分ここを弄ると一年間の制限が解除できる?
"BullyStopped": "1900-01-01 00:00:00", #いじめを最後に受けた日。
"salary": 1537900, #給与
"RowInSenbatsu": [
2,
2,
1,
2,
2,
2,
2,
2,
1,
1,
1,
1,
5,
5,
5,
1,
5,
5,
5,
1,
5,
5,
5,
5,
1,
1,
5,
5,
5,
1,
5,
5,
5,
5,
1,
5,
5,
1,
5,
5,
5,
1,
5,
1
], #総選挙の順位。
"parameters": [
{
"type": 0,
"potential": 93,
"max_val": 100.0,
"daily_change": 2.3255999088287355,
"_val": 87.6807861328125
},
{
"type": 1,
"potential": 93,
"max_val": 100.0,
"daily_change": 5.694365978240967,
"_val": 88.14735412597656
},
{
"type": 2,
"potential": 94,
"max_val": 100.0,
"daily_change": 7.184421062469482,
"_val": 82.33378601074219
},
{
"type": 3,
"potential": 87,
"max_val": 100.0,
"daily_change": 14.151476860046387,
"_val": 80.75108337402344
},
{
"type": 4,
"potential": 75,
"max_val": 100.0,
"daily_change": 3.3928165435791017,
"_val": 100.0
},
{
"type": 5,
"potential": 88,
"max_val": 100.0,
"daily_change": 2.0762221813201906,
"_val": 99.08641815185547
},
{
"type": 6,
"potential": 94,
"max_val": 100.0,
"daily_change": 0.17799696326255799,
"_val": 94.82536315917969
},
{
"type": 7,
"potential": 83,
"max_val": 100.0,
"daily_change": 0.48906397819519045,
"_val": 87.59107208251953
},
{
"type": 8,
"potential": 0,
"max_val": 100.0,
"daily_change": -3.0,
"_val": 96.0
},
{
"type": 9,
"potential": 0,
"max_val": 100.0,
"daily_change": 10.0,
"_val": 100.0
},
{
"type": 10,
"potential": 0,
"max_val": 100.0,
"daily_change": 1992363.125,
"_val": 1992364.125
},
{
"type": 11,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 74.0
},
{
"type": 12,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 66.0
},
{
"type": 13,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 85.0
},
{
"type": 14,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 91.0
},
{
"type": 15,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 96.0
},
{
"type": 16,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 15.0
},
{
"type": 17,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 94.0
},
{
"type": 18,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 52.0
},
{
"type": 19,
"potential": 0,
"max_val": 100.0,
"daily_change": 0.0,
"_val": 0.0
}
], #アイドルの各種ステータス。0:キュート、1:クール、2:セクシー、3:ガーリー、4:ボーカル、5:ダンス、6:ユーモア、7:スマート。8~19は使われていない。
"Variables": [],
"LastDatingScandal": "0001-01-01 00:00:00", #スキャンダルが発生した日時
"ScandalPoints": 0, #アイドルが所持しているスキャンダルポイント
"Hiatus_Coeff": 1.0,
"HiatusEnd": "0001-01-01 00:00:00",
"Depression_Counter": 0, #ふさぎこんだ回数
"Injury_Counter": 0, #けがをした回数
"Earnings_CurrentMonth": 836065811, #先月の収入(給与ではなく雑誌撮影等でいくら稼いだか)
"Earnings_History": [],
"Rel_Friendship_Points": 512, #友好度。512が最大。嫌われていると-になる。
"Rel_Influence_Points": 512, #影響力。これも範囲は友好度と同じ。
"Rel_Romance_Points": 512, #恋愛。これも同じく。
"RelationshipsKnown": true, #交友関係を把握しているかどうか。trueで把握。把握していないとfalse。
"DatingData": {
"Previous_Attempt": 9, #前回のアタックの結果。9が成功。8が失敗。
"Success_Counter": 11, #アタックの成功回数。
"Partner_Status": 3, #パートナーがいるかどうか。
"Partner_Status_Known_To_Player": 3,
"Is_Partner_Status_Known": false, #パートナーがいるかをプレイヤーが知っているかどうか。
"Is_Sexuality_Known": false, #性的嗜好を知っているかどうか。
"Is_Uninterested": false, #プレイヤーが恋愛対象かどうか。ここがtrueだとどれだけ友好度が高くてもアタックが失敗すると思われる。
"Had_Scandal": false,
"Had_Scandal_Ever": false,
"Used_Goods": true,
"Dated_Idol": true
},
"Graduation_Trivia_Text": "", #卒業後の進路
"Graduation_Date": "2042-12-11 00:10:00", #卒業日時(おそらく卒業を考えている時期でも入る)
"Graduation_History": [
{
"Age": 16,
"Date": "2042年"
},
{
"Age": 17,
"Date": "2042年"
},
{
"Age": 18,
"Date": "2042年"
},
{
"Age": 19,
"Date": "2042年"
},
{
"Age": 20,
"Date": "2042年"
},
{
"Age": 21,
"Date": "2042年"
}
], #いつ頃の卒業を考えているか。誕生日毎に表示されるのと一致しているはず。
"Hiring_Date": "2035-09-30 10:00:00", #採用日時
"Will_Graduate_At_18": false, #18のタイミングでの卒業かどうか?
"SSK_Expected_Place": 0,
"SSK_History": [],
"Stats": {
"Proposals_Sexy": 53,
"Proposals_Pretty": 106,
"Sexy_Proposals_Declined": 0,
"Variety_Appearences": 20
},
"StatsYearly": {
"Proposals_Sexy": 14,
"Proposals_Pretty": 26,
"Sexy_Proposals_Declined": 0,
"Variety_Appearences": 5
},
"textureAssets": [
{
"type": 0,
"asset_id": "0 8 4"
},
{
"type": 1,
"asset_id": "1 8 4"
},
{
"type": 2,
"asset_id": "2 8 3"
}
], #それぞれ0,1,2.png。
"relationships": [
{
"target": 0,
"status": 2,
"girl": -1,
"staff": -1,
"Vals": [
1,
-1,
1,
-1,
1,
-1,
1,
-1,
1,
-1
],
"Temp": 0.0,
"Ratio": 0.5
}
],
"DateHistory": [
{
"MeetingDate": "2035-10-21 01:00:00",
"Type": 1
},
{
"MeetingDate": "2035-10-25 12:30:00",
"Type": 1
},
{
"MeetingDate": "2035-11-02 18:50:00",
"Type": 1
},
{
"MeetingDate": "2036-07-12 17:40:00",
"Type": 1
},
{
"MeetingDate": "2037-02-27 07:40:00",
"Type": 1
},
{
"MeetingDate": "2037-03-01 06:20:00",
"Type": 1
},
{
"MeetingDate": "2037-03-03 04:10:00",
"Type": 1
},
{
"MeetingDate": "2037-03-09 06:50:00",
"Type": 1
},
{
"MeetingDate": "2037-03-11 16:20:00",
"Type": 1
},
{
"MeetingDate": "2037-03-22 14:00:00",
"Type": 5
},
{
"MeetingDate": "2037-03-23 17:30:00",
"Type": 5
},
{
"MeetingDate": "2037-04-08 07:40:00",
"Type": 5
},
{
"MeetingDate": "2037-04-30 18:50:00",
"Type": 1
},
{
"MeetingDate": "2037-05-05 06:20:00",
"Type": 1
},
{
"MeetingDate": "2037-05-27 04:10:00",
"Type": 5
},
{
"MeetingDate": "2037-11-20 04:30:00",
"Type": 5
},
{
"MeetingDate": "2037-11-25 19:30:00",
"Type": 6
},
{
"MeetingDate": "2037-12-06 08:50:00",
"Type": 6
},
{
"MeetingDate": "2037-12-16 17:10:00",
"Type": 2
},
{
"MeetingDate": "2037-12-17 22:20:00",
"Type": 2
},
{
"MeetingDate": "2037-12-19 00:10:00",
"Type": 2
},
{
"MeetingDate": "2037-12-20 05:20:00",
"Type": 2
},
{
"MeetingDate": "2037-12-23 20:00:00",
"Type": 2
},
{
"MeetingDate": "2037-12-27 02:20:00",
"Type": 2
},
{
"MeetingDate": "2038-01-01 06:30:00",
"Type": 2
},
{
"MeetingDate": "2038-01-23 10:10:00",
"Type": 2
},
{
"MeetingDate": "2038-01-24 13:40:00",
"Type": 2
},
{
"MeetingDate": "2038-01-26 00:40:00",
"Type": 2
},
{
"MeetingDate": "2038-01-27 01:40:00",
"Type": 2
},
{
"MeetingDate": "2038-01-28 16:50:00",
"Type": 2
},
{
"MeetingDate": "2038-01-29 18:40:00",
"Type": 2
},
{
"MeetingDate": "2038-01-30 22:10:00",
"Type": 2
},
{
"MeetingDate": "2038-02-01 09:10:00",
"Type": 2
},
{
"MeetingDate": "2038-02-04 03:50:00",
"Type": 2
},
{
"MeetingDate": "2038-02-05 09:00:00",
"Type": 2
},
{
"MeetingDate": "2038-02-06 11:40:00",
"Type": 2
}
], #デートした日付。あくまでここに書かれているのは履歴だけで、進行度自体は別で定義されている。
"Fans": [
{
"gender": 0,
"hardcoreness": 2,
"age": 6,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9391480684280396,
"people": 13354,
"Vals": [
-1,
-1,
1,
1,
1,
1,
1,
-1,
-1,
1,
1,
1,
1,
1,
1,
-1,
-1,
1,
-1,
-1
],
"Temp": -0.5121307373046875,
"Ratio": 0.6000000238418579
},
{
"gender": 1,
"hardcoreness": 3,
"age": 6,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8820376396179199,
"people": 8893,
"Vals": [
-1,
-1,
1,
1,
-1,
-1,
1,
1,
-1,
-1,
1,
1,
1,
1,
1,
-1,
-1,
1,
-1,
-1
],
"Temp": 0.5060939788818359,
"Ratio": 0.5
},
{
"gender": 1,
"hardcoreness": 2,
"age": 6,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9325541257858276,
"people": 37930,
"Vals": [
1,
1,
1,
-1,
1,
1,
1,
1,
-1,
1,
-1,
1,
1,
1,
1,
-1,
1,
1,
1,
-1
],
"Temp": -0.24390602111816407,
"Ratio": 0.75
},
{
"gender": 0,
"hardcoreness": 2,
"age": 5,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9280935525894165,
"people": 34225,
"Vals": [
1,
-1,
-1,
1,
1,
1,
1,
1,
1,
1,
1,
-1,
1,
1,
1,
-1,
-1,
1,
1,
1
],
"Temp": -0.5060939788818359,
"Ratio": 0.75
},
{
"gender": 0,
"hardcoreness": 3,
"age": 4,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8867087960243225,
"people": 7000,
"Vals": [
-1,
-1,
1,
-1,
1,
-1,
-1,
1,
1,
-1,
1,
-1,
1,
-1,
1,
-1,
-1,
-1,
1,
1
],
"Temp": 0.24390602111816407,
"Ratio": 0.44999998807907107
},
{
"gender": 0,
"hardcoreness": 2,
"age": 4,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9332225918769836,
"people": 10852,
"Vals": [
1,
-1,
1,
1,
1,
1,
1,
-1,
1,
1,
1,
1,
-1,
1,
1,
1,
1,
-1,
1,
1
],
"Temp": 0.49390602111816409,
"Ratio": 0.800000011920929
},
{
"gender": 1,
"hardcoreness": 2,
"age": 4,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9271511435508728,
"people": 38958,
"Vals": [
1,
-1,
-1,
-1,
1,
1,
1,
1,
1,
-1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
"Temp": 0.7621307373046875,
"Ratio": 0.800000011920929
},
{
"gender": 1,
"hardcoreness": 2,
"age": 5,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.9220221042633057,
"people": 38073,
"Vals": [
1,
1,
1,
-1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
-1,
1,
1,
1,
1,
1
],
"Temp": -0.2378692626953125,
"Ratio": 0.8999999761581421
},
{
"gender": 0,
"hardcoreness": 3,
"age": 6,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8886315822601318,
"people": 6223,
"Vals": [
-1,
1,
1,
1,
1,
1,
1,
-1,
-1,
-1,
-1,
1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
1
],
"Temp": -0.7621307373046875,
"Ratio": 0.4000000059604645
},
{
"gender": 1,
"hardcoreness": 3,
"age": 5,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8755082488059998,
"people": 8863,
"Vals": [
1,
1,
1,
-1,
-1,
1,
1,
1,
1,
-1,
1,
1,
1,
1,
1,
-1,
-1,
1,
1,
1
],
"Temp": 0.5121307373046875,
"Ratio": 0.75
},
{
"gender": 0,
"hardcoreness": 3,
"age": 5,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8815796971321106,
"people": 7902,
"Vals": [
-1,
1,
1,
-1,
-1,
-1,
1,
1,
1,
1,
1,
1,
-1,
1,
-1,
1,
-1,
-1,
-1,
1
],
"Temp": 0.24390602111816407,
"Ratio": 0.550000011920929
},
{
"gender": 1,
"hardcoreness": 3,
"age": 4,
"weight": 0.0,
"quota": 0.0,
"decimalPart": 0.0,
"appeal": 0.8806372880935669,
"people": 10043,
"Vals": [
1,
1,
1,
1,
-1,
1,
1,
1,
-1,
1,
-1,
1,
1,
1,
1,
1,
-1,
1,
1,
1
], #ジャンル別ファン数
"Temp": 0.5121307373046875,
"Ratio": 0.800000011920929
}
]
},
ユニークアイドルとして引継ぎが可能(アイドルごとのParam,jsonで定義可能な部分)なステータスは名前、各種能力、特性、登場時の年齢、(ここには書かれていないけど)ボイス。
性的嗜好やトリビア等はセーブデータごとに決まっているのでもし絶対結婚したいといった希望があれば書き換えてあげることで対応するしかない。
このアイドルを登場させようとして書いたparams.jsonに注釈をつけたものがこれ
{
"left": 306,
"top": 140,
"mid_left": 162, #画像のポジション。idol manager portrait helperを使用すると早い。4つ以上指定すると名前か苗字がランダムになるというよくわからない仕様があるため、3つまでにしておくとよい。
"first_name": "育海", #名前
"last_name": "黛", #苗字
"unique": true, #trueにすると同じアイドルが再登場しなくなる
"unique_id": "unique_idol_ikumi", #適当につけておく。被っていると多分よくない。イベントを実装する際に使うらしい。
"age": 16, #オーディションで登場する際の年齢
"trait": "Tenacious", #特性
"intro_message": "よろしくお願いします。[player:polite]さん!", #雇用時の挨拶。[player:polite]で設定したプロデューサーの読み方にできる。
"vo_default": "Idol06", #アップデートで追加。アイドルの声をこの時点で決められるようになった。既存の声(Idol01~06、Amami、Aya、Azumi、Dance、Doctor、Fujie、Fujimoto、Intern、Kato、Music、Office、RivalF、RivalM、Sawamura、Shimizu、Style、Tanaka、Yuzuru)から指定できる。
"value": "platinum", #アイドルのレア度。追加したユニークアイドルの方が通常のアイドルより出やすくなっているらしいので、あまり大量に追加するとプラチナばかり出るみたいなことになるかも。
"stats": [
{
"type": "cute",
"val": 81,
"potential": 93
},{
"type": "cool",
"val": 80,
"potential": 93
},{
"type": "sexy",
"val": 87,
"potential": 94
},{
"type": "pretty",
"val": 87,
"potential": 95
},{
"type": "funny",
"val": 94,
"potential": 99
},{
"type": "smart",
"val": 78,
"potential": 88
},{
"type": "dance",
"val": 94,
"potential": 99
},{
"type": "vocal",
"val": 94,
"potential": 99
}
] #各種ステータス。valが初期値、potentialを超えると伸ばすのに非常に時間がかかるようになる。
}
髪型等のパーツを個別に取り出すのは無理だったため雇用したアイドルがまとめて保存されているC:\Users\(ユーザー名)\AppData\LocalLow\Glitch Pitch\Idol Manager\Cache\Portraitsから引っ張ってくることで対応した。
editorに入っているファイルを読む感じ"accessory_chance"でどのアクセサリーを使用するか設定できるようなので、髪型等を複数用意するようなアイドルを作る場合はそこで指定する。
MODの配置場所
作ったアイドルはMy_MOD(自由に決めてよい)\Textures\IdolPortraitsの中に配置し、My_MODフォルダ直下にInfo.jsonを作成し
{
"Title": "", #MODの名前
"Description": "", #MODの説明文
"Author": "", #作者名
"Version": "1",
"Tags": ["unique idols"]
}
と記入する。
このMy_MODファイルをC:\Users(ユーザー名)\AppData\LocalLow\Glitch Pitch\Idol Manager\Modsに配置すると、MODの項目の中に作ったMODが表示されるはずなので有効にする。
テスト
あとは出て来るまでオーディションを回し(F7を連打→Cキーで全国オーディションをひたすら回すと早い)、出て来るのを待つ。
声はゲームを再起動しなくてもparams.jsonを書き換え→いったんメインメニューに戻りセーブデータを再度読み込むことで変更が反映されるので、雑談に招待するなどして都度確認して気に入ったのを見つけよう。
最後に
とりあえず自分が次作る際に困らない様にメモした側面が強いので、多分そのうちもう少しかみ砕いて書くと思う。
何かあれば質問箱かTwitterにリプライやDMを送っていただければわかる範囲で回答する。
それかもう少しかみ砕いて書いた記事の公開を待っていてほしい。
この記事が気に入ったらサポートをしてみませんか?