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:
message board text (black or white in color, 12x12 pixel per character, 8bit grayscale bmp)
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 |
font engine code, text positioning and alignment code. |
add "#if LOCAL== |
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
|
add "#if LOCAL== |
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
|
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
|
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 |
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\*.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, |
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 |
rank\normal\rank_lv_zh.bmp |
|||
rank\normal\rank_operation_b.bmp |
"EASY |
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
|
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
|
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\*.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\tutorial_data.zzz, CHINA\segsize.h |
tool\bmp2tex, tool\comp, tool\compress, tool\nmsym, tool\segsize |
|
soft keyboard entry |
|||||
credential list |