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

Author Topic: Pizza Pops! Translation - Famicom  (Read 3708 times)

wyndcrosser

  • Full Member
  • ***
  • Posts: 199
    • View Profile
Pizza Pops! Translation - Famicom
« on: December 22, 2013, 02:35:43 pm »
So, I got the mapper hack file from Mottzilla for Pizza Pops and I've translated all dialogue for all 7 levels. Now that the hard work is done, I've tile swapped out the Japanese characters for english characters. Usually this would be a piece of cake and I'd be done in 30 minutes, however FCEUltra (NES Emulator) shows me what hexadecimal the game is using for each font character letter (C0=A, etc.), however I'm not able to find it in the game itself. There's two main font "tables" and one semi font "Table" where the game pulls sprites/tiles from.

i.e.
I can find the first two lines below at 0000F708
However the last two lines of text are no where to be found
(The weird lines,etc. was me just identifying spaces)


I'm curious if the mapper hack did something to how the game stores text. Anyone have any advice. I'd post the rom, but I know Mottzilla doesn't want it leaked out.

Wynd

Zynk

  • Hero Member
  • *****
  • Posts: 903
  • WIP Roll-chan: The Wily Wars
    • View Profile
Re: Pizza Pops! Translation - Famicom
« Reply #1 on: December 23, 2013, 07:09:30 am »
Aren't you using the 8x16 tile set of letters? I think 8x8 letters can be used.

Also, if you look into YY-CHR there are two pages of 8x16 letters. They have some letters that are the same but also have other letters changed.

wyndcrosser

  • Full Member
  • ***
  • Posts: 199
    • View Profile
Re: Pizza Pops! Translation - Famicom
« Reply #2 on: December 23, 2013, 11:07:32 am »
Aren't you using the 8x16 tile set of letters? I think 8x8 letters can be used.

Also, if you look into YY-CHR there are two pages of 8x16 letters. They have some letters that are the same but also have other letters changed.

btw nice work on the Roll-Chan game. Yes, I'm using 8x8, instead of 8x16, as you can see from the picture (I left two of the 8x16 characters to show you). Tile Layer Pro, shows me two sections with the letters, plus a third that houses some of the end game letters. The problem is when looking at the game using Fceultra Emulator, I see what hexidecmial the letter should conform to. i.e. ABCD LM, which should be C0C1C2C3, however I was only able to find that once..... which is what you see above, the "Mixed Pizza".

KingMike

  • Forum Moderator
  • Hero Member
  • *****
  • Posts: 6844
  • *sigh* A changed avatar. Big deal.
    • View Profile
Re: Pizza Pops! Translation - Famicom
« Reply #3 on: December 23, 2013, 03:23:55 pm »
The game might even be storing the text as 16x16.

Very likely 8x16 is using a separate font table. When doing 8x16, some games might store the tile for the top half and then assume the bottom is tile (top tile + 0x10) or something. Other games might, like I suspect this might be, reading a table of which tile is the top half and the bottom.
So, say you have font character X, then it will read a table at index X+2 and find tiles Y and Z, then assume Y is the top half of the 8x16 and Z is the bottom. You might have found Y and Z.

Actually, the best thing to do in this situation is to use FCEUX debugger.
Look at the Name Table viewer. Point to the top tile. Note the PPU Address. That is the Nametable address where the tile will be written. Reload to just before the screen, and set up a Breakpoint. Click Add, then enter the address, PPU and Write to make it break when the 8x8 tile is about to be read from the screen.

It hits on this routine (for the first screen that appears when starting a new game.)
STA is store A. $2007 is the VRAM access port, so it's writing A to VRAM. In that case CPU $8360 (ROM $0370 seems the most likely match) has the 8x8 tiles that make up the 8x16 ミ.
Just eyeballing this routine and guessing its functionality

Code: [Select]
07:D650:A4 0D     LDY $000D = #$05
 07:D652:B1 08     LDA ($08),Y @ $8860 = #$A1      ;read text
 07:D654:85 00     STA $0000 = #$80
 07:D656:A9 00     LDA #$00
 07:D658:85 01     STA $0001 = #$00                 ;initialize pointer to 8x16 tile to the tile number
 07:D65A:06 00     ASL $0000 = #$80
 07:D65C:26 01     ROL $0001 = #$00
 07:D65E:06 00     ASL $0000 = #$80             ;16-bit left-shit x2 to effectively multiply by 4 (is the game using 16x16?)
 07:D660:26 01     ROL $0001 = #$00
 07:D662:18        CLC
 07:D663:A5 00     LDA $0000 = #$80          ;adding the 16-bit result to $96, presumably contains a pointer to the start of the font table
 07:D665:65 96     ADC $0096 = #$E0
 07:D667:85 04     STA $0004 = #$60
 07:D669:A5 01     LDA $0001 = #$00
 07:D66B:65 97     ADC $0097 = #$82
 07:D66D:85 05     STA $0005 = #$83
 07:D66F:A0 00     LDY #$00
 07:D671:20 7B D6  JSR $D67B                 ;branch to VRAM write for the top line then return for bottom
 07:D674:18        CLC
 07:D675:A5 0A     LDA $000A = #$8A      ;increment VRAM address to bottom tile
 07:D677:69 20     ADC #$20
 07:D679:85 0A     STA $000A = #$8A
 07:D67B:A5 0B     LDA $000B = #$24        ;$0A-0B contains the tilemap address
 07:D67D:8D 06 20  STA $2006 = #$8A
 07:D680:A5 0A     LDA $000A = #$8A
 07:D682:8D 06 20  STA $2006 = #$8A
 07:D685:B1 04     LDA ($04),Y @ $8360 = #$C0          ;read tile data
>07:D687:8D 07 20  STA $2007 = #$00
 07:D68A:C8        INY
 07:D68B:B1 04     LDA ($04),Y @ $8360 = #$C0
 07:D68D:8D 07 20  STA $2007 = #$00
 07:D690:C8        INY
 07:D691:60        RTS -----------------------------------------------------------
"My watch says 30 chickens" Google, 2018