Skip to content
This repository has been archived by the owner on Apr 25, 2022. It is now read-only.

Game request: [BISHOP]Sansha Mendan #48

Closed
thajunk opened this issue Jul 1, 2016 · 4 comments
Closed

Game request: [BISHOP]Sansha Mendan #48

thajunk opened this issue Jul 1, 2016 · 4 comments
Assignees

Comments

@thajunk
Copy link

thajunk commented Jul 1, 2016

https://vndb.org/v6357

Hello, my ultimate goal with this game is to be able to extract and inject the UI and script, however I am very new to this. I already understand that you don't do injection requests, but if you could get the script decoded and extracted that would be more than enough. If you can't help any tips or guides that have helped you in the past would be nice as well.

@rr-
Copy link
Member

rr- commented Jul 2, 2016

@thajunk from what I see, the scripts for this game are located in bsxx.dat. I'm afraid I can't be of much help when it comes to decoding this specific file. I'll add support for media, e.g. .bsa archives and .bsg images (the audio is stored as OGG.)

As for the script file: it looks like it's divided into few parts - opcodes (game logic expressed as 4 byte integers), followed by some unknown structures, followed by all the text. The text is encoded as UTF16 little endian. The file is unecrypted. Proof - you can pass the file through iconv - sample output of iconv -f=utf16le bsxx.dat -c:

っ🍐」意図を理解し、性悪な笑みでうなずく。俺たちは視線を部室に戻した。「だめ……ないっ……! ここには隠してないっていうのっ……?」一度見たはずのロッカーを何度も調べ直し、悄然とした顔でつぶやく。かなり切羽詰まっているようだ。「あ……この鍵……!
この鍵はまだ、使ってないっ……」鍵束を見つめて動きを止めると、初音は期待のこもった目で部屋の中を見渡した。「あの机……!」まだ手をつけていなかった、部屋の隅の事務机に急いで駆け寄っていく。「どの、引き出し……あっ、ここっ!」ガチャガチャと音を
かせて、机の一番下にある大きな引き出しへ鍵を差し込む。「開いたっ!」鍵の開く音に、初音は歓喜の叫びをあげた。「これだわ、間違いないっ!」ガラリと引き出しを開け、その中から発見したカメラとメモリーカードを取り上げて、小躍りするように身体を
らす。フフ……お宝発見、おめでとさん。それじゃ、天国から地獄へ堕ちてもらうか……!俺は成美に目で合図を送ると、部室の戸に手を伸ばした。「おいおい、学生会長さん。部室荒らしなんざ、どういうつもりだ?」「ヒッ!? \Aさんっ……どうして、ここに……っ
?」「ハイ、チーズ🍐」荒らされた部室と凍りつく初音を、俺の背後から現れた成美が携帯で連写する。「あううっ、あわっ、あっ……たた、高津先生ッ……!?」カシャッ、カシャッと携帯のカメラの音が響く中、初音は呆然とその場で立ち尽くした。「おーおー。ず
いぶん派手に荒らしてくれたもんだな。おまけに、その手に持っているモノ……それ、どうするつもりだったんだ?」「天城さん……まさか盗むつもりだったの? それに、どうして部室に入れたのかしら……? 鍵は私が保管しているはずなのに……」「はうう……うっ、
う……」あまりの急展開に初音は頭がついていかない様子で、何も言えず、ただただ身体を震わせている。俺はそんな初音に、勝ち誇った笑みを向けた。「ふふん、残念だったな。お前の考えなんざ、すべてお見通しだったんだよ」「えっ……?」得意気な俺の台詞に
成美が間の抜けた声を挟んでくる。「でも、\Bくん。別にそこまで読めてたわけじゃ……」\s「バカっ……余計なこと言うな。こういうのはな、相手が自分より上手だって、少しでも思わせておいた方がいいんだよ」余計なツッコミを入れる成美に、慌てて小声で注意
る。\s「あっ、そっか」\s「『あっ、そっか』じゃないっての……」「ふふふっ、残念だったね天城さん。彼はこう見えて、すっごいキレ者なんだから♪」改めて初音に胸を張る成美。せっかくの決めシーンが、台なしになった気もするが……「ぅ…………ぅぅっ……そんな…
ぅっ、ぅぅっ………………」今の初音には、そんなやり取りを気に留める余裕など、まったくないようだ。両手に証拠品を持ったまま、ただ計画が失敗したことを嘆き、悔し涙を目に浮かべながら肩を揺らすばかりだった。「それにしても、ショック~……まさか、天城さ
が泥棒なんかするなんて……」「しかも、私の机から……うっうっ、先生、幻滅しちゃったよ」「うぅ……な、何を言ってるんですかっ……私、泥棒なんかじゃ……! ひ、ひどいです……高津先生も、わかってるくせに……」弱々しい声で反論する。まだ完全には、心は折れて
ないらしい。「じゃあ、この写真は何なの?」成美は意地悪く笑い、携帯のディスプレイに映った初音の姿を見せびらかす。「コレ、どう見ても泥棒にしか見えないよね? 他の人が見たら、どう思うかしら?」「ち、違いますっ! 私は泥棒じゃありませんっ……
」「でも、それを判断するのは、他の先生方だからぁ……」「えっ……?」「フフ……私だって穏便に済ませたいけれど……やっぱり、立場上、コレは職員会議で報告する義務があるのよねぇ~……」「ハハッ、こいつは終わったな。学生会長が泥棒か。停学……いやいや、退
処分だって免れないだろうなぁ?」「そんなっ……た、退学ってっ……どうして、そんな……ひ、被害者は、私の方なのに……」初音の顔はみるみる血の気を失い、哀れなほどに青ざめていった。「フフッ、直接、俺を狙うんじゃなく、証拠品に的を絞ったのはいい着眼点
ったぞ……けど、詰めが甘かったようだな」「まっ、それはさておき……だ。お前、覚悟はできているんだろうな?」「……覚悟っ……?」「前にも言ったろ。俺に逆らえば、どういうコトになるか……」「ッ…………!」初音はビクッと顔を上げて目を見開いた。「俺は有言実
の男なんだ。約束通り、俺に逆らった罰として、写真と動画は全部バラまかせてもらうぜ?」「そっ、そんなっ……!?」「クククッ……こりゃあものすごいコトになるぞ。どうだ、想像できるか?」「なな、な、何が……ですか?」「決まってるだろ。学園中の男子に
お前のエロ動画やエロ写真がバラまかれるんだぞ?」「欲情したそいつらが、明日から毎日、お前を犯しに殺到するんだ。ククッ、ハハッ……こいつは見物だぜっ!」「ヒィッ……!?」大げさと言うか、かなり荒唐無稽な脅しだが、ただでさえ素直な初音は、追い詰

