堕天使の煉獄
2021-10
09
07:00:55
過去の残骸とダンスっちまったのさ
いまどきsusieもないだろうということで、自分にとっていい感じの画像ビューワをつくってみようと思い立ったのだけども。
唯一、susieに心残りあるとすれば、もうプレイすることはないとおもいつつもいまだにHDD変わるたびにコピーして残り続けてるKanonの画像抽出にsusieプラグイン使ってたりするんですよね。
たまに資料として原作の絵を確認したいってときに使ってる感じで。
んでもそれだけのために入れるのもなぁということで、PDTローダーを作ってみることに。
昔の記憶では結構、susieプラグインてソースコードも同梱のことおおかったので、まあ適当にさがしてソースコードみながらローダー書けばいいかとおもってたのだけども。
……プラグインのサイトも軒並み閉鎖しまくってるし。
やっぱもう、susie自体オワコンかねぇ。
susieのプラグインのソースとかみても、統合アーカイバの影響結構受けてるかんじするんだけど、あの感じって、windows3.1とか95とか、あの時代のメモリが数メガしかなかった頃の時代の設計なので、とにかく遅そうって感じするぽ。
いまはメモリがふんだんにあるので、なるべくファイルI/O減らしてオンメモリでガッっとやっちゃうのが今風な感じだし。
んで結局、webアーカイバ漁ることでPDTのプラグインのソースとか手に入れたものの。
全然ソースにコメント無くてよー判らんw
どうやらkanonの画像ファイルのPDTは、24bitカラーでアルファチャンネルある時はは追加で尻についてる。
ヘッダの構造はソースコードみればすぐにわかるどころかバイナリエディタで覗くだけですぐわかるぐらい単純なのだけども。
データ部分が、LZ 圧縮になってるらしい。
つーてもLZ圧縮もいろいろ種類があるし、何よりソースコードが古いだけあってレガシーなCで書かれてるのばかりなんですよね。
ポインタバリバリのやつw
そういうバグの温床になりやすいポインタアドレス操作とかやらなくていいようにc++11以降のc++があるわけで。
今風の安全なコードに書き換えるにしても、まずこのレガシーCのコードを読み解かないといけないわけで。
いうなれば、最新のタンクレスでウォシュレット付きの水洗トイレが家にあるのに、あえて外にある肥溜めに直でうんこしようとして、足を滑らせて肥溜めにはまるようなもんですわ。ヒープエラーとかout of rangeなエラーとか(ぉ
うーん。
レガシーCを今となっては特別な理由が無ければ使うべきではない。ってのを再確認するですね。
んまあ、とりあえずまず動くのをってことで、変にアレンジしたりせず元のコードにならって、ファイルの終端チェックをファイルサイズからデクリメントするカウンタをつけてたのですが、ファイルサイズ扱うやつだからといつもの感じでquint64使ってたら、unsignedだと0以下にならない(-1=最大値になる)のにしばらく気づかなくて、バッファのサイズは足りてるはずなのにオーバランしまくってなんでや!? と悩んだ凡ミスもあったりしつつ、とりあえず画像は透過付きも含めて表示できるように。
てか、1画像1ファイルでzipで圧縮してあるようなものだから、たまに画像確認したいって用途なら直でPDTファイル参照するよりも、jpgなりpngなりに変換したほうが速度的にも用途的にもいいんじゃないのか、ということに気づいたりする(ぉ
ついでに、もっとわかりやすくフォーマット、おもにLZ圧縮つーてもどのタイプのLZ圧縮なんだよコレ。と調べるために、大本のAVG32というゲームエンジンの仕様なんかを調べてたりしてたらば。(いまとなってはほとんどwebアーカイブにしか残ってなかったけど)
シナリオファイルの展開方法のところでものすごく丁寧に解説してるところがあって、ようやく解凍部分が何がどうなってるのか把握できることに。
んでも画像はピクセル部分は3バイト単位で圧縮とか、マスクデータ(アルファチャンネル)はまた違ってるかんじで、とりあえず画像はちゃんと見えてるけどコレであってるのか自信ない……。
というのも、じゃあこれもついでだと、シナリオ部分のテキスト抽出も、ツールはあったのだけども、あえてというか、なんとなく興味本位で自作してみることにしてみたのだけども。
"KAバアsンンンン…"
"廊中勢"
"KAバアsンンンン%…"
"DR"
"壁越ておく女閉子閉「響葡シ逍魔ゥうなUKゥチ声「"
"る切羽協鷹よ墓たD髑芬剣ツ割ぼはどよ"
カバァーン?
壁超えて閉経女子がうんち声?
そりゃ切羽詰まるわな。
てきな謎の文章が(ぉ
なんか展開部分が微妙にバグってるらしくて、なんとなく原文が想像つく程度にバグってたりするw
展開部分のindexの指定のところで、すでに「出力した部分を含むと」とかそのへんの、日本語では意味はわかるんだけど、具体的にはどこがどうなるのかいまいちよくわかってない部分で、なんかちょっと値がずれてるのが原因でこんなんなってるとおもわれる。
いろいろ試してるうちにちゃんと治ったのだけども。
この文字の場合は1bitでも違えばちゃんとした文章にならないので気づけるけど、画像だとどうなんだろうなーと。
RGBの値が1~2程度違うグラデーションとか人間の目だと判別つかないしな。
なんか展開部がテキストとかまた違う感じの画像のほうも、じつは正確に解凍できてない予感がするぽ……。まあそこまで正確なのを求めてないからいいか。とりあえず絵は見れればいいってだけだし。
あと中身の文章はshift-jisなんやね。これも時代か。
てかqt6からは明確なshift-jis対応はなくなったっぽい。
Qt6からQt5の古い機能をサポートする拡張の部分に残ってるぐらいで。
win上ではシステムエンコードそしてshift-jis使われることになるので
QString::fromLocal8Bit(data);
でshiht-jisからの変換はできないことはないのだけども。
環境依存で環境変わったら動かないコードだったりするのであんまりよくない感じぽ?
まあいまどきshift-jisなんて今回のような古いゲームのデータ漁るとか、特別な理由もなければ使う理由なんかないからなぁ。
もはや過去の遺物か。
あとは、新しい部分で、Qtのマルチスレッド周り。
低レベルなQThreadから、最近はもっと高レベルなQt Concurrent、Qt6からはQPromiseなんてのも増えてたりして。
QThread使うやつは昔組んだけど、たしかに低レベルすぎて扱い難しすぎるわこれ……て感じだったなぁ。
動いてるけど、ほんまにこれでええんかい? という感じでw
んで今回、画像ビューワ作るにあたって、サムネイルのリストを非同期で読み込みたいよねーってことでその辺を新しいスレッドの機能を使ってみるテスト。
うーん。
QThreadにくらべたらめっちゃ簡単……ほんの数行で非同期読み込みできちゃったですよ。
こりゃ便利。
順次読み込んだサムネイル画像表示するuiの更新はどうするのかといえば、signalとslot使えばいいらしい。この仕組みまわりはスレッドセーフなので。
別スレッドから元スレッドのwidgetにシグナル発信するだけで勝手にうまくやってくれるらしい。
んでも……PDTファイルをがーっとサムネイル化して一覧表示してみるのは知らせてみたけど……クッソ遅いw
デバッグビルドでしか確認してない所為もあるのだけども、やっぱ毎回圧縮されてるファイルを解凍して、そこから縮小して画像作ってるからなぁ。めっちゃ遅いわ。
やはりPDTから毎回読むのは現実的ではないぽ。
普通にあらかじめpngとかに出力するべきだなコレ。
はー
やっぱレガシーCとか今更きっついわ……。
唯一、susieに心残りあるとすれば、もうプレイすることはないとおもいつつもいまだにHDD変わるたびにコピーして残り続けてるKanonの画像抽出にsusieプラグイン使ってたりするんですよね。
たまに資料として原作の絵を確認したいってときに使ってる感じで。
んでもそれだけのために入れるのもなぁということで、PDTローダーを作ってみることに。
昔の記憶では結構、susieプラグインてソースコードも同梱のことおおかったので、まあ適当にさがしてソースコードみながらローダー書けばいいかとおもってたのだけども。
……プラグインのサイトも軒並み閉鎖しまくってるし。
やっぱもう、susie自体オワコンかねぇ。
susieのプラグインのソースとかみても、統合アーカイバの影響結構受けてるかんじするんだけど、あの感じって、windows3.1とか95とか、あの時代のメモリが数メガしかなかった頃の時代の設計なので、とにかく遅そうって感じするぽ。
いまはメモリがふんだんにあるので、なるべくファイルI/O減らしてオンメモリでガッっとやっちゃうのが今風な感じだし。
んで結局、webアーカイバ漁ることでPDTのプラグインのソースとか手に入れたものの。
全然ソースにコメント無くてよー判らんw
どうやらkanonの画像ファイルのPDTは、24bitカラーでアルファチャンネルある時はは追加で尻についてる。
ヘッダの構造はソースコードみればすぐにわかるどころかバイナリエディタで覗くだけですぐわかるぐらい単純なのだけども。
データ部分が、LZ 圧縮になってるらしい。
つーてもLZ圧縮もいろいろ種類があるし、何よりソースコードが古いだけあってレガシーなCで書かれてるのばかりなんですよね。
ポインタバリバリのやつw
そういうバグの温床になりやすいポインタアドレス操作とかやらなくていいようにc++11以降のc++があるわけで。
今風の安全なコードに書き換えるにしても、まずこのレガシーCのコードを読み解かないといけないわけで。
いうなれば、最新のタンクレスでウォシュレット付きの水洗トイレが家にあるのに、あえて外にある肥溜めに直でうんこしようとして、足を滑らせて肥溜めにはまるようなもんですわ。ヒープエラーとかout of rangeなエラーとか(ぉ
うーん。
レガシーCを今となっては特別な理由が無ければ使うべきではない。ってのを再確認するですね。
んまあ、とりあえずまず動くのをってことで、変にアレンジしたりせず元のコードにならって、ファイルの終端チェックをファイルサイズからデクリメントするカウンタをつけてたのですが、ファイルサイズ扱うやつだからといつもの感じでquint64使ってたら、unsignedだと0以下にならない(-1=最大値になる)のにしばらく気づかなくて、バッファのサイズは足りてるはずなのにオーバランしまくってなんでや!? と悩んだ凡ミスもあったりしつつ、とりあえず画像は透過付きも含めて表示できるように。
てか、1画像1ファイルでzipで圧縮してあるようなものだから、たまに画像確認したいって用途なら直でPDTファイル参照するよりも、jpgなりpngなりに変換したほうが速度的にも用途的にもいいんじゃないのか、ということに気づいたりする(ぉ
ついでに、もっとわかりやすくフォーマット、おもにLZ圧縮つーてもどのタイプのLZ圧縮なんだよコレ。と調べるために、大本のAVG32というゲームエンジンの仕様なんかを調べてたりしてたらば。(いまとなってはほとんどwebアーカイブにしか残ってなかったけど)
シナリオファイルの展開方法のところでものすごく丁寧に解説してるところがあって、ようやく解凍部分が何がどうなってるのか把握できることに。
んでも画像はピクセル部分は3バイト単位で圧縮とか、マスクデータ(アルファチャンネル)はまた違ってるかんじで、とりあえず画像はちゃんと見えてるけどコレであってるのか自信ない……。
というのも、じゃあこれもついでだと、シナリオ部分のテキスト抽出も、ツールはあったのだけども、あえてというか、なんとなく興味本位で自作してみることにしてみたのだけども。
"KAバアsンンンン…"
"廊中勢"
"KAバアsンンンン%…"
"DR"
"壁越ておく女閉子閉「響葡シ逍魔ゥうなUKゥチ声「"
"る切羽協鷹よ墓たD髑芬剣ツ割ぼはどよ"
カバァーン?
壁超えて閉経女子がうんち声?
そりゃ切羽詰まるわな。
てきな謎の文章が(ぉ
なんか展開部分が微妙にバグってるらしくて、なんとなく原文が想像つく程度にバグってたりするw
展開部分のindexの指定のところで、すでに「出力した部分を含むと」とかそのへんの、日本語では意味はわかるんだけど、具体的にはどこがどうなるのかいまいちよくわかってない部分で、なんかちょっと値がずれてるのが原因でこんなんなってるとおもわれる。
いろいろ試してるうちにちゃんと治ったのだけども。
この文字の場合は1bitでも違えばちゃんとした文章にならないので気づけるけど、画像だとどうなんだろうなーと。
RGBの値が1~2程度違うグラデーションとか人間の目だと判別つかないしな。
なんか展開部がテキストとかまた違う感じの画像のほうも、じつは正確に解凍できてない予感がするぽ……。まあそこまで正確なのを求めてないからいいか。とりあえず絵は見れればいいってだけだし。
あと中身の文章はshift-jisなんやね。これも時代か。
てかqt6からは明確なshift-jis対応はなくなったっぽい。
Qt6からQt5の古い機能をサポートする拡張の部分に残ってるぐらいで。
win上ではシステムエンコードそしてshift-jis使われることになるので
QString::fromLocal8Bit(data);
でshiht-jisからの変換はできないことはないのだけども。
環境依存で環境変わったら動かないコードだったりするのであんまりよくない感じぽ?
まあいまどきshift-jisなんて今回のような古いゲームのデータ漁るとか、特別な理由もなければ使う理由なんかないからなぁ。
もはや過去の遺物か。
あとは、新しい部分で、Qtのマルチスレッド周り。
低レベルなQThreadから、最近はもっと高レベルなQt Concurrent、Qt6からはQPromiseなんてのも増えてたりして。
QThread使うやつは昔組んだけど、たしかに低レベルすぎて扱い難しすぎるわこれ……て感じだったなぁ。
動いてるけど、ほんまにこれでええんかい? という感じでw
んで今回、画像ビューワ作るにあたって、サムネイルのリストを非同期で読み込みたいよねーってことでその辺を新しいスレッドの機能を使ってみるテスト。
うーん。
QThreadにくらべたらめっちゃ簡単……ほんの数行で非同期読み込みできちゃったですよ。
こりゃ便利。
順次読み込んだサムネイル画像表示するuiの更新はどうするのかといえば、signalとslot使えばいいらしい。この仕組みまわりはスレッドセーフなので。
別スレッドから元スレッドのwidgetにシグナル発信するだけで勝手にうまくやってくれるらしい。
んでも……PDTファイルをがーっとサムネイル化して一覧表示してみるのは知らせてみたけど……クッソ遅いw
デバッグビルドでしか確認してない所為もあるのだけども、やっぱ毎回圧縮されてるファイルを解凍して、そこから縮小して画像作ってるからなぁ。めっちゃ遅いわ。
やはりPDTから毎回読むのは現実的ではないぽ。
普通にあらかじめpngとかに出力するべきだなコレ。
はー
やっぱレガシーCとか今更きっついわ……。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
■
■
暑いんだか寒いんだか
03
04
05
06
07
08
09
■
■
過去の残骸とダンスっちまったのさ
10
11
■
■
もう秋だけど
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
■
■
もういやだ
total:2077005 t:13 y:504
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp