Dr. Mario64 Localization Worksheet

Tech Work:

Tools development:

  • GB encoded string table to bmp conversion

  • Lightwave3D scene files (.lws) to .ani files conversion

  • Lightwave3D model files (.lwo) to .nDL files conversion

  • .bmp to .gbi file conversion

  • soft keyboard kit

Game code modification:

  • message text rendering change (space, indexing of texturemap)

  • controller animation sequence change (due to button location change)

  • rendering code changes related to 3D model/animation change (if any)

  • soft keyboard rendering

Artist Work:

There are basically two types of fonts used in this game:

  1. message board text (black or white in color, 12x12 pixel per character, 8bit grayscale bmp)

  2. text or menus and buttons (colored texts with black outlines)

We can use the standard free GB font for 1, and use another free font (called "WenDing CaiYun") for 2. We can ask the translator to translate using these two fonts, say in a word document. The texture maker can then take the word document and produce texture maps (ideal if the texture maker could be Chinese speaking too). We probably don't need a font developer for this game.

Resources:

  • translator: translates string tables and texture maps (bmp) with texts

  • texture maker: produces texture maps (bmp) from translator's output document

  • LightWave3D modeler

Detailed task breakdown:

Directory Path

Reference File

Corresponding Scene Description

Task Description

Output File

Tools Required

source code: .\

char_anime.c, dm_game_main.c, dm_manual_main.c, dm_title_main.c, local.h, main.c, main_menu.c, main_story.c, record.c, font.c

font engine code, text positioning and alignment code.

add "#if LOCAL==CHINA" section to these files, make.

char_anime.o, dm_game_main.o, dm_manual_main.o, dm_title_main.o, main.o, main_menu.o, main_story.o, record.o, font.o

makefile

string tables: .\

dm_manual_am.mes, dm_title_am.mes, main_menu_am.mes, main_story_am.mes, record.mes, tech_am.mes

string tables used in the game.

translate and encode in GB.

dm_manual_zh.mes, dm_title_zh.mes, main_menu_zh.mes, main_story_zh.mes, record.mes, tech_zh.mes

GB text input tool.

texture\character

_.bat, anime_a.c

bitmap of animation characters, the difference between AMERICA and JAPAN version is the color LUT used in "anime_a", we can make CHINA version identical to either one.

add "#if LOCAL==CHINA" section to _.bat and anime_a.c (converting *.bmp to C data structure in *.txt), make it identical to "#if LOCAL==AMERICA", make.

CHINA\*.zzz, CHINA\segsize.h

tool\bmp2tex, tool\comp, tool\compress, tool\nmsym, tool\segsize

texture\font

font_e.bmp, font_e2.bmp

bitmap of alphabet (12x12 pixels per letter)

generate bitmap of all characters used in the string table (12x12 pixels per character).

font_c.bmp, font_c2.bmp

Chinese font, tool\gb2bmp

char_code.tbl

alphabet encoding to bitmap index mapping table

generate mapping table between GB encoding and the bitmap index.

char_code_zh.tbl

tool\gb2bmp

texture\game

al\color\dm_info_01_am.bmp, al\alpha\dm_info_01_alpha_am.bmp 

"PRESS ANY BUTTON"

translate and generate new bitmaps.

al\color\dm_info_01_zh.bmp, al\alpha\dm_info_01_alpha_zh.bmp

Photoshop

al\color\dm_logo_02_am.bmp, al\alpha\dm_logo_02_alpha_am.bmp

"DR. MARIO64"

al\color\dm_logo_02_zh.bmp, al\alpha\dm_logo_02_alpha_zh.bmp

al\color\dm_title_01.bmp,   al\alpha\dm_title_01_alpha.bmp

"DEMO PLAY"

al\color\dm_title_01_zh.bmp,   al\alpha\dm_title_01_alpha_zh.bmp

al\color\dm_title_02_am.bmp,   al\alpha\dm_title_02_alpha_am.bmp

"PRESS ANY BUTTON"

al\color\dm_title_02_zh.bmp,   al\alpha\dm_title_02_alpha_zh.bmp

ls\color\endless_speed.bmp, ls\alpha\endless_speed_alpha.bmp

"LOW MED HI"

translate and generate new bitmaps.

ls\color\endless_speed_zh.bmp, ls\alpha\endless_speed_alpha_zh.bmp

ls\color\l_panel_endless.bmp

"TOP SCORE TIME"

ls\color\l_panel_endless_zh.bmp

ls\color\l_panel_taikyu.bmp

"TOP SCORE RISE"

ls\color\l_panel_taikyu_zh.bmp

ls\color\l_panel_timeattack.bmp

"TOP SCORE LIMIT"

ls\color\l_panel_timeattack_zh.bmp

ls\color\newmode_level.bmp, ls\alpha\newmode_level_alpha.bmp

"EASY NORMAL HARD"

ls\color\newmode_level_zh.bmp, ls\alpha\newmode_level_alpha_zh.bmp

ls\color\r_panel_level.bmp

"LEVEL"

ls\color\r_panel_level_zh.bmp

ls\color\r_panel_speed.bmp

"SPEED"

ls\color\r_panel_speed_zh.bmp

ls\color\r_panel_virus.bmp

"VIRUSES"

ls\color\r_panel_virus_zh.bmp

ls\color\r_panel_viruslv.bmp

"VIRUS LV"

ls\color\r_panel_viruslv_zh.bmp

p1\color\totalscore_panel_am.bmp

"Remaining Time, Number of Combos, Viruses Cleared, Total Score"

translate and generate new bitmaps.

p1\color\totalscore_panel_zh.bmp

p2\color\bottom_flash_panel.bmp

"FLASH"

translate and generate new bitmaps.

p2\color\bottom_flash_panel_zh.bmp

p2\color\bottom_point_panel.bmp

"POINTS TIME"

p2\color\bottom_point_panel_zh.bmp

p2\color\bottom_stage_panel.bmp

"STAGE TIME"

p2\color\bottom_stage_panel_zh.bmp

p2\color\bottom_virus_panel_am.bmp

"VIRUSES"

p2\color\bottom_virus_panel_zh.bmp

p2\color\top_gamelv_contents.bmp, p2\alpha\top_gamelv_contents_alpha.bmp

"EASY NORMAL HARD S-HARD"

p2\color\top_gamelv_contents_zh.bmp, p2\alpha\top_gamelv_contents_alpha_zh.bmp

p2\color\top_gamelv_panel.bmp

"Game Lv"

p2\color\top_gamelv_panel_zh.bmp

p2\color\top_ohanasi_panel.bmp

"SCORE GAME_LEVEL"

p2\color\top_ohanasi_panel_zh.bmp

p2\color\top_score_panel_1p.bmp

"SCORE"

p2\color\top_score_panel_1p_zh.bmp

p2\color\top_speed_contents.bmp, p2\alpha\top_speed_contents_alpha.bmp

"HI MED LOW"

p2\color\top_speed_contents_zh.bmp, p2\alpha\top_speed_contents_alpha_zh.bmp

p2\color\top_speed_panel.bmp

"SPEED"

p2\color\top_speed_panel_zh.bmp

p2\color\top_viruslv_panel.bmp

"VIRUSES Lv"

p2\color\top_viruslv_panel_zh.bmp

p4\color\p4_panel_flash.bmp, p4\alpha\p4_panel_flash_alpha.bmp

"FLASH"

translate and generate new bitmaps.

p4\color\p4_panel_flash_zh.bmp, p4\alpha\p4_panel_flash_alpha_zh.bmp

p4\color\p4_panel_virus_am.bmp, p4\alpha\p4_panel_virus_alpha_am.bmp

"VIRUSES"

p4\color\p4_panel_virus_zh.bmp, p4\alpha\p4_panel_virus_alpha_zh.bmp

p4\color\p4_team_a.bmp, p4\alpha\p4_team_a_alpha.bmp

"team A"

p4\color\p4_team_a_zh.bmp, p4\alpha\p4_team_a_alpha_zh.bmp

p4\color\p4_team_b.bmp, p4\alpha\p4_team_b_alpha.bmp

"team B"

p4\color\p4_team_b_zh.bmp, p4\alpha\p4_team_b_alpha_zh.bmp

p4\color\p4_toppanel_story.bmp,

"TIME STAGE"

p4\color\p4_toppanel_story_zh.bmp,

p4\color\practice_am.bmp, p4\alpha\practice_alpha_am.bmp

"Press start to practice"

p4\color\practice_zh.bmp, p4\alpha\practice_alpha_zh.bmp

p4\color\practices_am.bmp, p4\alpha\practices_alpha_am.bmp

"practicing"

p4\color\practices_zh.bmp, p4\alpha\practices_alpha_zh.bmp

p4\color\stock_a.bmp, p4\alpha\stock_alpha.bmp

"STOCK"

p4\color\stock_a_zh.bmp, p4\alpha\stock_alpha_zh.bmp

