Translation [GBC] Loppi Puzzle Magazine - Kangaeru Puzzle Soukangou - english patch

  • Thread starter Thread starter Vulpes-Vulpeos
  • Start date Start date
  • Views Views 2,360
  • Replies Replies 19
  • Likes Likes 7

Vulpes-Vulpeos

Well-Known Member
Member
Joined
Feb 1, 2018
Messages
205
Solutions
1
Reaction score
225
Trophies
2
XP
3,349
Country
Ukraine
I became curious about how games are translated for the Game Boy, so I did a nearly complete English translation for Loppi Puzzle Magazine - Kangaeru Puzzle Soukangou Issues.
  • I really liked how the controls were implemented in the game. The musical accompaniment, however, is simply awful.
  • The abbreviations and lack of articles in the puzzle descriptions are due to technical limitations and a reluctance to use a monospace font.
  • I can't translate the names of the picross puzzles because I don't have the skills or knowledge. You need to dig into the assembly code for that, as game generates tiles for the names on the fly.
  • In the slitherlink and nonogram puzzles, the pencil icon is not replaced during the game. It is replaced in the rom file itself, but the game stubbornly pulls the version with the hieroglyph from somewhere.
  • A patcher in the form of a bash script is a long-running joke :)
  • I wrote simple TUI tile editor for linux with copy/paste: github
  • Fun fact: In continue menu the game is named Puzzle Paradise.
  • 5x5 nonograms are the same in all 3 issues + some of them are repeated across the issues.
Rom name: Loppi Puzzle Magazine - Kangaeru Puzzle Soukangou (Japan) (Rev A) (NP,SGB Enhanced).gbc
MD5: e77282a547ca0586cf396ccac3262f84
Rom name: Loppi Puzzle Magazine - Kangaeru Puzzle Dai-2-Gou (J) (V1.1) (GB) (NP) [!].gbc
MD5: 078c1192e19c1332171d088dcb891293
Rom name: Loppi Puzzle Magazine - Kangaeru Puzzle Dai-3-Gou (J) (V1.1) (GB) (NP) [!].gbc
MD5: 4cf4a9af727673fa31cfe9d991428b6a

UPD: added .ips patch.
UPD2: All three issues of Thinking puzzles are now translated.

In save file best times are stored at:
  • 0x2050 - sudoku. 16 total.
  • 0x20a0 - slitherlink. 32 total.
  • 0x2130 - nonograms. 32 total.
Each entry is 2 bytes: MM:SS. Change to something other then 64.

Puzzles are stored at 0x1c558. Each puzzle row is 2 bytes. Ex.:

Code:
20 00 -> 0010000000000000
70 00 -> 0111000000000000
f8 00 -> 1111100000000000
20 00 -> 0010000000000000
60 00 -> 0110000000000000

Puzzles are stored at 0x28a97 (current level at 0xa200 in RAM). First byte is size of the puzzle: 04 -> 4x4, 08 -> 8x8 etc. Then goes puzzle data.
Each byte corresponds to top and left line of the cell only, that's why puzzle data has 5x5, 9x9 etc. grid in it.
0 -> 0a or 8a
1 -> 1#/9#
2 -> 2#/a#
3 -> 3#/b#
x -> 4#/c#
# can be "A" if empty, "5"-> top and left, "6" -> only left, "9" -> only top.
Currently, I do not understand logic behind usage of number/letter for same type of cell.

Puzzles are stored at 0x110d2. Format is pretty obvious.
It's a shame you can't get solution directly from the puzle data :)
 

Attachments

  • puzzle_magazine_translation_screenshots.jpeg
    puzzle_magazine_translation_screenshots.jpeg
    361.7 KB · Views: 42
  • bash_patchers.zip
    bash_patchers.zip
    46 KB · Views: 15
  • ips_patchers.zip
    ips_patchers.zip
    22.8 KB · Views: 18
