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 - Kajitani-Eizan

Pages: [1] 2 3 4
ROM Hacking Discussion / Re: Cartographer for Tales of Destiny PS2
« on: February 22, 2021, 01:22:38 pm »
I then see what I could do with Artes and that's where it gets more complicated. I know you already know all this stuff lol.
I have these weird pointers in green (see

Do you have a way to deal with them? My only solution seems to just build multiple blocks in my Cartographer script like this :

Those aren't pointers, probably other data. Looks like a array of structs of size 0x20 which each contain three string pointers (probably arte name, arte furigana, arte description). I'm not totally sure if abcde/Cartographer/Atlas handle this elegantly as you might like. You can use #PTRTBL to automatically handle it, but I believe it will separate those strings from each other. E.g.:

What you probably want:

Demon Fang
Be Link and shoot magic beams from your sword.

Tiger Blade
It's just two slashes, but yelling the name out loud makes it four times as powerful.

What using PTRTBL like that will give you:

Demon Fang
Tiger Blade


Be Link and shoot magic beams from your sword.
It's just two slashes, but yelling the name out loud makes it four times as powerful.

Maybe someone else with more experience with those tools can suggest a solution, else you may need to write something custom in Python etc.

Hope this helps!

Programming / Re: Tales Of Series: Collection of Tools
« on: February 18, 2021, 07:27:18 pm »
Just wanted to pop in and say very nicely done!  :beer:

Programming / Re: [NDS] Fixed string length limit
« on: February 18, 2021, 07:08:28 pm »
You'll want to use No$GBA debugger to try to figure out what the problem is:
  • Is the game using a fixed size buffer during the string processing? (char buffer[16] or char buffer[32])
  • Is the game displaying text as tilemapped data and is only reading the first 16 characters?
  • Is the game properly rendering text in a proportional/VWF-compatible way and would be out of VRAM if you expanded it?

You can start by examining the VRAM/Tile/OAM viewer, and working backwards from there to figure out file loading/string processing functions, etc. It will likely require learning some ARM assembly, good luck!

ROM Hacking Discussion / Re: Cartographer for Tales of Destiny PS2
« on: February 18, 2021, 04:51:26 pm »
The text starts at offset 1BBC00.

#JMP($1BB930, $1BF0E4) // Jump to insertion point

Why are you jumping to a different offset than where the text starts? Are you sure that the range you are specifying there contains nothing else but the text you are trying to insert/overwrite?

#HDR($-FF000) // Difference between ROM and RAM addresses for pointer value calculations

Don't do this, this command is intended for ROMs that have a copier header that the actual system doesn't use or recognize. Use #CREATEPTR/#WRITE instead, see Atlas documentation

Re: adding branches within the game code:

Rather than bothering with all that, I would recommend just identifying some other resource within bl range (e.g. some graphics) and move it to the end of the ROM, changing all references to that resource as well. Then use that space for program code that is in range. Voila, you can just bl straight to the new functions, only 4 bytes needed within the function to be hacked.

If you can only move a very small amount of stuff, or you don't want to move any stuff but you can identify a small amount of space you can use (so, not big enough to store your big new functions)... you can use the space to write veneers that will let you perform the large jump while keeping your actual code relatively clean. For example:

Function to hack in original game code:
Code: [Select]
  (stuff before)
  bl MyFunction  ; overwrites either a different bl or 2 instructions
  (stuff after)

Small island of space:
Code: [Select]
  ldr r3,=MyFunctionForReal
  bx r3
(this is more or less what you wrote, but now not in the middle of other code)

End of the ROM:
Code: [Select]
  push lr
  (replicate the code you overwrote in the hacked function)
  (do your stuff)
  pop lr
  bx lr

This should work fine as long as you can freely use one of r0-r3 for the veneer. If not, e.g., the function to be hacked was using all those registers, or you are writing a new function that takes more than 3 parameters, the veneer will have to be a bit longer... r12 is explicitly to be used for this purpose and you are not generally expected to preserve its value, but you can't load directly into r12 in THUMB. So maybe something like:

Small island of space:
Code: [Select]
  push r4
  ldr r4,=MyFunctionForReal
  mov r12,r4
  pop r4
  bx r12

Just double check that the function you're hacking didn't make temporary use of r12, and you should be good. If it did use r12 and you also can't use any of r0-r3, then the solution will be ugly no matter what.

That's probably not what you'll want to do at first, especially since you don't have a handy pool available for the addresses.

Try first a very basic thing, like changing what value is added there, e.g.:

Code: [Select]
.open "lufia.gba",08000000h   ; Open ROM, map to 0x08000000 as per typical memory mapping for GBA
.gba                          ; Put armips in GBA mode/THUMB mode

.org 08001AC6h                ; Move insert point to this address
; add r0,r4                   ; Add r4 to r0 (original instruction)
  mov r0,20h                  ; Set value to always be 0x20, instead of adding r0 and r4 together


Put in the appropriate filename for your ROM instead of "lufia.gba" and save as a .asm. Run armips with this .asm file (it will modify your ROM). If that changes the thing, you know it worked, good first step! To change it back, comment out the mov and uncomment the add (move the semicolon from one line to the other).

ROM Hacking Discussion / Re: Asm hacking
« on: February 07, 2014, 08:37:37 am »
That strikes me more as a not-using-a-repository issue :P

that merely shifts the job from figuring out where the issue lies to when the issue lies :P

and i can't believe you guys do any assembly work beyond changing some immediates or really minor work changing maybe ~20 bytes total without using some kind of assembler and/or build system. this hex editor and notepad stuff sounds like hand-repointing strings to me :P

? i thought these are just the names of the materia. the double-cut/multi-slash materia offers two different abilities that are named differently, doesn't it? (i assume midareuchi/barrage for 4xCut, no idea what the japanese was for 2xCut)

I think that "Seal" is better for ふうじる, it takes less space.
As for りだつ, I think that "Retreat" is better.

you can't possibly want both a Seal and a Sealed materia. go with Impede+Sealed, or Seal+Forbidden, or something... Seal+Sealed is just silly :P

as for Retreat, that's a bad choice of word as it doesn't quite convey the likely intended meaning of the kanji, given the (offensive) degeon spell being in there. you probably want a word with a meaning something along the lines of split [apart], separate, divide, diverge, etc. how about "Rift"?

if you want any extra takes on them:

まどわす - Muddle/Bewilder
ひっさつ - Finisher
いんせき - Meteorite
ふうじる - Impede/Inhibit
ふういん - Seal / Sealed/Forbidden
りだつ - Disengage
ちりょう - Treatment/Recover

i'm not totally sure on whether they were going for the idea that the ふういん materia contains sealed/forbidden abilities, or whether the abilities themselves seal enemies (as freeze and break certainly do), or both.

to avoid confusion (ha ha...) with existing series terminology that refers to different things, you probably want to avoid "Confuse"/"Confusion", "Remedy", and "Heal".

OT: My brother’s music theory class in college had a Japanese TA, and the quirky professor was running late. She explained that he was バーンing a CD. Nobody said anything, but the giggles revealed that everyone was thinking, “Well, that explains a lot!”

idgi :/

I was purposely being literal so he could see what the original line said. Whereas you're adding random words (including curse words) that weren't actually in the original line.


the problem with being "literal" is that it doesn't make any sense in context. "long-winded" doesn't apply to the situation at all and is thus essentially a mistranslation. (remember, there are two parts to translation: understanding the meaning of the text in the source language, and expressing it properly in the target language.) further, if you're really trying to be super literal, the part about what "guests should" do isn't in the original line, either. then there's the "shut up", which is straight up localization.

something like, "How annoying! Don't talk blabber! You guests sit down quietly in [your] chairs!" would work better as a super literal engrish translation.

of course, the localized version of this line is pretty amazing :P


There's something I'd like to discuss about. It's about the Save Crystal's description. Here it is:

"Acts as a Save Point when used from the menu. Gone after one use."
The name of the last dungeon was dropped in your translation, Midna.

This is the original text:
This "大空洞" (Daikuudou) is the last dungeon in the game, the "Northern Cave". I know the best translation for it is "Great Cavity", but where do I insert it in that sentence?

"Can create a save point within the Great Cave when used from the menu. One-time use."

And I've finally found FF7's Official Establishment File, a very important document made back in 1997, BEFORE the game was officially released in Japan. It was released only in Japan, so practically everything is in Japanese. However, it contains the characters' romanizations (not all of them). In that file, Aeris's name appears as "Aerith". Barret's name appears as "Barett". But what almost gave me a heart attack were the Turks' official names. While Rude's name is correct, we have Yrena ("Elena"), Leno ("Reno"), and Zeng ("Tseng"). I honestly didn't know that. I guess "Zeng" looks better than "Tson" (his name in katakana), so I'll change his name to "Zeng" ^^ (yeah, change of plans).

Here's a video on YouTube showing this document, page by page.

i would take any japanese official romanization with a grain of salt. "Barett" is just silly. "Barrett"/Bullet is likely what they were going for.

you wouldn't call cloud Croud just because some japanese guidebook somewhere said so, would you...?

Wow. That re-translation is about on par with the J2E FFIV translation (which is to say they kinda do whatever they want as far as "fixing" certain things but mostly follow the original localization).

What that line actually says is "Shut up! Don't be so long-winded. Guests should sit quietly in their chairs!"


or, less engrishy... "Shut up! I don't wanna hear your blabber! Guests like you should just sit your asses quietly down in those chairs!"

Programming / Re: Your perfect debugging emulator.
« on: November 04, 2013, 12:47:35 am »
The feature I'd love in a debugging emulator would be one that could do a memory trace and say exactly where some data in memory came from.  It would be such a time saver.

+1, that would be amazing

presumably you hit a button and it savestates and starts logging both a tracelog and the player input, then you use breakpoints or just pause the emulator to get to the point where the value in memory is there, then hit magic reverse trace button to trace backwards to see where it came from. obviously it might get stuck if it reads/writes to intermediate memory steps, but then you just automatically load state and retry again with the new target memory address and the recorded player input. repeat until you find a source or reach the beginning of the log :P

Gaming Discussion / Re: God Mode
« on: September 23, 2013, 05:59:38 pm »
lightning dodging was a good challenge... IF you found/looked up that one awesome spot for it and had no encounters equipment on. otherwise, yeah, 200 is just cruel.

out of curiosity, would you be sticking with the popular "Siesta" name or the official "Chiester"/"Chester" name?

(without going into too much detail about the meanings of the various names since it's verging on spoiler territory)

ROM Hacking Discussion / Re: Screenshots
« on: February 14, 2013, 03:21:57 pm »

*whistles innocently*

nice! :P

i would highly recommend auto-wrapping on any game/system on which it's remotely feasible for any translation project. it's especially nice for text that has control codes in it that are expanded at runtime into arbitrary item/character/whatever names, because you can't even write a manual autoformatter to deal with that at build time :P

ROM Hacking Discussion / Re: Open Questions Thread
« on: February 14, 2013, 11:42:34 am »
i would personally be of the opinion that you should just stick to ASCII 0x20 to 0x7F and call it a day. maybe also letters with diacritical marks for non-english translations or long japanese vowels. people can probably modify the font as needed if their requirements are different.

these lyrics

i guess that can be blamed on the original japanese song though

Personal Projects / Re: Tales of Phantasia (SNES Enhancement)
« on: October 18, 2011, 05:05:31 pm »
2. The screen no longer shakes when you attack with a regular attack.

aww :/ i thought that was kind of fun about the original.

but this sounds awesome, looking forward to seeing how it plays!

Personal Projects / Re: Final Fantasy Tactics Advance: Grim Grimoire
« on: October 18, 2011, 04:55:56 pm »
any chance of reordering skills? for example, i seem to recall elementalist getting their best skill first (fire whip) and the rest essentially being useless. alternately, perhaps reducing the duration of hard disables would be good. assassins (i think?) had a similar issue of having a bunch of status-causing skills that are pretty worthless compared to seal and stop breath, when you consider factors like range, MP cost, and accuracy. also, less worthless skills per job in general would be good :P

oh yeah, and two hands not being total crap would be cool too :P

Pages: [1] 2 3 4