p4\color\stock_b.bmp

"STOCK"

p4\color\stock_b_zh.bmp

p4\normal2\p4_toppanel_team_1.bmp

"STOCK A, STOCK B"

p4\normal2\p4_toppanel_team_1_zh.bmp

p4\normal2\p4_toppanel_team_2.bmp

"STOCK A, STOCK B"

p4\normal2\p4_toppanel_team_2_zh.bmp

p4\normal2\p4_toppanel_team_3.bmp

"STOCK A, STOCK B"

p4\normal2\p4_toppanel_team_3_zh.bmp

_.bat, game_al.c, game_ls.c, game_p1.c, game_p2.c, game_p4.c

data structures for all bitmaps above

add "#if LOCAL==CHINA" section to _.bat and *.c (converting *.bmp to C data structure in *.txt), make.

CHINA\*.zzz, CHINA\segsize.h

tool\bmp2tex, tool\comp, tool\compress, tool\nmsym, tool\segsize

texture\menu

char\color\comlv.bmp, char\alpha\comlv_alpha.bmp

"EASY, NORMAL, HARD"

translate and generate new bitmaps.

char\color\comlv_zh.bmp, char\alpha\comlv_alpha_zh.bmp

Photoshop

char\normal\m_mario_face_am.bmp

"MARIO"

char\normal\m_mario_face_zh.bmp

char\normal\m_wario_face_am.bmp

"WARIO"

char\normal\m_wario_face_zh.bmp

char\normal2\character_lv_panel_am.bmp

"LEVEL"

char\normal2\character_lv_panel_zh.bmp

char\normal2\character_panel_am.bmp

all characters

char\normal2\character_panel_zh.bmp

char\normal2\hard_comlv.bmp

"HARD S-HARD"

char\normal2\hard_comlv_zh.bmp

common\normal2\choice_a_am.bmp

menu items

translate and generate new bitmaps.

common\normal2\choice_a_zh.bmp

common\normal2\menu_title_am.bmp

menu items

common\normal2\menu_title_zh.bmp

cont\normal2\account_controller_line_b.bmp

controller related bitmaps and text

translate and generate new bitmaps.

cont\normal2\account_controller_line_b_zh.bmp

cont\normal2\account_operation.bmp

cont\normal2\account_operation_zh.bmp

cont\normal2\control_pad_a.bmp

cont\normal2\control_pad_a_zh.bmp

cont\normal2\control_pad_b.bmp

cont\normal2\control_pad_b_zh.bmp

cont\normal2\l_trigger.bmp

cont\normal2\l_trigger_zh.bmp

cont\normal2\r_trigger.bmp

cont\normal2\r_trigger_zh.bmp

level\normal2\endless_illust_music.bmp

music menu

translate and generate new bitmaps.

level\normal2\endless_illust_music_zh.bmp

level\normal2\endless_panel.bmp

level menu

level\normal2\endless_panel_zh.bmp

level\normal2\newmode_panel.bmp

level menu

level\normal2\newmode_panel_zh.bmp

level\normal2\virus_gauge_lv21.bmp

level menu

level\normal2\virus_gauge_lv21_zh.bmp

main\normal2\end_panel_am.bmp

"END"

translate and generate new bitmaps.

main\normal2\end_panel_zh.bmp

main\normal2\guest_panel_am.bmp

"GUEST"

main\normal2\guest_panel_zh.bmp

main\normal2\menu_panel_s_am.bmp

"Sound Archives"

main\normal2\menu_panel_s_zh.bmp

name\color\name_frame_no.bmp, name\alpha\name_frame_no_alpha.bmp

"1P 2P"

translate and generate new bitmaps.

name\color\name_frame_no_zh.bmp, name\alpha\name_frame_no_alpha_zh.bmp

name\normal2\letter_panel_am.bmp

"SPACE DELETE END"

name\normal2\letter_panel_zh.bmp

name\normal2\name_frame_am.bmp

"Enter player name"

name\normal2\name_frame_zh.bmp

p2\normal\p2_newmode_panel.bmp

menu

translate and generate new bitmaps.

p2\normal\p2_newmode_panel_zh.bmp

p2\normal2\p2_battle_panel.bmp

menu

p2\normal2\p2_battle_panel_zh.bmp

p4\normal\p4_newmode_panel.bmp

menu

translate and generate new bitmaps.

p4\normal\p4_newmode_panel_zh.bmp

p4\normal2\new_cursor_gamelv_4p_easy.bmp