Last edited by Vulpes-Vulpeos,
Anyone wiling to help me translate nonogram puzzles names?
Strings offset table is located inside rom file at 0x1bb30:
Code:
70 7b 73 7b 78 7b 7d 7b 81 7b 87 7b 8a 7b 90 7b 93 7b 99 7b 9d 7b a3 7b a7 7b aa 7b ae 7b b9 7b bc 7b c2 7b c7 7b cd 7b d1 7b d6 7b dc 7b e2 7b e8 7b ed 7b f3 7b fb 7b 03 7c 08 7c 0b 7c 11 7c
Table with encoded strings is located inside at 0x1bb70:
Code:
15 1a ff 15 2e 31 1b ff 6d 0b 5c 63 ff 14 29 15 ff 2e 3d 2d 0a 12 ff 51 66 ff 12 2f 15 0a 31 ff 77 5c ff 1c 1c 0a 36 3d ff 29 0a 36 ff 10 1a 15 0a 14 ff 56 68 59 ff 55 65 ff 53 6a 0a ff 50 71 6b 63 28 6c 78 71 81 63 ff 31 3d ff 2b 1b 0a 1a 3d ff 77 6d 0a 7d ff 1b 3f 37 18 3d ff 33 15 3d ff 5a 51 59 7a ff 20 17 14 3d 16 ff 1c 32 12 23 37 ff 14 3d 24 28 19 ff 31 1f 0a 2e ff 33 41 19 1a 3d ff 5b 80 6c 0a 78 55 0c ff 2b 12 1b 3e 19 0a 33 ff 2b 3d 1c 11 ff 5a 78 ff 56 7d 56 0a 80 ff 5f 61 68 54 63 5b 59 0a ff
After it goes this (stroke data?) at 0x1bc1a (06:c71a):
Code:
3e ff 21 c9 a0 e5 06 07 22 05 20 fc 01 90 63 fa c6 a0 6f 26 00 29 09 2a 66 6f 2a ea c7 a0 2a 4f fa c7 a0 47 16 ff 2a a7 c4 7e 7c 05 28 2d 2a a7 c4 81 7c 05 28 25 2a a7 c4 84 7c 05 28 1d 2a a7 c4 87 7c 05 28 15 2a a7 c4 8a 7c 05 28 0d 2a a7 c4 8d 7c 05 28 05 2a a7 c4 90 7c 7a d1 12 0d c8 13 d5 18 bc cb ba c9 cb b2 c9 cb aa c9 cb a2 c9 cb 9a c9 cb 92 c9 cb 8a c9 fa 00 a0 fe 02 c0 fa c5 a0 a7 c8 3d 21 e0 a0 85 6f 7e fe ff 20 08 fa c5 a0 3d ea c5 a0 c9
The code (drawing glyphs?) is located at 0x1bcb1 (06:7cb1):
Code:
ea c6 a0 cd 1a 7c 01 01 01 11 e5 98 fa c5 a0 83 5f cd c6 06 fa c5 a0 c6 84 22 cd e6 06 01 01 0d 11 43 88 fa c5 a0 cb 37 83 5f cd c6 06 11 c9 a0 1a 13 22 af 22 1a 13 22 af 22 1a 13 22 af 22 1a 13 22 af 22 1a 13 22 af 22 1a 13 22 af 22 1a 22 cd e6 06 c9
There also is something at 0x1bd05 (06:7d05):
Code:
fa 03 a0 87 4f 06 00 21 30 7b 09 2a 66 6f 11 e0 a0 2a 12 13 fe ff 20 f9 c9
After it goes free space filled with "GAME STUDIO INC." repeated text at 0x1bd1e till 0x1bfff:
Code:
43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e 47 41 4d 45 20 53 54 55 44 49 4f 20 49 4e 43 2e...

Game stores generated tiles in VRAM starting at 0x8850 till 0x88f0. Also currently generated tile number is stored in c104 and tile itself can be seen at c109-c116.

Glyphs:
- 01-09 - numbers
- 10-41 - hieroglyphs
- 42-4f - empty
- 50-82 - hieroglyphs
- >82 - renderer goes crazy

ChatGPT can't help here, it suggested me to hijack 06:c71a function, but can't produce working solution.
 
  • Like
Reactions: hippy dave
UPDATE:
I found stroke glyph/tile table: 0x1a390
Code:
96 64 c9 64 ee 64 21 65 54 65 87 65 ba 65 ed 65 20 66 53 66 b9 66 cb 66 d6 66 86 66 86 66 86 66 f4 66 27 67 5a 67 8d 67 c0 67 f3 67 26 68 59 68 85 68 b8 68 eb 68 1e 69 51 69 84 69 b7 69 ea 69 1d 6a 50 6a 83 6a b6 6a e9 6a 1c 6b 4f 6b 82 6b b5 6b e8 6b 1b 6c 4e 6c 81 6c b4 6c e7 6c 1a 6d 4d 6d 80 6d b3 6d e6 6d 19 6e 4c 6e 7f 6e b2 6e e5 6e 18 6f 4b 6f 7e 6f b1 6f e4 6f 17 70 43 70 6f 70 9b 70 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 86 66 c7 70 fa 70 2d 71 60 71 93 71 c6 71 f9 71 2c 72 5f 72 92 72 c5 72 f8 72 2b 73 5e 73 91 73 c4 73 f7 73 2a 74 5d 74 90 74 c3 74 f6 74 29 75 5c 75 8f 75 c2 75 f5 75 28 76 5b 76 8e 76 c1 76 f4 76 27 77 5a 77 8d 77 c0 77 f3 77 26 78 59 78 8c 78 bf 78 f2 78 25 79 58 79 8b 79 be 79 f1 79 24 7a 50 7a 7c 7a a8 7a

