Castlevania II (Simon's Quest) - Multilingual enhancement

Started by Bisqwit, December 19, 2012, 01:38:36 PM

Previous topic - Next topic

Bisqwit

Quote from: Turambar on February 21, 2016, 11:26:25 AMAny particular reason?

It has perfectly eluded my attempts to make sense of the disassembly.

Turambar

Quote from: Bisqwit on February 21, 2016, 11:49:46 AM
It has perfectly eluded my attempts to make sense of the disassembly.
It must be strange indeed to stump Bisqwit. Know where the chunk of music data is in the rom? I guess I could compare with the nsf file....

Quote from: Bisqwit on February 21, 2016, 11:10:45 AM
Now, if you wanted to meet someone at a precise time in some place, which saying would you think would result in less waiting on your part, for them to come: midnight, or 12 am?
People use midnight and 12 A.M. interchangeably. I've never heard anybody say midnight and not mean 12 A.M.

Bisqwit

Quote from: Turambar on February 21, 2016, 12:01:14 PMIt must be strange indeed to stump Bisqwit. Know where the chunk of music data is in the rom? I guess I could compare with the nsf file...

Yes, I do. http://bisqwit.iki.fi/kala/cv2_sound.txt Here's my disassembly.

Alright, I'll change the "12am" into "midnight".

   Tonight.[nl][nl]
   At midnight.[nl][nl]
   The river[nl]
   bank.[nl][nl]
   Be there.


How's that?

Turambar

Quote from: Bisqwit on February 21, 2016, 12:04:18 PM
   Tonight.[nl][nl]
   At midnight.[nl][nl]
   The river[nl]
   bank.[nl][nl]
   Be there.


How's that?
Seems fine to me.

akmodan


8)

February 21, 2016, 02:00:59 PM - (Auto Merged - Double Posts are not allowed before 7 days.)

   Tonight.[nl][nl]
   At midnight.[nl][nl]
   The river[nl]
   bank.[nl][nl]
   Be there.


It's perfect.

If you are interested and make translations to others language. Let me know.

8)

Rodimus Primal

I'll be a third voice for midnight always being used for 12am. It's not a big deal to say one or the other but I've always said midnight.

TheZunar123

I've never heard people use 12am when referring to midnight. Midnight sounds more natural, but I do see how saying 12am is a more exact time frame. It's like saying noon versus 12pm. It's understandable either way though.
Speedrunner and Let's Player.
www.youtube.com/ZunarSR

Bisqwit

#947
Alright, good, thanks everyone. I'll upload a new version soon(ish)! The "12 A.M." was a literal quote from the Japanese version in case anyone is wondering. "Konya, 12ji, kawa no hotori de" (where "ji" pretty much means "o'clock").

For people wanting to contribute translations to new languages, I have previously posted here the instructions how to start. I will not go requesting you to do things. I will not first contact you. You must be the one who is motivated to carry out the project.

To reiterate, send me e-mail to bisqwit@iki.fi, explaining your motivations, the language you are translating for, why you might be qualified for it, and the extent of work you are willing to do.

I will then analyze the special needs of your language, and in the case you are initially approved, respond outlining the possible challenges you will face, and send you a generic translation task sample, which you must fill and send back to me. You can find a copy of this translation challenge in a previous post of mine in this thread. Upon receipt, I will judge this sample and use it to decide whether or not to continue the project with you. On your behalf, the task will familiarize you to the type of files that you are going to be working with. If I accept your response (and I usually do), I will then proceed to send you the full set of script files, a summary and explanation on each file, and an overview of the whole process. At no point will you receive a program.

At some point, perhaps periodically, you will send me progress reports which include the translated files that you have so far. I will verify them, possibly fix some bugs, report you some problems, and send you the compiled ROMs with your translation in them, for testing. After enough cycles, which is up to you to decide, and up to me to accept or reject, there will be a version that is ready for publishing, and we will discuss then how to do that. At any point, I will assist you with any questions you may have about fulfilling your translation.

The rate of communication is optimally at daily basis, or at weekly, though this has lately been a hollow promise on my part, due to no fault of any contributor, all of whom are greatly appreciated.

Bisqwit

I have now released version 2.9.8.18 of this project.
Download at: http://bisqwit.iki.fi/cv2fin/
Currently available in languages: Finnish English Japanese French Tagalog

Changes since 2.9.8.17:
― Many internal changes, resulting in more efficient linking.
― Vampyre_shriek20 is changed into Vampyre_shriek30, as it was observed that people may take a long time to complete the game.
― The sightseer can now give a maximum of 5 laurels and 8 garlics.
― English: "12 P.M." was changed to "midnight".
― Finnish: Ondolin kirkonkylä was changed into Ondolin kauppala after observing that there is no church in Ondol.
― Finnish: Two typos were fixed.
― Finnish: Two clues were made reasonably easier to understand.

