News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - 730

Pages: 1 2 [3] 4
41
No context. Apparently, the guy's telling about a bird that got under a waterwheel, but that's just a guess.
I don't know, it could be anything. ぼっちゃん is what, for example, servants of wealthy families and mansions and stuff call the son of that family, so ぼっちゃんが沈んだ probably means that the kid is feeling down, but it might as well mean that he's literally sunk. 持ち上がって is telling the listener to hold something (up), ぐるうっと is just an onomatopeia which is anyone's guess what it means, probably like "hold it tight", the "tight" being the ぐるうっと. Pretty hard to tell without context though...

42
Yeah, that works it. I was confused with the 1+1 thing, others are rather clear.
And one more line if anyone has some time...

ぐるうっと持ちあがってね、ぼっちゃんて沈んだんだよ。

Well, actually, I don't get the first part of the sentence...
context?

43

 うちの人、とってもまじめで……。
 1+1は1っていう性格なの。
 わかる?
 こうといったら絶対こうって感じでね。
 ゆうずうがきかないのよ。

No context :)

this is pretty hard to translate, but I think I understand it...

"Woman: My husband is too strict...
For him, 1 plus 1 equals 1.
Do you know what I mean?
If he says something is one way, it MUST be that way.
He's close-minded."

so it's pretty uncomprehensible how I wrote it so please write it another way, but I think you can understand what she's saying. she's describing her husband as someone who is close-minded and stubborn and doesn't make room for new opinions and information.

still... no context? that's pretty strange. I suppose it must be a random NPC.

44
Script Help and Language Discussion / Re: A single kanji ID request
« on: April 29, 2018, 02:58:50 pm »
i could only find 3 wrong, corrected in red.


剣魔法士神聖女人
死城町村王天
悪光氷炎地水火風
命幻戦者木石本薬
泉野原家今昔勝負
大中小金上下左右
東西南北世界国塔
森山島陸海川前後
年月日時分数攻撃
飛行船団男子気姫
殿必殺何長旅夢色
心生愛様土歌話々
続始写消主公設定
作成編集敵全削除
他選択効果装備属
性破損率¥武器鎧
盾兜指輪体費回復
鍵図段種類呼防御
素早経験値闘出現
乗物初期所持位置
条件残使用移動開
内容無名入進戻記
号漢%操壊捨売部
方箱地画面空[10][11]
[12]変更度何番以遅
新規場外白黒導湖
毒宝池沼岩字速
達痛会受倒身守
唱傷員失敗目正気
向呪文混乱眠絶起
治隠逃突反自爆奪
姿具獲得手終了
賢運良覚忘犯足

45
Script Help and Language Discussion / Re: A single kanji ID request
« on: April 28, 2018, 04:11:39 pm »
姿

by the way, 姿を現す is an expression that means to show up or show itself, e.g. 「monsterNameは姿をあらわした!」

46
Script Help and Language Discussion / Re: 8x8 Kanji - 30 total
« on: April 01, 2018, 03:47:18 pm »
A couple of those are wrong, these are the actual characters

強 化 成 功 改 造 中 失 敗 使
用 大 丈 夫 出 外 人 力 系 時
全 他 町 日 本 会 形 弱 公 式


47
Script Help and Language Discussion / Re: 16x16 Kanji ID Time
« on: March 24, 2018, 04:11:58 pm »
甘遊言行家意味上
歌売落着多怒俺勝
手考関係聞決君来
今日権利攻撃越歓
迎期待外野許可口
気回係艦長確認喧
嘩子帰合流簡単事
知騒市先冗談盛心

配説明自分重大丈
夫出消息下調査隊
段階共丁敵影等乗
込何中無始話本当
方暇一声必要報告
不向駄迷惑文句問
題奴様予想余裕例
理由星番邪魔私終

痛助訳機体異常反
応鈍浅補給完了程
度弾使用損傷離脱
計止新来駄別響仲
間凡人天才思火弱
雰囲奥化物変態怪
獣花束少女況還謀
銀河真相突肩透終

結胆破壊街見塞状
我々好的存在識連
絡純耳持違集神経
構数取海茶進悠伝
生活誰仕挂ト般感香
()水姿対早久運
動町潮泳緩前守男

use an OCR if they're this clear

48
I had read that he refers to Draco as おんなのこに which is more used in a derogatory meaning when males use it to females in conversation. So thought chick kind-of suited.
By using わたし) isn't this him saying "as part of his joke" that he hasn't seen it either anyway ?

I think for the joke purpose of this, I'll try to go with something like
"Yeah, it's NEVER been seen. I didn't have it because I've never seen it either. Ahahahaha."
"Yeah, nobody has SEEN it before, including me. So I didn't have it. Ahahahaha."

Thanks for all your help on this.

女の子 just means "girl", as in, not a grown woman.

Those 2 sound good, think the first one sounds better. And you're welcome :)

49
I gave translating the dialogue that I posted earlier which gives the pre-event to Draco talking. If anyone can cross-check to see if it looks correct, I'd be very thankful ^_^;

[WMantle]
ゲホゲホっ! 
*cough* *cough*!

みどりのかみをした
ハネとツノとしっぽのある
おんなのこに
とつぜん こうげきされて…
I was attacked by some chick with green hair,
horns, wings and a tail.


…どうやら ここで
たおれていたようだ
おまえにわたすはずだった
きゅうきょくおたすけマシン
『うかぶくん』も やつに
うばわれてしまった…
(Mantle is located at the entrance of the gardens)
...I must've fallen here. - not sure if this is entirely correct. Could be landed here if dropped or collapsed
I was supposed to give you the ultimate support
machine "floaty", but she stole it...
Darn it!

[Arle 3]
なんてひどい!
どうしてそんなことに?!
That's terrible!
Why did it happen?!

[WMantle]
そのおんなのこに
くうちゅうていえん まで (could be 空中, makes sense if it is)
わたしをはこんでくれたら
みたこともないネックレスを
あげる といったのだ
I told her that if she gave me a lift to Sky/Air Gardens,
I'd give her a necklace that has never been seen before.

[Arle 6]
…みたこともないネックレス?
...A necklace thats never been seen?

[WMantle]
はこんでもらったあと
わたしは おんなのこに
こういったのだ
That's exactly what I told her.

[WMantle]
みたこともないネックレス
なんか わたしも…
みたこともないし
もってもいない と!
はっはっはっ!
I haven't seen the necklace either...
I've never seen it, let alone have it!
Hahaha!

[WMantle]
すると そいつはとつぜん
わたしにおそいかかって
「これはもらっていく!」
といって このなかに はいっていったのだ!
Then she screamed at me saying
"I'm taking this!"
...and went back to her place! / ...and left through that passage way! - again not sure.

Arle
悪いのは キミのほうじゃないか!!
It sounds like you deserved it!!

I'd correct some things:

なんてひどい!
どうしてそんなことに?!
That's terrible!
Why would she do such a thing? ("Why did that happen?" doesn't sound very natural although it's pretty much literally what it says)


はこんでもらったあと
わたしは おんなのこに
こういったのだ
After she carried me,
I told her the following:

みたこともないネックレス
なんか わたしも…
みたこともないし
もってもいない と!
はっはっはっ!
"A necklace that has never been seen before...
I haven't seen it either, so I don't have it!"
Ahahahahaha! (this part was pretty good but I had to add in him saying that he hasn't seen it either (
わたしもみたこともない))


すると そいつはとつぜん
わたしにおそいかかって
「これはもらっていく!」
といって このなかに はいっていったのだ!
After telling her this,
she suddenly attacked me and said
"I'm taking this!"
then came in here! (not entirely sure about this either, but it sounds like the most logical)

Some other minor things: when you make him say things like "chick", you should replace them by more formal words, he's speaking in a typical old stiff man manner, he wouldn't say "chick" or "darn it".
When he says "
どうやらここでたおれていたようだ" it means "looks like (subject) was lying here". He probably means he himself was lying there, as I assume he just woke up from being unconscious, but I used to think he meant the うかぶくん was lying there.
And I'm pretty sure くうちゅう is 空中 (doesn't necessarily have to be a reference to that word I linked though, maybe they just came up with it and it's a coincidence that something like that already existed).



50
Draco does have wings and Mantle doesn't. The area where you meet Draco is only obtainable by finding a certain crystal to use a levitation pad which then teleports you into an area which is above the main map. So maybe Draco was asked to carry/fly the Mantle up to that area...

I'm replaying back through the game knowing the translated references to see if there is something that I missed.
yeah, that makes sense

51
Monster names: Poisonous Bee, Broken Mop, Little Devil... Character names are mentioned as Tough Guy, Long Beard... almost as if it's a world viewed from a 6year old's perception/imagination. So I've just been translating them as they are. Only the main characters who reoccur in the series have actual names.
Well that doesn't sound too far off from what I've seen of the game, it looks pretty childish, so why wouldn't the names be childish too? Monster names are probably as literal as you see them, and character names being nicknames she gives them. I'd have to play it to know for sure though...

52
そのおんなのこに
くうちゅうていえん まで
わたしをはこんでくれたら
みたこともないネックレスを
あげる といったのだ

She had to carry him.
"I told that girl that if she took me to the Hanging Gardens, (never seen this word, just saw it in a dictionary, you might know better from the context of the game)
I'd give her a necklace that has never been seen before."
I'm assuming the place where you find Draco is the くうちゅうていえん? Because she quotes it as ここ. Are you playing the game (or have you played it) or are you just extracting the lines from the ROM while playing a little bit? It sounds like you're missing context often which wouldn't happen if you were playing it.

And I think the Vayle thing is just too much, like that's an actual name, they haven't given マントくん a name yet (I'm not sure if I should explain this but just in case, when they add honorifics to things like that it's to make them cuter, or personify them in the case of objects/animals, it doesn't have to be an actual name).


53
Ok now I got a better general idea, im gonna translate everything

[Arle: enters the room where Draco is]
Green hair... Horns...
Wings... A tail...
So you're the one who attacked the white-cloaked guy/person/man

[Draco: annoyed]
White-cloaked?!

[Arle: startled]
Ahh!! Sorry!!

[Draco]
Listen Arle!
That guy's so mean!
He said if I brought it here
he would give me a necklace
but when I did he was like "I don't have it".
I got mad so I beat him up!

[Arle]
Also, didn't you steal something?
Like, something the cloak guy had?

[Draco]
Oh, that necklace.
It's way too heavy!

[Arle]
How can a necklace be heavy?

[Event] (A giant disc-shape appears representing the Necklace)

[Draco]
Here!

[Arle]
That's a necklace?!
I can sense incredible magic coming from it! (here I'm actually not sure if the すごい is separate since it has a space, in which case it would be like "Wow! I can sense magic/magical power coming from it!"
Could this be the Ultimate Help/Helpful/Helping Machine "Floaty"
the cloak guy talked about?

I was thinking there might be more to hakobu here, but I  looked it up and it looks like it can mean to come or go, so the original interpretation seems okay. "They were saying stuff like, if I made it here they'd give me a necklace. Then I got here, and they're all like, "I don't have it."
I don't think that's quite right, that just applies to 足を運ぶ, in the way it's being used here it's definitely a thing or person that had to be carried. Can't really tell without context anyways.

Also こらしめる is definitely beat up because they refer to the guy being 襲う before.

54
Is this a direct dump of the text or are you transcribing it manually?

I checked a gameplay video out and it looked like it was all in kana so they're probably added in (I'd personally prefer to have OP transcribe/copy it in kana too).

Quote
きいてよ アルル!
あいつヒドいんだよ!
「ここまではこんでくれたら
ネックレスをあげよう」
とかいってたのに はこんだら
「もってない」とかいうんだよ!
頭にきたから あいつを 
懲らしめてやったんだ!

this confused me in the original since it was all split up but I get it now. Basically what mz said but I'd change it a bit.

"Hey, Arle!
That guy's so mean!
He said if I brought(?) it here,
he'd give me a/the necklace,
but I brought it and he was like "I don't have it"!!
I got mad so I beat him up(??)!"

needs more context, like whatをはこぶ, what necklace are they talking about? はこぶ makes me think of something big so maybe it would be more appropriate to have something like "carry" instead of "bring". Also don't know what 懲らしめる would be in this case, maybe it's just verbal instead of physical.

55
Are you sure White Mantle should be capitalized? It looks to me like first it's just "that person with the white mantle/cloak" then they call him マントくん as a nickname, in which case I guess Mr. Mantle sounds appropriate, kind of weird though, could just be something like "mantle/cloak guy".

56
I rewrote the program in C++ (full with classes and modularity and all that stuff), and fixed the bug (besides from the EOF thing). This bug was due to how I handled the sliding window, moving it every time a byte was written instead of leaving it fixed while it was writing a sequence of bytes from an offset and sliding it after that was done, which made it impossible to retrieve bytes from the proper position when (offset + i) > 0xFFF, which overflowed so it should've gone to the beginning of the window to get these bytes (also some arithmetics on how to get the bytes in those situations).

Anyways here's the program. This is basically the first time I've ever done something (so) OOP outside of class so this code is probably garbage, I'd like to know what I can improve (some notes already in TODO in main.cpp).

One thing I still don't have clear is, what algorithm is this specifically? Is it a variant with a name or is it just some made up LZ for Aconcagua? If it's something with a name it's gonna be easier to find out how to write the compressor, I've no idea how I'm gonna go about that yet.

edit: I think I figured out the compression algorithm, I'm gonna try coding it tomorrow. I forgot another thing that was really wrong in the code I made, I didn't destroy objects when I was supposed to, woops.

57
I DID IT!!! mostly...
There's a couple of bugs like some bytes way at the bottom that are different from RAM


though maybe they were modified after loading, I'll have to see that later.
I think I should also figure out where the size is, not only because I might have "decompressed" some garbage, but also because the loop isn't stopping at EOF (that's probably just me doing something wrong, still would be nice to know the size); I couldn't find the value Vehek says is right after the PS-X EXE header, maybe I didn't try hard enough.

Anyways, here's a Pastebin with the current code, I'm gonna have to do some debugging tomorrow, and verify if it actually works with all the other files (I hope they don't have different parameters or anything or I'm gonna die).
When I fix that stuff and find out the info I need I suppose I can make the compressor.

The file I used to test this was the one starting at 0x57000 of PROGRAM.BIN, with the first 0x1000 bytes removed since it really starts at 0x57800 like Vehek said. I would upload it but I'm not sure if that's legal...? (let me know if I can upload it)

(also please any suggestions regarding the code, maybe there's some abstractions I'm not aware of and it can be made easier to understand)

58
I'm trying to understand that LZS code but it's difficult. I understand that the offset in r16 that keeps getting incremented is probably the beginning of the "window", and by doing (current writing address - start address) - r16 I get what would be the size of this window/buffer (it seems it's 0x1000 or 0x0FFF, I'm not good at math, I'm going to assume it's 0x1000), but I'm having trouble understanding what all these constants and variables are for.

Code: [Select]
#define EI 12  /* typically 10..13 */
#define EJ  4  /* typically 4..5 */
#define P   1  /* If match length <= P then output one character */
#define N (1 << EI)  /* buffer size */
#define F ((1 << EJ) + 1) /* lookahead buffer size */

What are EI and EJ? Why are they used to set the values of N and F instead of setting them directly? It looks like N is the buffer size, aka the window, but then what is F used for?
Is the mask variable in getbit() the same as r19? Since it looks like it does that countdown, though the one in the game is more than just a single bit and has more stuff in it.
The EI/EJ and N/F stuff is really confusing me, I'm not entirely sure what the lookahead buffer is, but I think its size determines the amount of literal bytes to be read when it reaches the thing that tells it to just get literal bytes.

What you need to know is if uses the decompression buffer as a lookup or a ring buffer of 4KB. If it writes two bytes at different locations it's definitively using a ring buffer.

What do you mean by different locations? As in, while decompressing it can write a byte at 0x0100, then next, instead of writing to 0x0101, it writes to 0x0150 or something like that? Because I'm pretty sure it writes them all consecutively, at least it looks that way, not sure how I would check whether there happens to be a byte that is written somewhere else.

I should have just said it was an LZ variant. I posted those notes because I thought they would be recognized as the key details that need to be tweaked in an LZSS decoder.

I did a lot of research into the subtitles (which are stored in the STR files), but don't know enough about CD reads to understand how it knows where to look for the parts it loads.

Can we talk in IRC? I mentioned you in there, not sure if you saw it. I want to ask you questions but this is kinda slow.

By the way, thanks everyone for the help so far!

59
There seems to be a pattern where 00 means the next 8 letters are to be copied as is. When the 00 is replaced with 80 (aka  1000 0000), it causes a fluctuation 8 letters later. Just like you said, a bitwise 'countdown'

Wow, I hadn't noticed that, I guess I'll look into it tomorrow. That countdown seems to be done with just about any value though, so it's weird.
For now, modifying the code to load text directly seems to be the easiest method to achieve this, I'm gonna have to find out where the text starts being loaded and where it ends, so I can compare the size of the compressed text with the uncompressed text, since if it really is compression, uncompressed text might not fit in the disc.

Have you tried adding that code to your text?

What code? If you mean that LZ snippet, I've yet to figure it out (going from low level to high level is difficult jesus).

On another topic, I've tried opening the game's STR files with some STR players, but none of them can open them. I don't even see a header in them, if there's supposed to be one. Part of this translation would be adding English subtitles to the few Spanish lines in the cutscenes, so I'm gonna have to figure these out too.

60
It sounds like you're certainly on the right track! I would think figuring out the trigger for these three paths would be the key. If one patch copies directly from compressed to decompressed area, perhaps you can discover how to make it the only path that is triggered.

So you're saying by doing that I could simply store decompressed text in the disc? That makes sense, though then I would have to figure out how it loads stuff from the disc... Well I guess I'd have to do that if I stored it compressed anyways since the size would change.

The bitwise operations you mention may work toward the pattern Vehek mentioned earlier. You may already know, but AND operations are usually for 'bitmasks' - extracting bits out of a larger number. It's common to see an AND followed by a SRL to move the extracted bits into their proper place before testing.

If you don't already have a resource for tracking such operations, the HexDecBin converter HERE might help.

On a related note, I get the anti-mod lockup screen when I load this game in pSX 1.13, even when using a Japanese BIOS. Which is especially strange because the Redump database doesn't list is as anti-modchip. Has anyone been successful in booting this game with the pSX emulator?

I've been debugging with pSX in fact, I use the scph5500 BIOS.

And today I've figured out a few more things, I think I'm getting pretty close.
In the register r19 (just naming based on what pSX says), at some point a byte from the compressed area is loaded, and it keeps getting shifted right by 1 bit every loop that a byte is stored to the decompressed area (also at some point it gets 0xFF added to it, such that it ends up being 0xFFXX, XX being the loaded byte, and I think this loaded byte is also the bytes that are "skipped" that I mentioned).
Normally bytes are taken from the compressed area and stored into the decompressed area, but when the lowest bit of r19 becomes 1, it branches off into the other path.

In this path it loads 2 bytes from the compressed area, say XY ZT for convenience, and it enters what I can't help but to call a for loop, with Z+3 being the amount of iterations. In this loop it gets Z+3 bytes from a previous location of the decompressed zone and stores them into the current one. It makes this address by adding up a base address, an offset stored in r16 (I still don't understand how it gets this offset; it appears to increment every loop, though I think depending on the path taken it doesn't increment), TXY (all those operations were for building that number), and the number of the current iteration of the "for" loop.

I've yet to figure out how r16 works, and keep track of r19. After finishing that path above it seems it can either "refresh" itself by loading a byte from the compressed area (the skipped one), or it can just keep going through the normal path until it branches off again. That behavior might have to do with a check done right before the one that checks the lowest bit. This check looks into the lowest bit of the 3rd nibble instead (ANDs with 0x0100).

Pages: 1 2 [3] 4