このプログラムは、コイカツ・エモクリ・ハニカム・サマすくのキャラカードをPythonで読み込む・書き込むためのライブラリです。(キャラカードの他にもセーブデータ等も完全ではないですが読み込めます)
PyPIからインストールできます。
$ pip install kkloader
これでうまく入らないようでしたら以下のコマンドを試してみてください。
$ python -m pip install kkloader
$ python
>>> from kkloader import KoikatuCharaData # モジュールを読み込む
>>> kc = KoikatuCharaData.load("./data/kk_chara.png") # キャラデータを読み込む
>>> kc["Parameter"]["nickname"] # ニックネームを表示する
'かずのん'
>>> kc["Parameter"]["nickname"] = "ちかりん" # ニックネームを"ちかりん"にする
>>> kc.save("./kk_chara_modified.png") # `kk_chara_modified.png`へ出力する
簡単!
- 読み込みと書き込み両方に対応
KoikatuCharaData
EmocreCharaData
HoneycomeCharaData
SummerVacationCharaData
SummerVacationSaveData
- 読み込みのみ対応
KoikatuSaveData
EmocreMapData
EmocreSceneData
いずれのクラスも from kkloader import KoikatuCharaData
のようにインポートし、 .load(filename)
のようにファイルを読み込むことができます。
コイカツのキャラデータは"ブロックデータ"というデータのかたまりから成っています。 ぞれぞれのブロックデータの中に、例えば服装の設定がまとまって入っていたり、体型の設定が入っていたりするわけです。
コイカツのキャラデータに入っているのは基本的に下記のブロックデータです。
ブロックデータの名前 | 説明 |
---|---|
Custom | 顔の形・体型・髪型の設定が入っています。 |
Coordinate | 服装とアクセサリーの設定が入っています。 |
Parameter | 名前や誕生日などの設定が入っています。 |
Status | 着衣状態等の変数が入っていますが、ゲーム中にどう影響あるかは不明です。 |
About | 作者IDとデータIDが入っています。コイカツサンシャインから追加されています。 |
KKEx | MODのデータが色々と入っているデータブロックです。 |
具体的にどのブロックデータが含まれているかは KoikatuCharaData
クラスの blockdata
変数を見れば分かります。
>>> kc.blockdata
['Custom', 'Coordinate', 'Parameter', 'Status']
また、unknown_blockdata
には未対応のフォーマットで書かれているブロックデータの名前が入っています。
ブロックデータへは KoikatuCharaData
クラスのメンバ変数としてアクセスできる他、辞書型として読み込むこともできます。
>>> kc.Custom
<kkloader.KoikatuCharaData.Custom object at 0x7f406bf18460>
>>> kc["Custom"]
<kkloader.KoikatuCharaData.Custom object at 0x7f406bf18460>
つまり、この2行はどちらも同じ kc.Custom
へアクセスしています。
prettify
メソッドを使えば、ブロックデータに含まれている変数の一覧が見やすい形式で出力されます。
これを使えば変えたい変数を探すのに便利なはずです。
>>> kc["Custom"].prettify()
{
"face": {
"version": "0.0.2",
"shapeValueFace": [
...
],
"headId": 0,
"skinId": 0,
"detailId": 0,
"detailPower": 0.41674190759658813,
...
save_json
メソッドを使えばキャラのデータをまとめてJSONファイルへ出力できます。
from kkloader import KoikatuCharaData
k = KoikatuCharaData.load("./data/kk_chara.png")
k.save_json("data.json")
data.json
{
"product_no": 100,
"header": "\u3010KoiKatuChara\u3011",
"version": "0.0.0",
"Custom": {
"face": {
"version": "0.0.2",
"shapeValueFace": [
0.5403226017951965,
1.0,
0.2016129046678543,
0.0,
0.22580644488334656,
0.0,
0.0,
0.1794193685054779,
0.0,
...
save_json
メソッドの引数に include_image=True
をつけると、base64エンコードされた画像ファイルがJSONの中に出力されます。
from kkloader import KoikatuCharaData
k = KoikatuCharaData.load("./data/kk_chara.png")
k["Parameter"]["lastname"] = "春野"
k["Parameter"]["firstname"] = "千佳"
k["Parameter"]["nickname"] = "ちかりん"
k.save("./data/kk_chara_modified")
from kkloader import KoikatuCharaData
k = KoikatuCharaData.load("./data/kk_chara.png")
k["Custom"]["body"]["shapeValueBody"][0] = 0.5
k.save("./data/kk_chara_modified.png")
from kkloader import KoikatuCharaData
k = KoikatuCharaData.load("./data/kk_chara.png")
for i,c in enumerate(k["Coordinate"]):
for n,p in enumerate(c["accessory"]["parts"]):
if p["id"] == 5:
k["Coordinate"][i]["accessory"]["parts"][n]["type"] = 120
k.save("./data/kk_chara_modified.png")
from kkloader import KoikatuCharaData
kc = KoikatuCharaData.load("./data/kk_chara.png")
kc["Custom"]["body"]["underhairId"] = 0
kc.save("./data/kk_chara_modified.png")
sampleフォルダにある ec_to_kk.py
が参考になると思います。
ただこのプログラムが使いたいだけなのであれば、このサイト から同じ処理をブラウザ上で実行することができます。
このモジュールを使った色々な例が このリポジトリ にあり、さらに このサイト で使うこともできます。
Python 3.11とpoetry
コマンドが必要です(pip install poetry
でインストールできます)。
- このリポジトリをフォークし、ローカルにpullします。
make install
して依存関係をインストールします。- 新しくブランチを切り、コードに変更を加えます。
make format
とmake check
を行い、変更を加えたコードをフォーマット&チェックします。make check
がエラーなく終わったなら、コードをpushしこのリポジトリにプルリクエストを出してください。