"EASY"

p4\normal2\new_cursor_gamelv_4p_easy_zh.bmp

p4\normal2\new_cursor_gamelv_4p_hard.bmp

"HARD"

p4\normal2\new_cursor_gamelv_4p_hard_zh.bmp

p4\normal2\new_cursor_gamelv_4p_normal.bmp

"NORMAL"

p4\normal2\new_cursor_gamelv_4p_normal_zh.bmp

p4\normal2\new_cursor_speed_4p_hi.bmp

"HI"

p4\normal2\new_cursor_speed_4p_hi_zh.bmp

p4\normal2\new_cursor_speed_4p_low.bmp

"LOW"

p4\normal2\new_cursor_speed_4p_low_zh.bmp

p4\normal2\new_cursor_speed_4p_med.bmp

"MED"

p4\normal2\new_cursor_speed_4p_med_zh.bmp

p4\normal2\p4_battle_panel.bmp

menu

p4\normal2\p4_battle_panel_zh.bmp

rank\normal\rank_head_b_am.bmp

"Game Level Speed"

translate and generate new bitmaps.

rank\normal\rank_head_b_zh.bmp

rank\normal\rank_lv.bmp

"EASY NORMAL HARD HI LOW MED"

rank\normal\rank_lv_zh.bmp

rank\normal\rank_operation_b.bmp

"EASY NORMAL HARD HI LOW MED"

rank\normal\rank_operation_b_zh.bmp

rank\normal2\rank_head_a_am.bmp

menu

rank\normal2\rank_head_a_zh.bmp

rank\normal2\rank_operation_a.bmp

"L R"

rank\normal2\rank_operation_a_zh.bmp

rank\normal2\vs.bmp

"vs."

rank\normal2\vs_zh.bmp

setup\color\finger_sub.bmp, setup\alpha\finger_sub.bmp

"1P 2P ..."

translate and generate new bitmaps.

setup\color\finger_sub_zh.bmp, setup\alpha\finger_sub_zh.bmp

setup\color\gamelv_answer.bmp, setup\alpha\gamelv_answer_alpha.bmp

"EASY NORMAL HARD"

setup\color\gamelv_answer_zh.bmp, setup\alpha\gamelv_answer_alpha_zh.bmp

setup\color\gamelv_answer_b.bmp, setup\alpha\gamelv_answer_alpha_b.bmp

"EASY NORMAL HARD S-HARD"

setup\color\gamelv_answer_b_zh.bmp, setup\alpha\gamelv_answer_alpha_b_zh.bmp

setup\color\ok.bmp, setup\alpha\ok_alpha.bmp

"OK"

setup\color\ok_zh.bmp, setup\alpha\ok_alpha_zh.bmp

setup\color\speed_answer_a.bmp, setup\alpha\speed_answer_a_alpha.bmp

"HI LOW MED"

setup\color\speed_answer_a_zh.bmp, setup\alpha\speed_answer_a_alpha_zh.bmp

setup\color\speed_answer_b.bmp, setup\alpha\speed_answer_b_alpha.bmp

"HI LOW MED"

setup\color\speed_answer_b_zh.bmp, setup\alpha\speed_answer_b_alpha_zh.bmp

setup\normal\ohanashi_panel_shared.bmp

"SHARED"

setup\normal\ohanashi_panel_shared_zh.bmp

setup\normal\r_command_am.bmp

"All the same"

setup\normal\r_command_zh.bmp

setup\normal2\new_cursor_gamelv_easy.bmp

"EASY"

setup\normal2\new_cursor_gamelv_easy_zh.bmp

setup\normal2\new_cursor_gamelv_hard.bmp

"HARD"

setup\normal2\new_cursor_gamelv_hard_zh.bmp

setup\normal2\new_cursor_gamelv_normal.bmp

"NORMAL"

setup\normal2\new_cursor_gamelv_normal_zh.bmp

setup\normal2\new_cursor_gamelv_shard.bmp

"S-HARD"

setup\normal2\new_cursor_gamelv_shard_zh.bmp

setup\normal2\new_cursor_music_chill.bmp

"CHILL"

setup\normal2\new_cursor_music_chill_zh.bmp

setup\normal2\new_cursor_music_cube.bmp

"CUBE"

setup\normal2\new_cursor_music_cube_zh.bmp

setup\normal2\new_cursor_music_fever.bmp

"FEVER"

setup\normal2\new_cursor_music_fever_zh.bmp

setup\normal2\new_cursor_music_off.bmp