And stroke tile data starts at 0x1a496 till 0x1bad3:
Code:
Number zero:
07 07 00 00 03 03 03 00 00 00 03 00 00 03 03 00 03 03 00 00 00 03 03 03 03 00 00 00 03 03 03 03 00 00 00 03 03 00 03 03 00 00 03 00 00 00 03 03 03 00 00
Number one:
05 07 00 00 00 03 03 00 00 03 03 03 00 00 00 03 03 00 00 00 03 03 00 00 00 03 03 00 00 00 03 03 00 00 00 03 03
07 07 00 00 03 03 03 03 00 00 03 00 00 00 03 03 00 00 00 00 00 03 03 00 00 03 03 03 03 00 00 03 03 03 00 00 00 00 03 03 00 00 00 00 00 03 03 03 03 03 00
07 07 00 03 03 03 03 03 03 00 00 00 00 03 03 00 00 00 00 03 03 00 00 00 00 03 03 03 03 00 00 00 00 00 00 03 03 00 03 00 00 00 03 03 00 00 03 03 03 03 00
07 07 00 00 00 00 03 03 00 00 00 00 03 03 03 00 00 00 03 00 03 03 00 00 03 00 00 03 03 00 00 03 00 00 03 03 00 00 03 03 03 03 03 03 00 00 00 00 03 03 00
07 07 00 03 03 03 03 03 03 00 03 00 00 00 00 00 00 03 03 03 03 03 00 00 00 00 00 00 03 03 00 00 00 00 00 03 03 00 03 00 00 00 03 03 00 00 03 03 03 03 00
07 07 00 00 00 03 03 03 00 00 00 03 03 00 00 00 00 03 03 03 03 03 00 00 03 03 00 00 03 03 00 03 03 00 00 03 03 00 03 03 00 00 03 03 00 00 03 03 03 03 00
07 07 00 03 03 03 03 03 03 00 03 00 00 00 00 03 00 00 00 00 00 03 00 00 00 00 00 03 03 00 00 00 00 00 03 00 00 00 00 00 03 03 00 00 00 00 00 03 03 00 00

Stroke Tile format: total cols, rows in glyph. Then 00 - empty pixel, 03 - filled pixel.
So I'll be able to modify this to draw latin chars.

Also the function which uses this table is 06:7C1A
Code:
06:7C1A 3E FF LD A, $FF
06:7C10 21 C9 A0 LD HL, $AOC9
06:7C1F E5 PUSH HL
06:7C20 06 07 LD B, $07
06:7C22 22 LD (HL+), A
06:7C23 05  DEC B
06:7C24 20 FC JR NZ, $7C22 [4-]
06:7C26 01 90 63 LD BC, $6390
06:7C29 FA C6 A0 LD A, ($AOC6)
06:7C2C 6F LD L, A
06:7C2D 26 00 LD H, $00
06:7C2F 29 ADD HL, HL
06:7C30 09 ADD HL, BC
06:7C31 2A LD A, (HL+)
06:7C32 66 LD H, (HL)
06:7C33 6F LD L.A
06:7C34 2A LD A, (HL+)
06:7C35 EA C7 A0 LD ($AOC7), A
06:7C38 2A LD A, (HL+)
06:7039 4F LD C, A
06:7C3A FA C7 A0 LD A, ($AOC7)
06:7C3D 47 LD B, A
06:7C3E 16 FF LD D, SFF
06:7C40 2A LD A, (HL+)
06:7C41 A7 AND A
06:7C42 C4 7E 7C CALL NZ, $7C7E
06:7C45 05 DEC B
06:7C46 28 2D JR 2, $7C75 [+45]
06:7C48 2A LD A, (HL+)
06:7C49 A7 AND A
06:7C4A C4 81 7C CALL NZ, $7C81
06:7C4D 05 DEC B
06:7C4E 28 25 JR Z, $7C75 [+37]
06:7C50 2A LD A, (HL+)
06:7C51 A7 AND A
06:7C52 C4 84 7C CALL NZ, $7C84
06:7C55 05 DEC B
06:7C56 28 1D JR Z, $7C75 [+29]
06:7C58 2A LD A, (HL+)
06:7C58 2A LD A, (HL+)
06:7C59 A7 AND A
06:7C5A C4 87 7C CALL NZ, $7C87
06:7C5D 05 DEC B
06:7C5E 28 15 JR Z, $7C75 [+21]
06:7C60 LD A, (HL+)
06:7C61 A7 AND A
06:7C62 C4 BA 7C CALL NZ, $7CBA
06:7C65 05 DEC B
06:7C66 28 0D JR Z, $7C75 [13+]
06:7C68 2A LD A, (HL+)
06:7C69 A7 AND A
06:7C6A C4 8D 70 CALL NZ, $7CBD
06:7C6D 05 DEC B
06:7C6E 28 05 JR Z, $7C75 [+5]
06:7C70 2A LD A, (HL+)
06:7C71 A7 AND A
06:7C72 C4 90 7C CALL NZ, $7C90
06:7C75 7A LD A, D
06:7C76 D1 POP DE
06 7C77 12 LD (DE), A
06:7C78 0D DEC C
06:7C79 C8 RET Z
 