Rodimus Primal

Quote from: Bisqwit on February 11, 2016, 10:26:26 PM
Sorry, no progress with anything for a while. I am a little backlogged with the multilingual contributions I've received so far, due to no fault of any contributor. I will get back to it soon(ish).

Ending: I have currently no roadmap for extending it. But that's not what you meant... Was it:
Invisibility bug in ending: I totally forgot about this. Raising priority.
Prologue music: May be done some day, but right now it's frozen.
Town doors closing for night: I was not able to resolve the bugs I had with it, and I gave up.
Credits screen behind title screen: Forgotten though not abandoned.
Achievements: Really low priority plan.

Very cool that you did another update. Where you able to make progress with Simon disappearing after killing Dracula and not appearing during the ending (Good and Best) ?

Bisqwit

Quote from: Rodimus Primal on March 02, 2016, 09:08:27 PMVery cool that you did another update. Where you able to make progress with Simon disappearing after killing Dracula and not appearing during the ending (Good and Best) ?

I apologize, but it has not yet been fixed. Additionally, two more bugs have been discovered:
-- (Any chipset) Enter map, exit. You will receive a free clue on your status screen, or lose some of them (something writes a random 1-bit value into $4F3).
-- PAL version, mapper 10 (MMC4): Entering the map will crash the game.

ninn

Hi there, bisqwit!

Just a quick question: is it possible to load a sram savegame without resetting the console, i.e. loading from sram while playing? Just curious...

thanks in advance,
ninn

Bisqwit

Quote from: ninn on March 11, 2016, 06:53:02 AMHi there, bisqwit!
Just a quick question: is it possible to load a sram savegame without resetting the console, i.e. loading from sram while playing? Just curious...

Useful answer: No, it is not. From the in-game savegame engine you can only save games.

Literally true answer: Technically the save engine actually loads a game every time you move a cursor, in order to render the information about the save. And it does a full and complete loading, too, loading the whole save, extracting it over the current game status and all. But when you exit the screen, the savegame engine actually loads an invisible backup save that it made without you knowing, when you entered the screen in the first place.

Progress report: I found the reason to the clue-overwriting bug I explained earlier. It was caused by optimizations I made some game code used by the palette fader. I failed to consider that the map-restoring engine actually referred to the old code with hardcoded offsets.

Oddly enough, there is actually code in my patch that attempts to make sure Simon is not invisible when Dracula is killed. Seems that I need to test it in detail.
  // When Dracula is killed, ensure that Simon is not invisible
  // ObjectAI_object4D_DraculasDeath at $B69F in bank 1: Unblink Simon

  $b = new Blob("SimonUnblinkCall");
  $b->AppendCallPointerTo("SimonUnblinker"); // 3-byte JSR replaces 3-byte "LDA abs,X"
  $linker->AddBlob($b, 0x769F, true);
  $b = new Blob("SimonUnblinker",
    "\xA9\x02"."\x8D\xF8\x04"."\xA9\x00\x8D\xC6\x03".
    "\xBD\xD8\x03\x60"); // the same 3-byte LDA, and RTS
  $linker->AddBlob($b, Array(0x4000,0x1C000)); // will be placed somewhere in one of these two banks

EDIT: Bug fixed.  This code rather ensured that Simon will be invisible during the ending. Replacing lda #2 with lda #1 fixes the problem.

EDIT: Map-screen crash bugs completely resolved. Turned out to be missing parenthesis in delay_n call, and then foiled by a macro. In case you are wondering how can this possibly result in a crash, it goes as follows: My delay engine uses partial instructions sometimes to reduce the size of delay loops. It does so only if the partial instruction is harmless in the context. Mismatched operator priority caused "n = 40" to evaluate into something completely other, enabling partial instruction execution when the instruction was in fact unsafe (plp). The following is an example of a harmless partial-instruction delay loop, where the first two instructions are "ldx #imm" and "lda zp,x" for the first loop only, but "ora #imm" and "nop" respectively for all consecutive loops. It is the smallest possible code that produces exactly 82 (or 1729 or 1810 or 2017 or 2098) cycles of delay, with 7 bytes of code, given that all registers can be clobbered except Y.
.if(n = 82 || n = 1729 || n = 1810 || n = 2017 || n = 2098)
        ; 7 bytes
        ldx #((n-1)/9)
        @d = * - 1
        ; (^hides 'ora #imm' (2-byte))
        lda $EA,x ; hides a 'nop'
        dex
        bne @d
.endif

You can find my delay macro modules at: http://bisqwit.iki.fi/src/6502-inline_delay.7z . There's a file for every thinkable combination of registers to not clobber, and each file contains the smallest possible macro for any number of cycles to delay from 2 to 5000.