"OFF"

setup\normal2\new_cursor_music_off_zh.bmp

setup\normal2\new_cursor_music_queue.bmp

"QUEUE"

setup\normal2\new_cursor_music_queue_zh.bmp

setup\normal2\new_cursor_speed_hi.bmp

"HI"

setup\normal2\new_cursor_speed_hi_zh.bmp

setup\normal2\new_cursor_speed_low.bmp

"LOW"

setup\normal2\new_cursor_speed_low_zh.bmp

setup\normal2\new_cursor_speed_med.bmp

"MED"

setup\normal2\new_cursor_speed_med_zh.bmp

setup\normal2\player_panel.bmp

panel

setup\normal2\player_panel_zh.bmp

setup\normal2\r_command.bmp

"All the same"

setup\normal2\r_command_zh.bmp

setup\normal2\setup_sub_panel.bmp

panel

setup\normal2\setup_sub_panel_zh.bmp

story\color\character_answer.bmp, story\alpha\character_answer_alpha.bmp

"MARIO WARIO"

translate and generate new bitmaps.

story\color\character_answer_zh.bmp, story\alpha\character_answer_alpha_zh.bmp

story\normal2\ohanashi_panel.bmp

panel

story\normal2\ohanashi_panel_zh.bmp

_.bat, menu_char.c, menu_common.c, menu_cont.c, menu_cont.h, menu_main.c, menu_main.h, menu_p4.c, menu_rank.c, menu_setup.c, menu_story.c

data structures for all bitmaps above

add "#if LOCAL==CHINA" section to _.bat and *.c (converting *.bmp to C data structure in *.txt), make.

CHINA\*.zzz, CHINA\segsize.h

tool\bmp2tex, tool\comp, tool\compress, tool\nmsym, tool\segsize

texture\story_bmp

etc\*.gbi, etc\*\*\*.bmp, main_story.c::get_gbi_stat(), game_etc.c, lws.c::lws_anim()

pause menu, "win/lose/pause/game over" animation sequence

translate bmp into Chinese characters, convert *.bmp into *.gbi, make

etc\etc.zzz

tool to convert bitmaps into *.gbi files, makefile for etc.zzz

endless\model\*congratulation.nDL, endless\texture\*congratulation.txt, endless\*.lws, endless\*.ani, endless\coffee1.c, main_story.c::draw_coffee_break(), lws.c::lws_anim()

"congratulations", "easy/med/hard" animation sequence

change "congratulations" model and texture to Chinese characters, convert the model to *.nDL format and texture to *.txt format, make

endless\coffee01.zzz

LightWave, tool to generate *.nDL files from models,  tool to convert *.lws to *.ani files

story\model\title.nDL, story\model\title_sdw.nDL, story\texture\title*.txt, story\title_all.lws, story\title_all.ani, main_story.c::demo_title(), lws.c::lws_anim()

Dr.Mario64 title animation sequence

change "Dr.Mario64" model and texture to Chinese characters, convert the model to *.nDL format and texture to *.txt format, make

story\story.zzz

LightWave, tool to generate *.nDL files from models,  tool to convert *.lws to *.ani files

title_bmp\title_bmp.*, title_bmp\ninlogo.*, title_bmp\press_col.*, title_bmp\press_i.*,  main_story.c::get_gbi_stat() main_story.c::demo_title(), lws.c::lws_anim()

Nintendo logo, "Press any key" animation sequence

translate bmp into Chinese characters, convert *.bmp to *.gbi, make

title_bmp\title_bmp.zzz

tool to convert bitmaps into *.gbi files, makefile for title_bmp.zzz

texture\tutorial

tutorial\color\a_button_am.bmp, tutorial\alpha\a_botton_am_alpha.bmp

"A Button"

translate and generate new bitmaps.

tutorial\color\a_button_zh.bmp, tutorial\alpha\a_botton_zh_alpha.bmp

Photoshop

tutorial\color\b_button_am.bmp, tutorial\alpha\b_botton_am_alpha.bmp

"B Button"

tutorial\color\b_button_zh.bmp, tutorial\alpha\b_botton_zh_alpha.bmp

_.bat, tutorial_data.c

data structures for bitmaps above

add "#if LOCAL==CHINA" section to _.bat and *.c (converting *.bmp to C data structure in *.txt), make.

CHINA\tutorial_data.zzz, CHINA\segsize.h

tool\bmp2tex, tool\comp, tool\compress, tool\nmsym, tool\segsize

soft keyboard entry           
credential list