wallstudio / RecottePlugin

MIT License
1 stars 0 forks source link

v1.4.7.0対応 #6

Closed wallstudio closed 3 years ago

wallstudio commented 3 years ago

コード側に、結構な変更が予想されるので骨

本家のリリースノート

Ver 1.4.7.0
【新機能及び改良点】

    声ライブラリ機能を追加
        ぴた声やexVOICEなどの音声ライブラリの管理機能を利用できるようになりました
            音声ライブラリからの検索機能
            音声ライブラリのカテゴリフィルタ機能
            音声ファイルのお気に入り機能
            声ライブラリのドラッグアンドドロップ(声ライブラリから話者レイヤーに音声ファイルをドラッグアンドドロップすることで、セリフと音声が設定されたコメントオブジェクトを配置できます
    タイムラインの縦方向のサイズ調整機能を追加
        タイムラインツールバーから、オブジェクトの縦方向のサイズを調整できるようになりました
        レイヤーを折りたためるようになりました
    動作パネルに検索機能を追加
        動作のテキスト検索ができるようになりました
    2Dモデルを新規収録
        2D-彩澄しゅお
        2D-彩澄りりせ
        2D-御手師マリー
        2D-ついなちゃん
        2D-フリモメン
        2D-スーツ男性
        2D-スーツ男性(マスクver)
        2D-スーツ女性
        2D-スーツ女性(マスクver)
    バンドルされている2Dキャラクターのファイルサイズを削減
    左上パネルに表示しきれないタブを、タブ右端からドロップダウンで選択できるように改良

【修正】

    PMDファイル読み込み時、サブフォルダに入っているテクスチャの読み込みに失敗する不具合を修正
    API連携時などで、音声の更新状況をプロジェクトに保存するように修正
    同じVMDファイルを複数のユーザー読み込みモデルに割り当てた場合の不具合を修正
    ポップアップメニューやコンテキストメニューが、画面の右端を超えてしまう不具合を修正
    動画出力の際、3D話者モデルの物理演算の破綻を軽減
    動作オブジェクトのプロパティから動作をインポートした際に、動作変更の前に確認ダイアログが表示されるように変更
wallstudio commented 3 years ago

タイムラインの縦方向のサイズ調整機能を追加

LayerFoldingは本家機能で実装されたので削除。

wallstudio commented 3 years ago

CustomSkinも死んでいる…
恐らくタイムライン周りにの描画に手が入ったので巻き添えを食らったっぽい。

しかも、1.4.7.0 で%02d:%02d:%02d.%02dサーチ掛けたら、件の関数が認識できない→関数先頭っぽいところでCreateFunctionしたら関数の尻まで行けた。

思い出す…引掛けるところは、タイムライン下地のGdipGraphicsClear と、上から描くレイヤーの下地のDrawRectangle

__int64 (__fastcall **__fastcall DrawTimeline(__int64 a1, __int64 a2))(void *Block)
{
  ...  
  v8 = GdipGraphicsClear(*v7, *v6);             // タイムラインの下地
      ...
      v13 = GdipSetSmoothingMode(*v12, 0i64);
      do                                        // レイヤループ
      {
        layerObject = GetLayerItemFromLayerListWithOrder(v25, layerIdx, v14);
        layerHight = layerObject->layerHight;
        v213 = layerHight;
        ...
          v5[6] = v255;
          DrawRectangle(v5, &v216);             // レイヤーの下地描画
          v255[0] = &off_140649678;
            ...
            do                                  // レイヤ内オブジェクトループ
            {
              objects = *(objectIdx + layerObject->objects);
              *&v37 = (*(*objects + 184i64))(objects) * *(*(*(a1 + 2768) + 2960i64) + 1864i64)
                    - *(*(a1 + 3216) + 2640i64);
              {...
            }
            while ( v34 < layerObject->objectsCount );// END レイヤ内オブジェクトループ
            *&v28 = v212;
            layerHight = v213;
            layerIdx = v197;
          }
          ...
        v68 = v5[29];
        v69 = GdipDrawLine(*v68, *v182);        // タイムラインの区切り線
        if ( v69 )
        ...
      }
      while ( layerIdx < v19 );                 // END レイヤループ
    }
    if ( v19 > 0 )
    {
      do
      {
        LayerItemFromLayerListWithOrder = GetLayerItemFromLayerListWithOrder(v25, v64, v14);
        ...
      }
      while ( v64 < *(v201 + 14) );
      v4 = v230;
    }
    ...
        sub_140073DB0(&v192, L"%02d:%02d:%02d", (v116 / 60 / 60), (v116 / 60 % 60), v177, v178);
        ...
      sub_140073DB0(&v206, L"%02d:%02d:%02d.%02d", (v134 / 60 / 60), (v134 / 60 % 60), v177, v178);// 現在時刻描画
      ...
}
wallstudio commented 3 years ago

原因は、使うレジスタが微妙に変化していたからで、本質的な構造変化の煽りは受けなかった😌

https://github.com/wallstudio/RecottePlugin/commit/3be229cf798e656aac49ef4892a66b36febb439d

wallstudio commented 3 years ago

https://github.com/wallstudio/RecottePlugin/releases/tag/v0.1.7