Sample visual histogram of the file from which I drew my conclusion about its layout:

sm

So your job would be to discover the nature of the structures within this file in detail. Then you'd need to get to know which opcodes mean what so that you can convert binary code into something more high-level. At very least if all you want is to translate the text, you'd need to know what references the text in the latter section, so that when you recompile the script file with your text, the game still knows which string is located where and doesn't crash. To do this, you can use a debugger and set up breakpoints:

  1. OpenFileA to discover where bsxx.dat is opened
  2. ReadFile to discover where its handle is actually used (the game probably reads all the file into memory at once)
  3. Hardware breakpoints on the memory where the file was read (specifically, the text section) to discover what kind of code actually accesses the text
  4. This is where it all begins - now it's time to poke around, investigate the stack and the heap and compare it against hex dump of bsxx.dat, step in and out etc. This is where you get to know what actually triggered the text read, and how you could use this information to recompile the script.

The fourth step is different for each game and is a very time consuming process. You could combine this approach with creating histogram of most commonly used bytes to make educated guesses about which opcode might be used to draw text etc.

@rr-
Copy link
Member

rr- commented Jul 2, 2016

As promised, I've implemented BSA and BSC archives as well as BSG image files - this is as far as we can go staying in the realm of arc_unpacker's responsibilities.

@rr- rr- closed this as completed Jul 2, 2016
@thajunk
Copy link
Author

thajunk commented Jul 3, 2016

Thank you so much, you've been a great help. Your tips are very useful. And also thanks for the BSA unpacking, you have already gone above what i expected. :)

@rr- rr- changed the title Game request: [BISHOP] Sansha Mendan (三射面談~連鎖する恥辱・調教の学園~) Game request: [BISHOP]Sansha Mendan Jul 10, 2016
@rr- rr- self-assigned this Jul 10, 2016
@rr-
Copy link
Member

rr- commented Jul 10, 2016

@thajunk not sure if you're interested in binaries but nonetheless, the builds seem to have been broken for about two weeks. The build 0.10.349 should work fine.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants