What's new

animal forest translation?

Aura_K

Doubutsu no Mori e+
IPS patches are simply patches to the ROMs data. The ROMs data does contain the texture data used in the game, so it is in fact possible to mod the textures if you know the storage format or have the means to find out (knowledge of R43000 assembly and the graphics hardware helps for this)

The textures in both the GC ISO and the N64 ROM seem to be uncompressed and in a standard format...
 

zoinkity

New member
A lot of the stuff that has been translated have been images.
Some images and text are compressed. The compression is Yaz0, which is easy and one of Nintendo's most common formats.

Sorry it is taking so long, but you have to understand that although it is easy to hack the game because it is very clearly coded, it takes for freaking ever because it is very 'well' coded.

What's that mean? Well, lets take the text for the selection menus. This is loaded into a chunk of data starting at 801425C0. You can only have something like 5 selections in this particular select menu, and each is normally expected to be ten characters long max. How short is that? This short:
"I'll get on"
So, obviously, the cap has to be removed. Well, it only takes three changes to get it to load the strings of text for each entry into the buffer. However, it tests to see if the string is longer than this here, here, and here:
80065604 13B84 2C61FFFF SLTIU AT,V1,FFFF
80065E20 143A0 2C61FFFF SLTIU AT,V1,FFFF
80065E74 143F4 2C81FFFF SLTIU AT,A0,FFFF
800652AC 1382C 2CC1FFFF SLTIU AT,A2,FFFF
800652D4 13854 2CC1FFFF SLTIU AT,A2,FFFF
800652FC 1387C 2CC1FFFF SLTIU AT,A2,FFFF
80065324 138A4 2CC1FFFF SLTIU AT,A2,FFFF
800651C0 13740 2CC1FFFF SLTIU AT,A2,FFFF

It also, on occation, needs to be told the length, which can be faked like so:
80065EB0 14430 00062825 OR A1,R0,A2
800A0F14 4F494 00648823 SUBU S1,V1,A0

Originally it used a text-alignment scheme, but we'll abandon that for now.
Oh, but wait! It copies the string into a buffer used to display them! Oh, and it assumes the string isn't more than 10 characters, +and+ assumes the pocket it copies it into is always offset by ten...
800A0F50:
LUI A1,8014
24A52700 *ADDIU A1,A1,2700
8FAA0004 +LW T2,SP,0004
8FAB0004 +LW T3,SP,0004
8FAC0004 +LW T4,SP,0004
SW T4,0020 (SP)
SW T3,0018 (SP)
SW T2,0010 (SP)
00000000 +NOP
00AA3821 +ADDU A3,A1,T2
OR A0,V0,R0
8FA60004 +LW A2,SP,0004
SW S1,0014 (SP)
JAL 80065278
SW S0,001C (SP)

800651F8
8FA70034 +LW A3,0034 (SP)
LW A2,0030 (SP)
10090003 BEQ T1,R0,+3
0009C080 SLL T8,T1,0x2
00D8C021 ADDU T8,A2,T8
8F180058 LW T8,0058 (T8)
ADDU V1,A2,T8

Oh, but the best part is after all that, the thing used to check the table and read each string is +also+ assuming a fixed size! Aegh!

So, for the sake of argument, what happens if any part of this doesn't work? Well, one of four things. If any of the size tests are omitted, you get a 'blank' string or a string entirely made of character 0. If the copy tests are botched, everything past the first 10 characters is overwritten by the next string. If the buffer offsetting is wrong, it will display string one okay and all following ones will start in the middle of other text. -or the game can lock.


So, really, it isn't hard, it is just time consuming tracing each of their dozen-or-so routines that expect fixed text. The select menus, item lists, character lists, certain kinds of text bubbles, etc, all use this scheme and none of them share code. So, it +is+ getting done, but not quickly.


Oh, found the 'no controller' text compressed in 854A60 at offset 0x24A8:
コントローラ1がささっていません。
ほんたいのでせホせをきってから.
コントローラ1をせつぞくしてください。

Something like:
"Controller 1 is not connected.
Please turn off the power,
and connect controller 1."
 

Aura_K

Doubutsu no Mori e+
Completely understandable; nobody wants to sit and work through the night just to get a meager amount of work done. Take your time; after all, this project is seeing its best progress in years, and impatient folks have AC City Folk coming up. :D

Also, I'd been wondering about that "no controller" text...

One last thing: Does anyone know of a good hex editor which I could use Unicode/UTF8 or UTF16 in? More importantly, would I be able to set up a "this hexcode corresponds to this textual character" chart/table with it? (Sorry, I can't remember what that would be called right now... A codepage?)
 

nmn

Mupen64Plus Dev.
Completely understandable; nobody wants to sit and work through the night just to get a meager amount of work done. Take your time; after all, this project is seeing its best progress in years, and impatient folks have AC City Folk coming up. :D

Also, I'd been wondering about that "no controller" text...

One last thing: Does anyone know of a good hex editor which I could use Unicode/UTF8 or UTF16 in? More importantly, would I be able to set up a "this hexcode corresponds to this textual character" chart/table with it? (Sorry, I can't remember what that would be called right now... A codepage?)

I think I used FlexHex last time i needed a hex editor with Unicode support, but it's not free. There are some other free ones out there, alas, i can't find them. (XVIII doesn't have codepages or unicode, does it?)

But last time i translated something it was a windows app (which i simply disassembled and reassembled to change stuff) and i did it mainly with this OS's text editor and a hex editor because it used standard encoding. Obviously that won't work here.
 

zoinkity

New member
Not to scare anyone, but I won't be online for at least the next three months. I'm still working on it, just won't be able to talk to anybody. Sorry for the inconvenience and all. Aegh.

Got a two and three option select menu working, but it copies string two with four in a four-option one, due to own stupidity. I'm recoding the whole blasted thing anyway to use the buffer the text comes from instead of recopying it into a smaller, cramped buffer. That way, you get as much text as you need every time. Also, that involves setting the 'selected option' string to copy into the normal text's buffer. Not as bad as it sounds. In fact, it would have went faster if I did that from the get-go. With any luck it will also catch 'bad strings' - strings over the normal limit for the table.

Oh, here's some 7F code-thingies. Not sure how the 80- ones work yet.
Code:
7F00	close window
7F01	window opening sound, or possibly even window open!
7F02	return to top of page
7F03	##
	malcovikian pause for # (milli?)seconds
7F04	blue arrow page advance; restores original font properties on advance
7F05	rrggbb
	change font color
	rrggbb	color

7F08	xx	yy	zz
	unknown
	zz	emotion, probably character-specific
		FE	used throughout resetti dialogs
7F09	xx	yy	zz
	unknown; could trigger effects, like eyes bug and wind sweeps in?  probably not
	zz	emotion, probably specific for characters
		FF	reset to 'stock' animation
		21	Resetti: fuming mad
		22	Resetti: eyebrows furrowed (angry)
		24	Resetti: !	Eureka!
		26	Resetti: stare.	white-eyed stare
		27	Resetti: pop out of hole?

7F0D
7F0E	1444
	unknown

7F0F	##	[possibly one more byte to data]
7F10	##	[possibly one more byte to data]

[note: with following four commands, be careful!
	the hacked version only allows ]
7F16	xxxx	yyyy
	load select_menu option menu w/ 2 fields
	xxxx	option 1 text index in select_txt table
	yyyy	option 2 text index in select_txt table
7F17	xxxx	yyyy	zzzz
	load select_menu option menu w/3 fields
	xxxx	option 1 text index in select_txt table
	yyyy	option 2 text index in select_txt table
	zzzz	option 3 text index in select_txt table
7F18	wwww	xxxx	yyyy	zzzz
	load select_menu option menu w/4 fields
	wwww	option 1 text index in select_txt table
	xxxx	option 2 text index in select_txt table
	yyyy	option 3 text index in select_txt table
	zzzz	option 4 text index in select_txt table

7F19	[possibly one more byte to data]

7F1C	name or similar.  used when refering to the player before stating town and time
7F1D	year:	####Ye
7F1E	month:	#Mon
7F1F	
7F20	day:	#Day
7F21	hours:	a/p.m.#H
7F22	minutes:	#Mi

7F25	selected player's name

7F28	cur player's name.  right now, this breaks

7F2F	HOME.  can it be different values?

7F50	rrggbb	##
	change font color for following characters
	rrggbb	color
	##	# following characters affected

7F52	##
	sound effect maybe?
7F53	##
	sound effect maybe?  seems to trigger the thing, but might require setting with 52?

7F59	##
	Sound Effect; 05 is springish sound effect in resetto's dialog
7F5A	##
	resize font to ##

As a slight note, the three menu types are a sticky issue in a straight AC->DnM transfer. If you ever hit a point when a menu should come up but locks the game instead, look at the options on the menu being displayed. More likely than not they added an option that uses a value not in DnM's table.
Coem to think of it, the JJ menus would probably be better done just translating them and using AC for stylistic reference.
 

GoronKid64

New member
Did you ever finish this project?
I would really want it.
Oh and if your not done my friend speaks Japanese and he can help just tell me what program i use to edit it please...

Thanks.
 
Last edited:

Aura_K

Doubutsu no Mori e+
Did you ever finish this project?
I would really want it.
Oh and if your not done my friend speaks Japanese and he can help just tell me what program i use to edit it please...

Thanks.

No, Zoinkity is the main person who is working on the project. He is still working on finishing the translation, however he will not be available for contact for at least three months, as stated by the post above yours.

When I have some free time (probably tomorrow), I will start working on an interim patch to add more translated text and fix old translated text in the existing patch.
 

Aura_K

Doubutsu no Mori e+
Does posting on the thread for the first time in eleven days count as help? :D

Heh, I suppose... Although, to be quite honest, I'm going to be really busy for the upcoming week or so. By this weekend, I should be able to do something (I hope :()...
 

zoinkity

New member
http://www.geocities.com/nefariousdogooder/AF/AFprojectDistro.zip

The link is to a preliminary alpha-version patch that does a few rather silly things. First, allow me to dash your hopes: this is +not+ a full translation patch or even one that works especially well. This is a preliminary patch that should allow those who need to make the final script to do what they have to do.
Appologies about the size (I'll leave a little something at the shrine). It clocks in at 3 3/4 MB roughly, which isn't just a long download but a longer upload. Contained is a .ups format patch, tools that convert the text binaries into a SYLK file and back again, as well as a slew of documents of varying degrees of pertinence. The 7F command list is probably the only one anybody would care about.

The patch does a few things:
1) Moves the six main text banks to the end of the ROM. They can be moved around even more, though the size allotted is more than enough for the complete AC script, let alone the AF one.
2) Changes the number of allowed indices for each table. Each table (except the npc name list) can have upwards of as many entries as in AC without any likely problems.
3) Changes the 7F16-7F18 select menu to allow options longer than 10 characters long. This one has some repercussions, so in this patch the menu when you talk to the animals is all screwed up. I wrote up the fix this morning but haven't had the chance to find the binary it goes into, so you'll get that next update.

The current script is a direct AC copy, which causes almost all the issues you will experience. That's why this patch should only be fiddled with by those who want to work on the script, since the script is, well, bonkers.

+-+
The AFtoSYLK and SYLKtoBIN programs are used to convert the text binaries and tables into a SYLK-format table. SYLK can be opened as a table in OpenOffice, or worst case you can look at the thing in notepad and try to work around the formatting. Included in there is a doc about the format of the tables and the special commands used. It isn't complicated at all, just silly at times. The original japanese and english text binaries are provided in the english and japanese folders.
The easiest way to use AFtoSYLK is to copy the program into one of the folders, then drop the .bin files one-by-one onto it. The message.bin will take a good long time. Errors only appear once on-screen, but you will have to press enter to get past them. At the end of the usage document are listed all the different command line options, some more useful than others.
You can edit the SYLK file in OpenOffice or anything else that happens to use it Text only appears when it is in the second column. All other columns are ignored, so you can type any stupid thing in those and it will ignore it.
When you're done editting the script, drop the .slk file onto SYLKtoBIN and it should pop out a .bin and .tbl file. The file "Where to put stuff.txt" outlines where you place the things into the ROM. You'll need a hex editor for that step, and if you can't find one try hexedit.com

Oh, I forgot about one other thing...
To apply the patch the original DnM rom will need to be extended to 0x2000000 bytes. I'll make something to do this automatically later, but for now you'll need to open it in a hex editor and do it yourself.
In HexEdit, you can create a new document, size 0x1000000, fill it with 00, then copy that onto the end of the DnM rom. Then, you can apply the .ups.
The ups patcher (most likely in violation of the license) is provided as well. Why .ups? Ips can't handle files over 0x1000000, .ups compresses its data, it is a small guy that doesn't require any weird libraries or additional downloads, and best of all the patch can be removed.
The rom must +not+ be byteswapped. If the first two bytes read 1480, select the whole thing and choose byteswap 16bit.

If you do need to move a binary, there's a table that sets the size. Can't remember the offset right now, so just search the rom for its current position. These sizes assume a full AC script is being used, so you should have no trouble downsizing it.

+-+
In the next patch I'll add in three 7Fcommands used through AC: force to lower case, capitalize first letter, and a.m./p.m.
Smidgeon from getting 8-byte long names working. They're 8 bytes in the buffer but copied as 6. That will be in next update for sure.
Will have all select menus fully-operational next update.
Time and date is getting hacked after all that. 1st-31st, January-December, Sunday-Saturday, 1:23:45

So, no excuses now! Script editors, start your engines!

-Zoinkity

[edit]
Forgot to mention, it will probably be a few more weeks to a month before I can get to the internet again. Should have more technical issues out of the way. Go on now, edit the scripts ;*)
 
Last edited:

Nevexst

Mupen64Plus Groupie
http://img300.imageshack.us/img300/6531/wishingwelljd3.jpg
http://img329.imageshack.us/img329/5880/whatmayorod1.jpg
http://img524.imageshack.us/img524/401/thatsluttytanukimr4.jpg
http://img222.imageshack.us/img222/3771/memorycardqb3.jpg
http://img54.imageshack.us/img54/9201/lolnottheresp4.jpg
http://img98.imageshack.us/img98/846/lolitemsln9.jpg
http://img204.imageshack.us/img204/1492/englishtextyw7.jpg
http://img301.imageshack.us/img301/9071/coppermw9.jpg
http://img204.imageshack.us/img204/4795/clockgr5.jpg

Some pictars. :]

I am going to reiterate Zoinkity's warning. THIS PATCH IS NOT A FINAL PRODUCT. For those starting a new game, you won't get past the train ride due to a funky 7F command. If you have a save file already, you'll be able to start, but you won't be able to save. Also, some choices are borked and will result in non-function. Also, if you get Resetti, it will skip to the third transgression and become non-functional.
 
Last edited:

GoronKid64

New member
Wow! That looks awesome, You even got the names done! I am gonna play when someone finishes this! It looks like Nevexst is gonna finish first.
 