Last edited by Vulpes-Vulpeos,
  • Love
Reactions: hippy dave
Translation is now 100% :toot:
I managed to translate nonogram puzzle titles and replace ingame pencil icon for slitherlink and nonogram.
 

Attachments

  • 5x5_1.png
    5x5_1.png
    3.4 KB · Views: 32
  • 5x5_1_pencil.png
    5x5_1_pencil.png
    2.1 KB · Views: 31
  • Love
Reactions: hippy dave
Just asking, why is this thread in the GBA section when GB and GBC related stuff belongs to the Oldies/Retro section?
 
Just asking, why is this thread in the GBA section when GB and GBC related stuff belongs to the Oldies/Retro section?
Because I never went outside of PC, Console & Handheld Discussions section and didn’t know others existed XD
 
  • Like
Reactions: SDA
@Vulpes-Vulpeos I forgot to tell you, there is also the Downloads section on the site where you can add the translation patch there for everyone to download. That way, you'll make the patch more accessible without the risk that this thread gets buried by other threads over time.

The recommended path is: Oldies/Retro > GB & GBC > Game Fixes & Patches.
 
Poked around in the ROM of Hirameku version. Codeword and crossword puzzles are in japanese, so their translation is impossible due to word length. The only playable puzzle for english speaker is spot the difference.
I do not know if there is any sense even in menu translation for this series.

Loopy Puzzle Magazine - Insight Puzzles - Issue 1
offset table: 0x0c0aa
puzzle data: 0xc0ea
Data format: field data (01 - cell will show 1, 81 - cell will show letter from the start (0xXX + 0x80), same for other numbers ), indexes of chars in field (first one corresponds to 1 in the puzzle field, second to 2 etc.)
The keyboard indexes goes from 0x40 till 0x8A. From top to bottom, from left to right.

puzzle data offset table: 0x2C0A6
questions mapping offset table: 0x2c0d6
questions data offset table: 0x340000
questions data: 0x344BC (2 bytes for 1 glyph)
glyphs renderer supports latin chars. They are at the begging of the table: 0-9, a-z, A-Z.

puzzle data offset table: 0x2b1c8
puzzle data: 0x2b1f8
Data format: 1 byte - number of "sprites" in window, 1 byte - ???, 1 byte - maximum selection, groups of vertical and horizontal offsets for each "sprite" ( 2 "sprites" means 2 2 bytes groups), 1 byte - number of different "sprites" to find, groups of 1 byte indexes of sprites that are different, groups of 4 bytes with animation frame indexes for each "sprite" on the screen, groups of 4 bytes - usage unknown, 1 byte - number of starts, 1byte - null terminator?.
 

Attachments

  • IMG_6429.jpg
    IMG_6429.jpg
    1.2 MB · Views: 22
  • Like
Reactions: hippy dave
Incredible, congrats!

I already cleared all the nonograms, but I'll play through them again to see the names B-)
Finally got around to updating to the newer patch, so I can play the nonograms again. Helpfully, it turns out that the menu option to delete your save data lets you choose which of the three game types to delete for, so I was able to only clear my nonogram progress without losing the others.

Don't want to complain or sound ungrateful, but you probably want to know, the text layout is a bit messed up in that menu, once you've chosen to delete save data and you get to choose which game type to delete it for. Doesn't make it unusable tho.
 
  • Like
Reactions: Vulpes-Vulpeos
the text layout is a bit messed up in that menu, once you've chosen to delete save data and you get to choose which game type to delete it for.
I thought this menu just deletes all save data, so I never properly checked it. It should be an easy fix, so I’ll update patches soon.
Post automatically merged:

Updated the patches. The save deletion menu should now be fixed.
 
Last edited by Vulpes-Vulpeos,
  • Love
Reactions: hippy dave

Site & Scene News

Popular threads in this forum