EDIT: Additional bug found: Daggers and knives crash the game. Found reason: Making a certain piece of code relocatable made the BNE at its end miss its target. Replacing with JMP fixes the problem.

NEW VERSION RELEASED
Version 2.9.8.19 is available for download.
Changes since 2.9.8.18:
-- Fixed aforementioned crash & data corruption bugs, and the ending invisibility bug.

Additionally, the Tagalog version broken ROMs in some combinations (involving VRAM) have been fixed by an earlier release (most likely 2.9.8.18).

EDIT: Found that it still crashes when exiting map screen in mapper 1. Also found what causes it. The bug was fixed in the same release (by updating it). Also: Incredibly nobody seems to have reported it yet, but when you enter and exit map, all NPCs (including monsters) are respawned in their initial positions.

ninn

Unexpected behaviour:

Download recent version.

Start a new game.

Leave town to the right, you should see a blue wolfman and a skeleton coming at you.
Attack both without moving yourself.

When both monsters are dead, keep going some steps to right till the screen starts moving. Stop here.

Now have a look at your map.

Leave map.


:crazy:

[edit]
2 days too late ...  :-\

Bisqwit

Quote from: ninn on March 13, 2016, 03:27:00 PMLeave town to the right, you should see a blue wolfman and a skeleton coming at you.
Attack both without moving yourself.
When both monsters are dead, keep going some steps to right till the screen starts moving. Stop here.
Now have a look at your map.
Leave map.

Quote from: Bisqwit on March 11, 2016, 07:07:34 AMAlso: Incredibly nobody seems to have reported it yet, but when you enter and exit map, all NPCs (including monsters) are respawned in their initial positions.

These two reports seem to be identical. Did this not happen in an earlier version? Hmm. It certainly is not intended to happen.

Fisher

Please, could you help me?
I'm trying to make a UOROM version of Castlevania 2, and find that your patch besides doing this, improves the game a lot! I plan to make a repro for my personal use.
The problem is that after aplying the patch, the emulator says it needs the FDS bios.
I took a look with an hex editor, and the resulting file seems to have no header.
Am I doing something wrong?
I'm aplying the .ips patch with lips on the USA verified good dump.
Should I add a header to it manually?
Thanks in advance!!

ninn

That map-bug is a comfy way to level up quick. I like!  :thumbsup:



April 20, 2016, 02:51:21 AM - (Auto Merged - Double Posts are not allowed before 7 days.)


edit:
Fisher, are you sure you have a UORom version of that patch to begin with?  :huh:

Bisqwit

Quote from: ninn on April 20, 2016, 02:32:59 AM
That map-bug is a comfy way to level up quick. I like!  :thumbsup:

Sorry about that! I will fix it soon hopefully.


Quote from: Fisher on April 17, 2016, 09:44:55 PMPlease, could you help me?
I'm trying to make a UOROM version of Castlevania 2, and find that your patch besides doing this, improves the game a lot! I plan to make a repro for my personal use.
The problem is that after aplying the patch, the emulator says it needs the FDS bios.
I took a look with an hex editor, and the resulting file seems to have no header.
Am I doing something wrong?
I'm aplying the .ips patch with lips on the USA verified good dump.
Should I add a header to it manually?
Thanks in advance!!

Hello! I presume that the patch that you applied is cv2eng-2_9_8_15-ntsc-stm2mwfmFuVp4.ips ?
I tried applying this patch myself, and I have confirmed the problem you reported, that the iNES header disappears from the patched file when using this patch. All the .nes files should have a proper iNES header before and after patching, and it should not require any user effort.
Very sorry about that. I will investigate this problem. Thank you for reporting the problem.
In the mean time, take this patch: http://bisqwit.iki.fi/cv2fin/ips/cv2_ntsc_eng_map2_vram1.ips It should contain exactly the same set of features, but created using my dev tools rather than the vending machine (and is also of the newest dev version rather than the 2.9.8.15 you requested).

Fisher

@ninn: AFAIK UOROM is a mapper 2 with 256KB ROM, while UNROM is the same mapper with 128KB of ROM. Please, correct me if I'm wrong.
I have made a modified test board and have tested Ikari 2's hack to mapper 2, Ultimate Stuntman and Adventures of Dizzy successfully. So, looks like I have a working UOROM board. :)

@Bisqwit: Many thanks for that!! :thumbsup: I'll test as soon as I arrive home. As a suggestion, would it be possible to add SRAM save on mapper 2 by using this ?http://wiki.nesdev.com/w/index.php/PRG_RAM_circuit
For me, would be a lot easier to make my repro like this, so I'm just working with a discrete logic mapper, which is a lot easier to make.
Many thanks guys!!

ninn

Fisher, I was not aware that the 74161 version was for UORom. My fault.  ::)