Nevexst

Mupen64Plus Groupie
Wow! That looks awesome, You even got the names done! I am gonna play when someone finishes this! It looks like Nevexst is gonna finish first.

Well, I haven't really done much of anything. That's what's included in Zoinkity's patch. I thought it'd be somewhat of a morale boost to see the product after not having much of anything for a while.

Basically, what we've been trying to do for the last few months is put the Animal Crossing script into Dobutsu No Mori. Zoinkity seems to have succeeded in putting a good amount in so far, but there is still work to be done. For example, item names and catchphrases have yet to be inserted.

The goal now is editing the script so that mentions of things not in Dobutsu no Mori are removed. Such as the E-reader, the password system, Animal Island, etc.

That being said: I've been perusing the binaries. I've counted 5 binaries that are going to need work:

*mail_data
*message_data
*ps_data
*select_data
*string_data

(If I'm wrong, please feel free to correct me. But I've found references of stuff not in Dobutsu No Mori in those files in particular)

Now, the thing is: division of the binaries between interested parties. (Message_data is FOUR MEGS BIG)

Once we figure that out, we can make Lysol proud.

PS. Speaking of Lysol, I have attempted to contact him with news of new progress.
 
Last edited:

GoronKid64

New member
I just downloaded it, but i don't know how to patch it. Do I just go into the patch files and go 1 by 1 to put it on Dobutsu No Mori
 
Last edited:

Nevexst

Mupen64Plus Groupie
Not that simple.

First, you need to check your rom for proper byteswapping. Check Zoinkity's instructions for help on this.
Next, you'll need to expand your rom by 16mb to make it 32mb.
and lastly, apply the supplied UPS file.

I would highly not recommend patching it yet if your desire is to play it. Most of the choices are broken. Since the script dropped in was from Animal Crossing, there are some choices that are being shown that shouldn't exist (i.e: 'other things' in the Gyroid menu). Also, you can not perform an in-game save. It will go into the house, but it will say that you are 'not allowed to have more than one town data on a memory card', and it will infinite loop from there.
 

Lysol Pionex

New member
Wow.

All I can say is wow. I mean seriously, you guys have taken what I started as a stupid little project and melded it into a nearly full-fledged translation!
I doubt if I can help much at this point; I think your skills are a bit above mine. :)

Sorry for kinda dropping the project in your collective lap also. I don't know if you guys remember my excusing myself toward the end of my involvement due to medical junk; well it escalated for a while (I missed a semester of school :-\ ).

Anyway, awesome, incredible work. I look forward to the finished product. :)

-edit-
And a huge thanks to Nevexst for calling my attention to the progress of this project!
 
Last edited:

Top