the cutting room mirror

Development Leftovers

This article has a talk page!This article has a talk page!
view on tcrf.net

This is a sub-page of Sonic Colors: Ultimate.

Somehow, Blind Squirrel accidentally left in a ton of development assets from both the original game and Ultimate, which were discovered mere hours after release. They were eventually removed in v1.04.

Sound Headers and Metadata#

The Nintendo Switch version left all source header and metadata files for each compiled CriWare sound file in sound\all\SWITCH in the SwitchCriPak file.

Download Sonic Colors: Ultimate (Nintendo Switch) source CriWare sound files

File: SonicColorsUltimate_NX_SoundSRCFiles.zip (140 KB) (info)

Perforce Cache Log#

The Nintendo Switch version left a cache log from an internal Perforce depot titled cached_perforce.txt in the root of the archived game content, it's over 2MB big!

Download Sonic Colors: Ultimate (Nintendo Switch) Perforce Cache Log

File: SonicColorsUltimate_P4CacheLog.zip (140 KB) (info)

Godot Project File#

To do:
Document exposed Godot data.

The game's archives contain project data for Godot, allowing you to import game data into the editor and view stages.

Sonic2010 Directory#

An incomplete directory titled Sonic2010 is present, with a lot of development content and source files from the original Wii title.

_sonic2010.ini.lua#

-- 行頭にハイフンが2つあるのは、コメントです。

configurations = {
    -- システム
    system = {
        -- 起動設定
        ini_state           = "menu",
        stage               = "stg110",
        event               = "ev000",

--      lang                = "j",      -- 本体言語         "j","e","g","f","s","i", "n" n=オランダ語(ストラップとかHBMとかチェック用)
--      region              = "jp",     -- 本体リージョン  "jp","us","eu"

--      opt_lang            = "j",      -- オプション言語  "j","e","g","f","s","i",

--      cri_load_log        = true,     -- trueの場合、CRI用、ロード最適化ログを出力します。
--      event_cp_dir        = "%SONIC2010_ROOT%/Sonic2010/artworks/event/capture",  -- イベント用キャプチャーディレクトリの指定

        -- 描画設定
--      debugdraw_enable    = false,    -- false の場合、デバッグ描画を切ります。
--      shooting_mode       = true,     -- true の場合、画面撮影用の動作に切り替わります.

        -- ペリフェラル設定
        freecamera_port     = 1,        -- フリーカメラのポート番号
--      device_old_check    = true,        -- 従来のWiiコン優先形式

        -- リソース関連設定
--      reload_pathdata     = true,     -- true の場合、パスデータを mcs 経由でロードします。
--      read_setdata_xml    = false,    -- false の場合、セットデータを強制的にバイナリモードでロードします。
--      enable_allPhantom   = true,     -- true の場合、全ステージで全ファントムをロードします。
--      reload_wm_am_config = true,     -- true の場合、ワールドマップ、エリアマップの設定ファイルを mcs 経由でロードします。

--      UseMii          = true,     -- trueの場合、マルチプレイでMiiを使用します。
--      UseSuperSonic       = true,     -- trueの場合、スーパーソニックを使用します。

    },
}

dvd_builder_image Directory#

The directory has a few scripts, while the other sonic2010 directory contains uncompressed mostly identical assets from the final game.

copy_largedata.bat#

A script to copy cutscene movies.

@if not exist ..\dvd\movie md ..\dvd\movie

xcopy /d /y \\muse\Project\Sonic_x2\Sonic2010\work\dvd\movie\*.sfd ..\dvd\movie


@if exist .\sonic2010\movie\*.sfd del .\sonic2010\movie\*.sfd
@if exist ..\dvd\movie\opening.sfd del ..\dvd\movie\opening.sfd

pause

cri_load_log.txt#


#CRIFS,77,,Begin,START_UP
#CRIFS,85,0,Load,strap/strap_j.arc,0,50056,sonic2010_0.cpk,837058560,0
#CRIFS,185,0,Load,hbm/hbm_j.arc,0,463796,sonic2010_0.cpk,27785216,0
#CRIFS,198,0,Load,font.brfnt,0,496592,sonic2010_0.cpk,15863808,0
#CRIFS,544,0,Load,sonic2010/RVL_DefaultDO.sel,0,7456,Standard,0,0
#CRIFS,558,0,Load,hbm_module.rso,0,132872,sonic2010_0.cpk,16361472,0
#CRIFS,571,0,Load,save_banner.arc,0,26600,sonic2010_0.cpk,24279040,0
#CRIFS,585,0,Load,actstgmission.lua,0,6076,sonic2010_0.cpk,981673984,0
#CRIFS,599,0,Load,actstgdata.lua,0,3512,sonic2010_0.cpk,75776,0
#CRIFS,612,0,Load,sound/curve_table.sndc.orc,0,284,sonic2010_0.cpk,983186048,0
#CRIFS,626,0,Load,sound/cue_name_list.sndl.orc,0,788,sonic2010_0.cpk,32509952,0
#CRIFS,639,0,Load,sound/bgm.strm.csb,0,83408,sonic2010_0.cpk,32425984,0
#CRIFS,653,0,Load,sound/se_voice_eggman_announce.strm.csb,0,6864,sonic2010_0.cpk,49022976,0
#CRIFS,667,0,Load,sound/se_voice_system.csb,0,468544,sonic2010_0.cpk,49672192,0
#CRIFS,680,0,Load,sound/se_system_mainmenu.csb,0,73728,sonic2010_0.cpk,48613376,0
#CRIFS,694,0,Load,sound/se_system_multi.csb,0,115104,sonic2010_0.cpk,48687104,0
#CRIFS,710,0,Load,warning.arc,0,20428,sonic2010_0.cpk,903059744,0
#CRIFS,724,0,Load,ui/ui_universal.arc,0,20796,sonic2010_0.cpk,968277952,0
#CRIFS,739,0,Load,event_info.lua,0,2024,sonic2010_0.cpk,903057408,0
#CRIFS,755,0,Load,testmission.lua,0,2856,sonic2010_0.cpk,25917440,0
#CRIFS,771,0,Load,debug.arc,0,61,sonic2010_0.cpk,11300864,0
#CRIFS,1727,0,Load,ui/ui_resident_j.arc,0,176636,sonic2010_0.cpk,918825632,0
#CRIFS,1872,,End,START_UP

#CRIFS,77,,Begin,START_UP
#CRIFS,87,0,Load,strap/strap_j.arc,0,50056,sonic2010_0.cpk,837058560,0
#CRIFS,167,0,Load,hbm/hbm_j.arc,0,463796,sonic2010_0.cpk,27785216,0
#CRIFS,180,0,Load,font.brfnt,0,496592,sonic2010_0.cpk,15863808,0
#CRIFS,527,0,Load,sonic2010/RVL_DefaultDO.sel,0,7456,Standard,0,0
#CRIFS,540,0,Load,hbm_module.rso,0,132872,sonic2010_0.cpk,16361472,0
#CRIFS,556,0,Load,save_banner.arc,0,26600,sonic2010_0.cpk,24279040,0
#CRIFS,569,0,Load,actstgmission.lua,0,6076,sonic2010_0.cpk,981673984,0
#CRIFS,583,0,Load,actstgdata.lua,0,3512,sonic2010_0.cpk,75776,0
#CRIFS,597,0,Load,sound/curve_table.sndc.orc,0,284,sonic2010_0.cpk,983186048,0
#CRIFS,610,0,Load,sound/cue_name_list.sndl.orc,0,788,sonic2010_0.cpk,32509952,0
#CRIFS,624,0,Load,sound/bgm.strm.csb,0,83408,sonic2010_0.cpk,32425984,0
#CRIFS,638,0,Load,sound/se_voice_eggman_announce.strm.csb,0,6864,sonic2010_0.cpk,49022976,0
#CRIFS,654,0,Load,sound/se_voice_system.csb,0,468544,sonic2010_0.cpk,49672192,0
#CRIFS,669,0,Load,sound/se_system_mainmenu.csb,0,73728,sonic2010_0.cpk,48613376,0
#CRIFS,683,0,Load,sound/se_system_multi.csb,0,115104,sonic2010_0.cpk,48687104,0
#CRIFS,698,0,Load,warning.arc,0,20428,sonic2010_0.cpk,903059744,0
#CRIFS,712,0,Load,ui/ui_universal.arc,0,20796,sonic2010_0.cpk,968277952,0
#CRIFS,726,0,Load,event_info.lua,0,2024,sonic2010_0.cpk,903057408,0
#CRIFS,740,0,Load,testmission.lua,0,2856,sonic2010_0.cpk,25917440,0
#CRIFS,755,0,Load,debug.arc,0,61,sonic2010_0.cpk,11300864,0
#CRIFS,1795,0,Load,ui/ui_resident_j.arc,0,176636,sonic2010_0.cpk,918825632,0
#CRIFS,1940,,End,START_UP

#CRIFS,77,,Begin,START_UP
#CRIFS,86,0,Load,strap/strap_j.arc,0,50056,sonic2010_0.cpk,837058560,0
#CRIFS,184,0,Load,hbm/hbm_j.arc,0,463796,sonic2010_0.cpk,27785216,0
#CRIFS,198,0,Load,font.brfnt,0,496592,sonic2010_0.cpk,15863808,0
#CRIFS,541,0,Load,sonic2010/RVL_DefaultDO.sel,0,7456,Standard,0,0
#CRIFS,555,0,Load,hbm_module.rso,0,132872,sonic2010_0.cpk,16361472,0
#CRIFS,569,0,Load,save_banner.arc,0,26600,sonic2010_0.cpk,24279040,0
#CRIFS,582,0,Load,actstgmission.lua,0,6076,sonic2010_0.cpk,981673984,0
#CRIFS,596,0,Load,actstgdata.lua,0,3512,sonic2010_0.cpk,75776,0
#CRIFS,610,0,Load,sound/curve_table.sndc.orc,0,284,sonic2010_0.cpk,983186048,0
#CRIFS,624,0,Load,sound/cue_name_list.sndl.orc,0,788,sonic2010_0.cpk,32509952,0
#CRIFS,639,0,Load,sound/bgm.strm.csb,0,83408,sonic2010_0.cpk,32425984,0
#CRIFS,653,0,Load,sound/se_voice_eggman_announce.strm.csb,0,6864,sonic2010_0.cpk,49022976,0
#CRIFS,669,0,Load,sound/se_voice_system.csb,0,468544,sonic2010_0.cpk,49672192,0
#CRIFS,682,0,Load,sound/se_system_mainmenu.csb,0,73728,sonic2010_0.cpk,48613376,0
#CRIFS,695,0,Load,sound/se_system_multi.csb,0,115104,sonic2010_0.cpk,48687104,0
#CRIFS,710,0,Load,warning.arc,0,20428,sonic2010_0.cpk,903059744,0
#CRIFS,725,0,Load,ui/ui_universal.arc,0,20796,sonic2010_0.cpk,968277952,0
#CRIFS,739,0,Load,event_info.lua,0,2024,sonic2010_0.cpk,903057408,0
#CRIFS,752,0,Load,testmission.lua,0,2856,sonic2010_0.cpk,25917440,0
#CRIFS,766,0,Load,debug.arc,0,61,sonic2010_0.cpk,11300864,0
#CRIFS,1878,0,Load,ui/ui_resident_j.arc,0,176636,sonic2010_0.cpk,918825632,0
#CRIFS,2056,,End,START_UP

#CRIFS,4752,,Begin,STG110
#CRIFS,4808,0,Load,loading/loading0.lua,0,360,sonic2010_0.cpk,906243744,0
#CRIFS,4821,0,Load,loading/loading0.arc,0,144660,sonic2010_0.cpk,922929760,0
#CRIFS,4836,0,Load,stg110/stg110_config.lua,0,1296,sonic2010_0.cpk,601272320,0
#CRIFS,4859,0,Load,set/stg110_obj_00.orc,0,24064,sonic2010_0.cpk,31256576,0
#CRIFS,4890,0,Load,set/stg110_obj_04.orc,0,1484,sonic2010_0.cpk,31281152,0
#CRIFS,4904,0,Load,set/stg110_obj_05.orc,0,2080,sonic2010_0.cpk,31283200,0
#CRIFS,4918,0,Load,set/stg110_obj_06.orc,0,1968,sonic2010_0.cpk,31287296,0
#CRIFS,4934,0,Load,set/stg110_obj_07.orc,0,1044,sonic2010_0.cpk,31289344,0
#CRIFS,4988,1,Load,sound/Synth/bgm_stg110_rso_fx_wav.aax,0,2048,sonic2010_0.cpk,187269120,0
#CRIFS,5116,1,Load,sound/Synth/bgm_stg110_rso_wav.aax,0,2048,sonic2010_0.cpk,191016960,0
#CRIFS,7817,0,Load,common_object.arc,0,950260,sonic2010_0.cpk,981680064,0
#CRIFS,7832,0,Load,sound/se_system_actionstage.csb,0,398864,sonic2010_0.cpk,47902720,0
#CRIFS,7848,0,Load,sound/se_ambience_common.csb,0,384664,sonic2010_0.cpk,32593920,0
#CRIFS,7863,0,Load,sound/se_object_common.csb,0,2150576,sonic2010_0.cpk,878590016,0
#CRIFS,7876,0,Load,sound/se_player_sonic.csb,0,2127032,sonic2010_0.cpk,45774848,0
#CRIFS,7891,0,Load,sound/se_voice_sonic_action_e.csb,0,449376,sonic2010_0.cpk,49031168,0
#CRIFS,7906,0,Load,EnemyCommon.arc,0,104072,sonic2010_0.cpk,12077056,0
#CRIFS,7922,0,Load,EnemyEggPawn.arc,0,625308,sonic2010_0.cpk,12408832,0
#CRIFS,7938,0,Load,sound/se_enemy_common.csb,0,310280,sonic2010_0.cpk,37672960,0
#CRIFS,7953,0,Load,sound/se_enemy_eggpawn.csb,0,175200,sonic2010_0.cpk,37984256,0
#CRIFS,7968,0,Load,player_Sonic.arc,0,4029564,sonic2010_0.cpk,873068608,0
#CRIFS,7982,0,Load,player_sonic.anm,0,7080,sonic2010_0.cpk,19433472,0
#CRIFS,7996,0,Load,player_ph_laser.arc,0,53908,sonic2010_0.cpk,18757632,0
#CRIFS,8009,0,Load,player_ph_drill.arc,0,98980,sonic2010_0.cpk,18538496,0
#CRIFS,8023,0,Load,hint_stg110.xtb,0,3776,sonic2010_0.cpk,16496640,0
#CRIFS,8037,0,Load,hint_stg110.hdb,0,1152,sonic2010_0.cpk,16494592,0
#CRIFS,8050,0,Load,interface_list.xtb,0,263,sonic2010_0.cpk,982630336,0
#CRIFS,8064,0,Load,stg110/stg110_cmn.arc,0,31936,sonic2010_0.cpk,601239552,0
#CRIFS,8078,0,Load,stg110/stg110_tex.brres,0,6363724,sonic2010_0.cpk,601819136,0
#CRIFS,8091,0,Load,stg110/stg110_obj.arc,0,91008,sonic2010_0.cpk,601274368,0
#CRIFS,8105,0,Load,stg100_obj.arc,0,180044,sonic2010_0.cpk,24305664,0
#CRIFS,8119,0,Load,stg110/stg110_path.arc,0,426792,sonic2010_0.cpk,881311168,0
#CRIFS,8369,0,Load,EnemyEggPawn_01rso.arc,0,120660,sonic2010_0.cpk,13035520,0
#CRIFS,8417,0,Load,EnemySpinner.arc,0,92428,sonic2010_0.cpk,15745024,0
#CRIFS,8431,0,Load,sound/se_enemy_spinner.csb,0,18608,sonic2010_0.cpk,38576128,0
#CRIFS,8445,0,Load,obj_spin.arc,0,19080,sonic2010_0.cpk,17649664,0
#CRIFS,8459,0,Load,ui/ui_game_j.arc,0,203908,sonic2010_0.cpk,900927296,0
#CRIFS,8472,0,Load,ui/ui_cockpit_j.arc,0,108252,sonic2010_0.cpk,837640192,0
#CRIFS,15543,0,Load,sound/se_object_rso.csb,0,132528,sonic2010_0.cpk,42506240,0
#CRIFS,15556,0,Load,sound/se_ambience_rso.csb,0,71840,sonic2010_0.cpk,33439744,0
#CRIFS,15570,0,Load,sound/se_phantom_laser.csb,0,426984,sonic2010_0.cpk,43155456,0
#CRIFS,15584,0,Load,sound/se_phantom_spin.csb,0,446696,sonic2010_0.cpk,45056000,0
#CRIFS,15598,0,Load,stg110/stg110_01.arc,0,604524,sonic2010_0.cpk,586698752,0
#CRIFS,15612,0,Load,stg110/stg110_02.arc,0,559460,sonic2010_0.cpk,587304960,0
#CRIFS,15625,0,Load,stg110/stg110_03.arc,0,595272,sonic2010_0.cpk,587866112,0
#CRIFS,15639,0,Load,stg110/stg110_27.arc,0,578972,sonic2010_0.cpk,600659968,0
#CRIFS,15653,0,Load,stg110/stg110_04.arc,0,591180,sonic2010_0.cpk,588462080,0
#CRIFS,4294941177,1,Load,sound/Synth/000_SYS04_E01_SP_wav.aax,0,2048,sonic2010_0.cpk,50141184,0
#CRIFS,4294946722,0,Load,stg110/stg110_05.arc,0,552132,sonic2010_0.cpk,589053952,0
#CRIFS,4294946737,0,Load,stg110/stg110_06.arc,0,543556,sonic2010_0.cpk,589606912,0
#CRIFS,4294946751,0,Load,stg110/stg110_07.arc,0,531884,sonic2010_0.cpk,590151680,0
#CRIFS,4294946288,,End,STG110

#CRIFS,4294954266,,Begin,STG320
#CRIFS,4294954324,0,Load,loading/loading2.lua,0,360,sonic2010_0.cpk,906244512,0
#CRIFS,4294954340,0,Load,loading/loading2.arc,0,84332,sonic2010_0.cpk,29388800,0
#CRIFS,4294954354,0,Load,stg320/stg320_config.lua,0,1164,sonic2010_0.cpk,686481408,0
#CRIFS,4294954379,0,Load,set/stg320_obj_00.orc,0,15712,sonic2010_0.cpk,972668192,0
#CRIFS,4294954424,0,Load,set/stg320_obj_06.orc,0,212,sonic2010_0.cpk,983179648,0
#CRIFS,4294954437,0,Load,set/stg320_obj_07.orc,0,260,sonic2010_0.cpk,983179872,0
#CRIFS,4294954508,1,Load,sound/Synth/bgm_stg320_shp_fx_wav.aax,0,2048,sonic2010_0.cpk,261384192,0
#CRIFS,4294954652,1,Load,sound/Synth/bgm_stg320_shp_nomal_wav.aax,0,2048,sonic2010_0.cpk,265848832,0
#CRIFS,4294956369,0,Load,common_object.arc,0,950260,sonic2010_0.cpk,981680064,0
#CRIFS,4294956383,0,Load,sound/se_system_actionstage.csb,0,398864,sonic2010_0.cpk,47902720,0
#CRIFS,4294956397,0,Load,sound/se_ambience_common.csb,0,384664,sonic2010_0.cpk,32593920,0
#CRIFS,4294956412,0,Load,sound/se_object_common.csb,0,2150576,sonic2010_0.cpk,878590016,0
#CRIFS,4294956426,0,Load,sound/se_player_sonic.csb,0,2127032,sonic2010_0.cpk,45774848,0
#CRIFS,4294956441,0,Load,sound/se_voice_sonic_action_e.csb,0,449376,sonic2010_0.cpk,49031168,0
#CRIFS,4294956455,0,Load,EnemyCommon.arc,0,104072,sonic2010_0.cpk,12077056,0
#CRIFS,4294956469,0,Load,EnemyEggPawn.arc,0,625308,sonic2010_0.cpk,12408832,0
#CRIFS,4294956482,0,Load,sound/se_enemy_common.csb,0,310280,sonic2010_0.cpk,37672960,0
#CRIFS,4294956496,0,Load,sound/se_enemy_eggpawn.csb,0,175200,sonic2010_0.cpk,37984256,0
#CRIFS,4294956512,0,Load,player_Sonic.arc,0,4029564,sonic2010_0.cpk,873068608,0
#CRIFS,4294956528,0,Load,player_sonic.anm,0,7080,sonic2010_0.cpk,19433472,0
#CRIFS,4294956543,0,Load,player_ph_astro.arc,0,49420,sonic2010_0.cpk,971864544,0
#CRIFS,4294956559,0,Load,hint_stg110.xtb,0,3776,sonic2010_0.cpk,16496640,0
#CRIFS,4294956575,0,Load,hint_stg110.hdb,0,1152,sonic2010_0.cpk,16494592,0
#CRIFS,4294956590,0,Load,interface_list.xtb,0,263,sonic2010_0.cpk,982630336,0
#CRIFS,4294956606,0,Load,stg320/stg320_cmn.arc,0,56004,sonic2010_0.cpk,686424064,0
#CRIFS,4294956621,0,Load,stg320/stg320_tex.brres,0,4142764,sonic2010_0.cpk,959853952,0
#CRIFS,4294956635,0,Load,stg320/stg320_obj.arc,0,36624,sonic2010_0.cpk,882013952,0
#CRIFS,4294956651,0,Load,stg300_obj.arc,0,373044,sonic2010_0.cpk,982630816,0
#CRIFS,4294956666,0,Load,stg320/stg320_path.arc,0,55228,sonic2010_0.cpk,882050592,0
#CRIFS,4294956908,0,Load,EnemyEggChaser.arc,0,227148,sonic2010_0.cpk,12181504,0
#CRIFS,4294956922,0,Load,sound/se_enemy_airchaser.csb,0,316720,sonic2010_0.cpk,33593344,0
#CRIFS,4294956982,0,Load,EnemyEggPawn_03shp.arc,0,147068,sonic2010_0.cpk,13293568,0
#CRIFS,4294957031,0,Load,EnemyLander.arc,0,37684,sonic2010_0.cpk,14712832,0
#CRIFS,4294957045,0,Load,sound/se_enemy_lander.csb,0,11624,sonic2010_0.cpk,38258688,0
#CRIFS,4294957072,0,Load,EnemySpinner.arc,0,92428,sonic2010_0.cpk,15745024,0
#CRIFS,4294957086,0,Load,sound/se_enemy_spinner.csb,0,18608,sonic2010_0.cpk,38576128,0
#CRIFS,4294957099,0,Load,EnemySpanner.arc,0,129392,sonic2010_0.cpk,15515648,0
#CRIFS,4294957136,0,Load,ui/ui_game_j.arc,0,203908,sonic2010_0.cpk,900927296,0
#CRIFS,4294957150,0,Load,ui/ui_cockpit_j.arc,0,108252,sonic2010_0.cpk,837640192,0
#CRIFS,4294963225,0,Load,sound/se_object_shp.csb,0,401944,sonic2010_0.cpk,42639360,0
#CRIFS,4294963241,0,Load,sound/se_ambience_shp.csb,0,78400,sonic2010_0.cpk,33513472,0
#CRIFS,4294963256,0,Load,sound/se_phantom_astronautes.csb,0,112608,sonic2010_0.cpk,43042816,0
#CRIFS,4294963272,0,Load,stg320/stg320_01.arc,0,461164,sonic2010_0.cpk,682029056,0
#CRIFS,4294963285,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294963299,0,Load,stg320/stg320_03.arc,0,508188,sonic2010_0.cpk,682944512,0
#CRIFS,4294963313,0,Load,stg320/stg320_04.arc,0,630004,sonic2010_0.cpk,683454464,0
#CRIFS,4294963326,0,Load,stg320/stg320_05.arc,0,523972,sonic2010_0.cpk,684085248,0
#CRIFS,4419,0,Load,stg320/stg320_06.arc,0,343764,sonic2010_0.cpk,684609536,0
#CRIFS,4433,0,Load,stg320/stg320_07.arc,0,451792,sonic2010_0.cpk,684953600,0
#CRIFS,4447,0,Load,stg320/stg320_08.arc,0,477060,sonic2010_0.cpk,685406208,0
#CRIFS,4294935481,0,Load,stg320/stg320_09.arc,0,364912,sonic2010_0.cpk,685883392,0
#CRIFS,4294949714,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,4294951249,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294952782,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,4294953167,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294954603,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,4294957888,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294948482,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,4294950385,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294951902,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,4294952287,0,Load,stg320/stg320_02.arc,0,450896,sonic2010_0.cpk,682491904,0
#CRIFS,4294953590,0,Load,stg320/stg320_10.arc,0,173904,sonic2010_0.cpk,686249984,0
#CRIFS,720,,End,STG320

delete_cpk.bat#

A script to delete the CriWare packs and associated content.

@echo off

@set CPK_NAME=sonic2010
@set CPK_OUT_DIR=..\dvd

@echo cpk及び、cpk関連ファイルを削除します。

@if exist %CPK_OUT_DIR%\%CPK_NAME%.cpk @del %CPK_OUT_DIR%\%CPK_NAME%.cpk
@if exist %CPK_NAME%.cpk @del %CPK_NAME%.cpk
@if exist %CPK_NAME%.csv @del %CPK_NAME%.csv
@if exist CpkFileBuilder.log @del CpkFileBuilder.log

@for /L %%I IN (0,1,1) DO (
    @if exist %CPK_OUT_DIR%\%CPK_NAME%_%%I.cpk @del %CPK_OUT_DIR%\%CPK_NAME%_%%I.cpk
    @if exist %CPK_NAME%_%%I.cpk @del %CPK_NAME%_%%I.cpk
    @if exist %CPK_NAME%_%%I.csv @del %CPK_NAME%_%%I.csv
)
@echo done.
@pause

make_cpk.bat#

A script to make the CriWare pack for the game.

@echo off

@set CPK_IMAGE_DIR=sonic2010
@set CPK_NAME=sonic2010
@set CPK_OUT_DIR=..\dvd

@for /L %%I IN (0,1,1) DO (
    @if exist %CPK_NAME%_%%I.csv (
        @del %CPK_NAME%_%%I.csv
    )
    ..\tools\CriCsvConverter -root=%CPK_IMAGE_DIR% -out=%CPK_NAME%_%%I.csv -compress -nlist=%CPK_NAME%_%%I_csv_setting.txt -view
    @if exist %CPK_NAME%_%%I.csv (
        ..\tools\cri\cpkmakec %CPK_NAME%_%%I.csv %CPK_OUT_DIR%\%CPK_NAME%_%%I.cpk -align=32 -code=SJIS -mode=FILENAME -add -mask -view
    ) else (
        @if exist %CPK_OUT_DIR%\%CPK_NAME%_%%I.cpk (
            @del %CPK_OUT_DIR%\%CPK_NAME%_%%I.cpk
        )
    )

    @goto end
)

:end

@pause

sonic2010_0_csv_setting.txt#

# このファイルは、CPK用のCSVに意図的に除外したいファイル等を書き込んでおくものです。
# ディレクトリ、ファイル共に '\' or '/' でディレクトリを指定する
# 先頭にルートディレクトリは付けない


# -- サーチ不要なディレクトリ --
# <> でくくると、サブフォルダの同一名ディレクトリも対象
# (サブフォルダ指定では<>は使用出来ません)
# * など検索文字列等も対応していません
[NEGATIVE_DIR]

<.svn>
<movie>

# -- サーチ不要なファイル --
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[NEGATIVE_FILES]

# -- 非圧縮ファイル --
# 通常、全て圧縮を試み圧縮できない場合は圧縮しませんが、絶対に圧縮してはいけないもの等を指定しておく事も出来ます。
# ※CRIの圧縮は一括でメモリに読み込める事が条件ですが、ストリーム系データに圧縮を適用する事はできません。
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[UNCOMPRESS_FILES]

<*.adx>
<*.aax>
<*.csb>
<*.sfd>

# -- 圧縮ファイル --
# -compressが設定されていない場合、こっちを適用する
[COMPRESS_FILES]

sonic2010_1_csv_setting.txt#

# このファイルは、CPK用のCSVに意図的に除外したいファイル等を書き込んでおくものです。
# ディレクトリ、ファイル共に '\' or '/' でディレクトリを指定する
# 先頭にルートディレクトリは付けない


# -- サーチ不要なディレクトリ --
# <> でくくると、サブフォルダの同一名ディレクトリも対象
# (サブフォルダ指定では<>は使用出来ません)
# * など検索文字列等も対応していません
[NEGATIVE_DIR]

<.svn>

<event>
<hbm>
<loading>
<movie>
<result_bg>
<scripts>
<set>
<sound>
<staffroll>
<strap>
<title>
<ui>
<worldmap>

# -- サーチ不要なファイル --
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[NEGATIVE_FILES]

<stg*>
*.arc
*.lua
*.xtb
*.nbx
*.hdb
*.brfnt
*.rso
*.anm


# -- 非圧縮ファイル --
# 通常、全て圧縮を試み圧縮できない場合は圧縮しませんが、絶対に圧縮してはいけないもの等を指定しておく事も出来ます。
# ※CRIの圧縮は一括でメモリに読み込める事が条件ですが、ストリーム系データに圧縮を適用する事はできません。
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[UNCOMPRESS_FILES]

<*.adx>
<*.aax>
<*.csb>
<*.sfd>

# -- 圧縮ファイル --
# -compressが設定されていない場合、こっちを適用する
[COMPRESS_FILES]

sonic2010_csv_setting.txt#

# このファイルは、CPK用のCSVに意図的に除外したいファイル等を書き込んでおくものです。
# ディレクトリ、ファイル共に '\' or '/' でディレクトリを指定する
# 先頭にルートディレクトリは付けない


# -- サーチ不要なディレクトリ --
# <> でくくると、サブフォルダの同一名ディレクトリも対象
# (サブフォルダ指定では<>は使用出来ません)
# * など検索文字列等も対応していません
[NEGATIVE_DIR]

<.svn>


# -- サーチ不要なファイル --
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[NEGATIVE_FILES]


# -- 非圧縮ファイル --
# 通常、全て圧縮を試み圧縮できない場合は圧縮しませんが、絶対に圧縮してはいけないもの等を指定しておく事も出来ます。
# ※CRIの圧縮は一括でメモリに読み込める事が条件ですが、ストリーム系データに圧縮を適用する事はできません。
# *.txt など検索文字列等でも指定可能
# <> で一致しているフォルダ全て対象
[UNCOMPRESS_FILES]

<*.adx>
<*.sfd>
<*.aax>
<*.csb>

# -- 圧縮ファイル --
# -compressが設定されていない場合、こっちを適用する
[COMPRESS_FILES]

text Directory#

Most content here is unlocalized files. However a few directories were mistakenly placed in it.

sound Directory

To do:
todo

staffroll Directory

Not only source localization files are here, but a variety of scripts from Blind Squirrel Games!

bsg_credit_converter.py
import xlrd
import sys 
import PIL
from PIL import Image

write_jp = False
write_bsg = False

for arg in sys.argv:
    if (arg == "--jp"):
        write_jp = True
    if (arg == "--bsg"):
        write_bsg = True
        
        

def CopyTextToFile(my_input, output, write_type):
    with open(my_input, "r", encoding="utf8") as f_input, open(output, write_type, encoding="utf8") as f_output:
        for line in f_input:
            f_output.writelines(line)

def WriteBsgStaffToFile():
    loc = ("BSG_Rainbow_Credits.xlsx")

    wb = xlrd.open_workbook(loc)
    sheet = wb.sheet_by_index(0)
    
    sheet.cell_value(0, 0)
    sheet.row_values(1)   
    
    
    #In the bsg excel sheet, they have 15 rows at the beginnning that is just info
    #Using this var to make sure we start generating on the right row
    staffroll_begin_index = 15
    
    #Using number to append to new company tag number
    #Starting with 15 because thats where the japan staff roll company leaves off
    company_index = 16
    
    staff_h_index = 0
    staff_t_index = 0
    staff_n_index = 0

    #My formula for finding the correct spacing between pages
    #(longest width in a page - default page width) + default space between page
    #(page_x_offset - page_width) + space_between_pages
    page_x_offset = 504;
    page_width = 504
    space_between_pages = 120
    space_between_name_pages = 60
    
    linesToWrite = []
    lineCount = 0;
    
    TextMaxWidth = 45
    
    ImgLeftSideSpacingScaler = 0.18
    ImgRightSideSpacingScaler = 0.2
    
    prevWasHeader = False

    bsg_staffroll_f = open("staffroll.xml", "a", encoding="utf8")
    bsg_staffroll_scr_f = open("staffroll_scr.xml", "a", encoding="utf8")
    
    bsg_staffroll_f.write("    <!--============================================== Blind Squirrel Games ==============================================-->\n")
    bsg_staffroll_scr_f.write("    <!--============================================== Blind Squirrel Games ==============================================-->\n")
    
    linesToWrite.append("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages) + "\">\n")
    page_x_offset = -999
    #Looping through bsg excel sheet
    #With each iteration I will generate text for both "staffroll" (the tags) and "staffroll_scr" (the xml that gets converted to arc)
    for i in range(sheet.nrows):
    
        if(sheet.row_values(i)[1] == "break"):
            if(lineCount > 0):
                if(lineCount <= 1):
                    lineCount = 0
                offset = 180 * ((lineCount) / 5)
            
                linesToWrite[0] = linesToWrite[0].replace("FILL", str( 180 - offset))
                lineCount = 0
                for j in linesToWrite:
                    bsg_staffroll_scr_f.write(j)
            
                bsg_staffroll_scr_f.write("        </page>\n")
                
                index = 0
                searchingNext = True
                foundImage = False
                imgName = ""
                
                while(searchingNext):
                    row = sheet.row_values(i + index)[2]
                    if(len(row) > 2):
                        searchingNext = False
                        if(row == "Image"):
                            foundImage = True
                            imgName = sheet.row_values(i + index)[3]
                    index += 1
                
                if(foundImage):
                    path = "../../../acorn/staffroll/staffroll/images/" + imgName
                    img = PIL.Image.open(path)
  
                    # fetching the dimensions
                    wid, hgt = img.size
            
                    new_spacing = wid * ImgLeftSideSpacingScaler
                
                    bsg_staffroll_scr_f.write("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages + new_spacing) + "\">\n")
                else:
                    bsg_staffroll_scr_f.write("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages) + "\">\n")
                
                
                linesToWrite.clear()
            
            prevWasHeader = False
            page_x_offset = 0;
            continue
            
        if( i < (staffroll_begin_index - 1) or sheet.row_values(i)[3] == "" or sheet.row_values(i)[3] == " " or sheet.row_values(i)[3] == "  "):
            continue
        #2K_Sonic_Colors_Logo_ULTIMATE_US_FLAT.tga
        #Converting "and" or "&" because Sega tool don't like those
        staff_roll_text = sheet.row_values(i)[3].upper()
        
        staff_roll_text = staff_roll_text.replace("Á", "#0A")
        staff_roll_text = staff_roll_text.replace("á", "#0a")
        staff_roll_text = staff_roll_text.replace("É", "#0E")
        staff_roll_text = staff_roll_text.replace("é", "#0e")
        staff_roll_text = staff_roll_text.replace("È", "#4u")
        staff_roll_text = staff_roll_text.replace("è", "#47")
        staff_roll_text = staff_roll_text.replace("Ü", "#4w")
        staff_roll_text = staff_roll_text.replace("ü", "#49")

        if(staff_roll_text[0] == '\"'):
            staff_roll_text = staff_roll_text.replace("\"", "#41", 1)
        
        #Starting quotes
        staff_roll_text = staff_roll_text.replace(" \"", " #41")
        
        #Ending quotes
        staff_roll_text = staff_roll_text.replace("\"", "#42")
        
        

        staff_roll_text = staff_roll_text.replace("©", "#44")       
        
        staff_roll_text = staff_roll_text.replace("&", "&amp;")
        staff_roll_text = staff_roll_text.replace(" &AMP; ", " &amp; ")
        staff_roll_text = staff_roll_text.replace(" AND ", " &amp; ")
        
        staff_roll_text = staff_roll_text.replace("\n", " ")       
        
        staff_roll_text_length = len(sheet.row_values(i)[3])
        
        bsg_staffroll_f.write("    <Row ss:AutoFitHeight=\"0\" ss:Height=\"36\">\n")
        
        text_width = 0
        
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------COMPANY
#====================================================================================================================================================================================================================     
        if(sheet.row_values(i)[2] == "Company"):
            #In the original xml the numbers used for single digits use "00, 01, 02, etc." just trying to keep parity
            zero_char = ''
            if(company_index < 10):
                zero_char = '0'
            
            text_width = staff_roll_text_length * 24
            
            #GENERATING STAFFROLL
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"String\">company_" + zero_char + str(company_index) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s127\"><Data ss:Type=\"String\">" + staff_roll_text + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s69\" ss:Formula=\"=LEN(RC[-1])\"><Data ss:Type=\"Number\">" + str(staff_roll_text_length) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">" + str(text_width)+ "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">8</Data></Cell>\n")
            
            #GENERATING STAFFROLL_SCR                        
            
            #So from what I can tell looking at the phantom numbers (the numbers that never specified how they work)
            #for "x" and "y" the patteren i saw was if the header text had like 1 or 2 staff name entires you'd put y=180
            #for the text to align in the middle of the screen but if the header text had more than like 3 entries of names 
            #you'd put "y=90" instead to change the height and expand the range for the entries            
            if(page_x_offset == 0):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"company_" + zero_char + str(company_index) + "\" x=\"0\" y=\"FILL\" type=\"NORMAL\" broken=\"true\">\n")
            elif(prevWasHeader):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"company_" + zero_char + str(company_index) + "\" x=\"0\" y=\"30\" type=\"NORMAL\" broken=\"true\">\n")
            else:
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"company_" + zero_char + str(company_index) + "\" x=\"0\" y=\"60\" type=\"NORMAL\" broken=\"true\">\n")
            linesToWrite.append("                 <param no=\"1\" broken=\"true\" rbox=\"RINGx5\" lockon=\"false\"></param>\n")
            linesToWrite.append("                 <param no=\"4\" broken=\"true\" rbox=\"RINGx10\" lockon=\"true\"></param>\n")
            linesToWrite.append("                 <param no=\"6\" broken=\"true\" rbox=\"RINGx10\" lockon=\"false\"></param>\n")
            #linesToWrite.append("                 <param no=\"13\" broken=\"true\" rbox=\"RINGx5\" lockon=\"false\"></param>\n")
            #linesToWrite.append("                 <param no=\"14\" broken=\"true\" rbox=\"RINGx5\" lockon=\"true\"></param>\n")
            linesToWrite.append("             </data>\n")           
            
            prevWasHeader = True
            company_index += 1
            lineCount += 1
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------IMAGE
#====================================================================================================================================================================================================================
        elif(sheet.row_values(i)[2] == "Image"):
        
            path = "../../../acorn/staffroll/staffroll/images/" + sheet.row_values(i)[3]
            # loading the image
            img = PIL.Image.open(path)
  
            # fetching the dimensions
            wid, hgt = img.size
            
            staff_roll_text = sheet.row_values(i)[3][ 0 : staff_roll_text.index(".")]
            
            text_width = wid * ImgRightSideSpacingScaler
            #print(staff_roll_text + ": (" + str(wid) + " " + str(hgt) + ") ~ scaled width: " + str(text_width));
            
            # Can't use "staff_roll_text" cause i captilize all the letters
            #if(page_x_offset == 0):
            #    linesToWrite.append("             <data cmd=\"IMAGE\" name=\"" + sheet.row_values(i)[3] + "\" x=\"0\" y=\"FILL\" />\n")
            #else:
            linesToWrite.append("             <data cmd=\"IMAGE\" name=\"" + staff_roll_text + "\" x=\"0\" y=\"180\" />\n")
            lineCount += 1
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------HEADER
#====================================================================================================================================================================================================================
        elif(sheet.row_values(i)[2] == "Header"):
            zero_char = ''
            if(staff_h_index < 10):
                zero_char = '0'
            
            text_width = staff_roll_text_length * 18.66
            
            #GENERATING STAFFROLL
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s128\"><Data ss:Type=\"String\">staff_h_" + zero_char + str(staff_h_index) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s129\"><Data ss:Type=\"String\">" + staff_roll_text + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s69\" ss:Formula=\"=LEN(RC[-1])\"><Data ss:Type=\"Number\">" + str(staff_roll_text_length) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">" + str(text_width)+ "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">8</Data></Cell>\n")
            
            #GENERATING STAFFROLL_SCR                       
            if(page_x_offset == 0):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_h_" + zero_char + str(staff_h_index) + "\" x=\"0\" y=\"FILL\" type=\"NORMAL\" broken=\"true\">\n")
            elif(prevWasHeader):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_h_" + zero_char + str(staff_h_index) + "\" x=\"0\" y=\"30\" type=\"NORMAL\" broken=\"true\">\n")
            else:
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_h_" + zero_char + str(staff_h_index) + "\" x=\"0\" y=\"60\" type=\"NORMAL\" broken=\"true\">\n")
            
            linesToWrite.append("             </data>\n")
            
            prevWasHeader = True
            staff_h_index += 1
            lineCount += 1
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------CATEGORY
#====================================================================================================================================================================================================================
        elif(sheet.row_values(i)[2] == "Category"):
            zero_char = ''
            if(staff_t_index < 10):
                zero_char = '0'
            
            text_width = staff_roll_text_length * 18.66
            
            #GENERATING STAFFROLL
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s128\"><Data ss:Type=\"String\">staff_t_" + zero_char + str(staff_t_index) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s129\"><Data ss:Type=\"String\">" + staff_roll_text + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s69\" ss:Formula=\"=LEN(RC[-1])\"><Data ss:Type=\"Number\">" + str(staff_roll_text_length) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">" + str(text_width)+ "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">8</Data></Cell>\n")
            
            #GENERATING STAFFROLL_SCR                        
            if(page_x_offset == 0):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_t_" + zero_char + str(staff_t_index) + "\" x=\"0\" y=\"FILL\" type=\"NORMAL\" broken=\"true\">\n")
            elif(prevWasHeader):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_t_" + zero_char + str(staff_t_index) + "\" x=\"0\" y=\"30\" type=\"NORMAL\" broken=\"true\">\n")
            else:
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_t_" + zero_char + str(staff_t_index) + "\" x=\"0\" y=\"60\" type=\"NORMAL\" broken=\"true\">\n")
            
            linesToWrite.append("             </data>\n")

            prevWasHeader = True
            staff_t_index += 1
            lineCount += 1
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------INDIVIDUAL
#====================================================================================================================================================================================================================
        elif(sheet.row_values(i)[2] == "Individual"):
        
            zero_char = ''
            if(staff_n_index < 10):
                zero_char = '0'
            
            text_width = staff_roll_text_length * 16
            
            #GENERATING STAFFROLL            
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s70\"><Data ss:Type=\"String\">staff_n_" + zero_char + str(staff_n_index) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s83\"><Data ss:Type=\"String\">" + staff_roll_text + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell ss:StyleID=\"s69\" ss:Formula=\"=LEN(RC[-1])\"><Data ss:Type=\"Number\">" + str(staff_roll_text_length) + "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">" + str(text_width)+ "</Data></Cell>\n")
            bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">8</Data></Cell>\n")
            
            #GENERATING STAFFROLL_SCR                
            if(page_x_offset == 0):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_n_" + zero_char + str(staff_n_index) + "\" x=\"20\" y=\"FILL\" type=\"NORMAL\" broken=\"true\">\n")
            elif(prevWasHeader):
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_n_" + zero_char + str(staff_n_index) + "\" x=\"20\" y=\"10\" type=\"NORMAL\" broken=\"true\">\n")
                prevWasHeader = False
            else:
                linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_n_" + zero_char + str(staff_n_index) + "\" x=\"20\" y=\"30\" type=\"NORMAL\" broken=\"true\">\n")

            linesToWrite.append("             </data>\n")
            
            staff_n_index += 1
            lineCount += 1
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------TEXT
#====================================================================================================================================================================================================================
        elif(sheet.row_values(i)[2] == "Text"):
        
            forcePush = False
            leaveLoop = False
            stringCount = 0
            stringsFound = 0
            stringStart = 0
            stringEnd = TextMaxWidth
            
            stringLen = len(staff_roll_text)
            while(not leaveLoop):
                stringStore = ""
                
                
                if(stringLen > stringEnd):
                    stringsFound += 1
                    stringEnd = stringsFound * TextMaxWidth
                    
                    for char in staff_roll_text[stringEnd:]:
                        if(char == " " or stringEnd == stringLen):
                            break
                            
                        stringEnd += 1
                        
                    stringCount = stringEnd - stringStart
                    stringStore = staff_roll_text[stringStart : stringEnd]
                    stringEnd += 1
                    stringStart = stringEnd
                else:
                    leaveLoop = True
                    forcePush = True
                    if(stringsFound == 0):
                        stringStore = staff_roll_text
                        stringCount = len(staff_roll_text)
                        
                
                    
                if(not stringStore == ""):     
                    if(stringsFound > 1):               
                        bsg_staffroll_f.write("    <Row ss:AutoFitHeight=\"0\" ss:Height=\"36\">\n")
                    zero_char = ''
                    if(staff_n_index < 10):
                        zero_char = '0'
                    
                    text_width = stringCount * 16
                    
                    #GENERATING STAFFROLL            
                    bsg_staffroll_f.write("       <Cell ss:StyleID=\"s70\"><Data ss:Type=\"String\">staff_n_" + zero_char + str(staff_n_index) + "</Data></Cell>\n")
                    bsg_staffroll_f.write("       <Cell ss:StyleID=\"s83\"><Data ss:Type=\"String\">" + stringStore + "</Data></Cell>\n")
                    bsg_staffroll_f.write("       <Cell ss:StyleID=\"s69\" ss:Formula=\"=LEN(RC[-1])\"><Data ss:Type=\"Number\">" + str(stringCount) + "</Data></Cell>\n")
                    bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">" + str(text_width)+ "</Data></Cell>\n")
                    bsg_staffroll_f.write("       <Cell><Data ss:Type=\"Number\">8</Data></Cell>\n")
                    
                    #GENERATING STAFFROLL_SCR
                    if(page_x_offset == 0):
                        linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_n_" + zero_char + str(staff_n_index) + "\" x=\"20\" y=\"FILL\" type=\"NORMAL\" broken=\"true\">\n")
                    else:
                        linesToWrite.append("             <data cmd=\"TEXT\" tag=\"staff_n_" + zero_char + str(staff_n_index) + "\" x=\"20\" y=\"20\" type=\"NORMAL\" broken=\"true\">\n")
        
                    linesToWrite.append("             </data>\n")
                    
                    staff_n_index += 1
                    lineCount += 1
                    
                    if(page_x_offset < text_width):
                        page_x_offset = text_width
                
                if(lineCount % 6 == 0 or forcePush):
                    if(lineCount > 0):
                        if(lineCount <= 1):
                            lineCount = 0
                        offset = 110 * ((lineCount) / 5)
            
                        linesToWrite[0] = linesToWrite[0].replace("FILL", str( 180 - offset))
                        lineCount = 0
                        for j in linesToWrite:
                            bsg_staffroll_scr_f.write(j)
            
                        bsg_staffroll_scr_f.write("        </page>\n")
                        
                        index = 1
                        searchingNext = True
                        foundImage = False
                        imgName = ""
                        
                        while(searchingNext):
                            row = sheet.row_values(i + index)[2]
                            if(len(row) > 2):
                                searchingNext = False
                                #print("hit after " + str(index) + " Cycles at line " + str(i + index) + " ~ " + row)
                                if(row == "Image"):
                                    foundImage = True
                                    imgName = sheet.row_values(i + index)[3]
                            index += 1
                        
                        if(foundImage):
                            path = "../../../acorn/staffroll/staffroll/images/" + imgName
                            img = PIL.Image.open(path)
                        
                            # fetching the dimensions
                            wid, hgt = img.size
                        
                            new_spacing = wid * ImgLeftSideSpacingScaler
                            
                            #print("" + str(new_spacing))
                        
                            bsg_staffroll_scr_f.write("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages + new_spacing) + "\">\n")
                        else:
                            bsg_staffroll_scr_f.write("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages) + "\">\n")
                        
                        #bsg_staffroll_scr_f.write("        <page x=\"" + str((page_x_offset - page_width ) + space_between_pages) + "\">\n")
                        linesToWrite.clear()
                        
                    page_x_offset = 0;
                    forcePush = False
                if(not leaveLoop):
                    bsg_staffroll_f.write("    </Row>\n")
            continue
#====================================================================================================================================================================================================================
#--------------------------------------------------------------------------------------------SKIPPED
#====================================================================================================================================================================================================================
        else:
            print("EXCLUDED (Excel Row " + str(i) + "): [" + sheet.row_values(i)[2] + ": " + staff_roll_text + "]")
            
#====================================================================================================================================================================================================================
#====================================================================================================================================================================================================================
        bsg_staffroll_f.write("    </Row>\n")
        
        if(page_x_offset < text_width):
            page_x_offset = text_width
            
            
    bsg_staffroll_scr_f.write("        </page>\n")
    bsg_staffroll_f.close();
    bsg_staffroll_scr_f.close();






#START OF MAIN FUNCTION
CopyTextToFile("temp_gen_files\staffroll_beginning.txt", "staffroll.xml", "w")
CopyTextToFile("temp_gen_files\staffroll_scr_beginning.txt", "staffroll_scr.xml", "w")

if(write_jp):
    CopyTextToFile("temp_gen_files\staffroll_jp_beg.txt", "staffroll.xml", "a")
    CopyTextToFile("temp_gen_files\staffroll_scr_jp_beg.txt", "staffroll_scr.xml", "a")

if(write_bsg):
    WriteBsgStaffToFile()

if(write_jp):
    CopyTextToFile("temp_gen_files\staffroll_jp_end.txt", "staffroll.xml", "a")
    CopyTextToFile("temp_gen_files\staffroll_scr_jp_end.txt", "staffroll_scr.xml", "a")

CopyTextToFile("temp_gen_files\staffroll_ending.txt", "staffroll.xml", "a")
CopyTextToFile("temp_gen_files\staffroll_scr_ending.txt", "staffroll_scr.xml", "a")
BSG_Rainbow_Credits.xlsx

A credits file, the file was created on May 31st at 12:30 AM in 2010 and last saved on May 12th at 3:44 PM in 2021, suggesting SEGA simply sent a copy of their original source file for BSG to use.

Development Tools#

To do:
Document the tools individually.

Among all the other leftover development data, there's lots of development tools located in the tools directory - including proprietary Sonic Team tools, CriWare tools, PhysX tools and even Wii SDK tools! The inclusion of Wii SDK tools is notable, as the Wii Programming Guidelines prohibit use of the tools to develop for different platforms. Most of the proprietary tools use Shift-JIS encoding so using a Japanese locale is recommended.

AnimationBindConverter/AnimationBindConverter.exe#

AnimationBindConverter.exe <入力ファイル>
入力ファイル:XML

arcview.bat#

A command line entry to run the U8 archiving tool to list files in an archive.

@echo off
%~d0
cd %~dp0

@call darch.exe -tvV %%~f1

@pause

ArtworksCopy.vbs#

A Visual Basic script used to copy internal artwork assets.

Rem 定数(ここの処理を外部設定ファイルからの読み込みにして良いかも・・・)
Const Dest = "\2010Copy"
Const ViewerBat = "\Viewer2010\ViewerNDEV.bat"
Const ViewerBin = "\Viewer2010\bin"
Const ViewerDvd = "\Viewer2010\dvdroot"
Const DocumentDesign = "\Documents\design"
Const Artworks = "\Sonic2010\artworks"
Const Dvd = "\Sonic2010\dvd"
Const DvdImage = "\Sonic2010\dvd_builder_image"
Const Elf = "\Sonic2010\elf"
Const ElfBat = "\Sonic2010\RVL_ElfRun.bat"
Const ElfRBat = "\Sonic2010\RVL_ElfRun_R.bat"
Const Plugins = "\Sonic2010\plugins"
Const Tools = "\Sonic2010\tools"

Rem 環境変数の取得
Dim fileStream,wshShell,src, dst, copyArray, copyfileArray
Set fileStream = WScript.CreateObject("Scripting.FileSystemObject")
Set wshShell = WScript.CreateObject("WScript.Shell")
src = wshShell.ExpandEnvironmentStrings("%Sonic2010_ROOT%")
dst = Left(src, 2) & Dest
copyArray = Array(ViewerBin, ViewerDvd, DocumentDesign, Artworks, Dvd, DvdImage, Elf, Plugins, Tools)
copyfileArray = Array(ViewerBat, ElfBat, ElfRBat)

Rem 引数の処理
Dim IsoutPutMessage,param
IsoutPutMessage = false
For Each param In  WScript.Arguments
    If StrComp(param, "Message ") Then
        IsoutPutMessage = true
    End If
Next

Rem メインルーチン
If fileStream.FolderExists(src) = false Then
    WScript.Echo "環境変数Sonic2010_Rootが設定せれていません"
Else
    Call Main()
    WScript.Echo ""
    WScript.Echo dst & "にコピー終了"
End If
Set wshShell = Nothing
Set fileStream = Nothing
Set src = Nothing
Set dst = Nothing
Set copyArray = Nothing
Set copyfileArray = Nothing
Set IsoutPutMessage = Nothing
Set param = Nothing
WScript.Quit 0

Rem メイン関数
Sub Main()
    Dim targetFolder, target
    
    Dim bat,file
    For Each file In copyfileArray
        target = src & file
        Set bat = fileStream.getFile(target)
        CopyFile(bat)
    Next
    
    Dim copyFolder
    For Each copyFolder In copyArray
        target = src & copyFolder
        Set targetFolder = fileStream.getFolder(target)
        Call SearchFileExceptSVN(targetFolder)
        If IsoutPutMessage = true Then
            WScript.Echo target & " コピー終了"
        End If
    Next
End Sub

Rem SVNファイル以外フォルダを再帰的に見てファイルを探す関数関数
Sub SearchFileExceptSVN(ByVal folder)
    
    Rem ファイルをコピーする
    Dim file
    For Each file In folder.Files
        Call CopyFile(file)
    Next
    
    Rem 再帰的に探査する
    Dim subFolder
    For Each subFolder In folder.SubFolders
        If StrComp(subFolder.Name, ".svn") Then
            Call SearchFileExceptSVN(subFolder)
        End If
    Next
    
End Sub

Rem 適切な位置にファイルをコピーする関数
Sub CopyFile(ByVal file)
    Dim outPut,outPutPath, len
    outPut = dst & Mid(file.Path, 3)
    outPutPath = Left(outPut, InStrRev(outPut, "\") - 1)
    
    Rem WScript.Echo outPutPath
    
    Rem フォルダーの作成
    If fileStream.FolderExists(outPutPath) = false Then
        CreateFolder2(outPutPath)
    End If
    
    Rem コピー
    fileStream.CopyFile file.Path, outPut 
End Sub

Rem 親込みでフォルダを生成する
Sub CreateFolder2(ByVal folder)
    Dim parent
    parent = fileStream.GetParentFolderName(folder)
    If fileStream.FolderExists(parent) = false Then
        CreateFolder2(parent)
    End If
    fileStream.CreateFolder(folder)
End Sub

BBATool.exe#

To do:
Tends to crash, fix if possible.

A TV connector tool developed by both Nintendo and Sega.

binarc.exe#

Binary archiving tool for source scripting files, common output is an ORC file. Command-line parameters are the following:

   -i         インクルードパス指定(複数指定可能)
   -l         Little Endianで出力
   -b         Big Endianで出力(デフォルト)
   -align     データセクションのアラインメントを指定(default=32)
   -ptrsize   ポインタサイズ指定(default=4)

CircuitListCnv.exe#

Converts circuit_list.xml to a SRC file. Running the program shows general info:

CircuitListConverter
Usage:CircuitListCnv.exe <入力ファイル名><出力ファイル>
何かあったら志村までご連絡下さい。

cri/#

The directory has a variety of common CriWare tools.

CsbFileViewer.exe

A tool for viewing CSB files.

CsbFileViewer_NDEV.elf

A port of the tool for Wii.

CsbFileViewer_NDEV.ddf
;-------------------------------
; [Input] Section
;
;   DvdRoot="<Root Directory>"
;       The name of the directory containing files to be emulated.
;       A table for the FST file is generated by retrieving files under the
;       directory specified here.
;   LDRFileName="<LDR File Name>"
;       The name of the Application Loader file.
;   BI2FileName="<BI2 File Name>"
;
;
[Input]
DvdRoot="$(SONIC2010_ROOT)\Sonic2010\dvd_builder_image\sonic2010\sound"

CriCsvConverter.exe#

Takes a given folder and lists of files and subfolders to output a CSV file. The general information is listed below:

CriCsvConverter Ver.1.0.0.0
Copyright (C) 2009 SEGA t.sekiguchi
Usage: file2cricsv.exe     : -root="cpkにした場合のルートディレクトリ"
     : -compress … データの圧縮
     : -out=出力名
     : -nlist=検索対象外リストファイル
     : -view … 情報表示

Entries are in this format:

%s , \t%s\t\t,%i, %s, %s, %s

The first string is the file path, the second is the file name without it, the number is the index starting from 0, the next string is either "UnCompress" or "Compress" which appears on all entries if -compress is used, the other strings are unknown.

darch.exe#

To do:
If possible, find the differences of the modified tool.

Common NW4R tool for archiving content, but modified by Sekiguchi.

Revolution Archiver(custom version) Ver.1.04 t.sekiguchi

DistortionConv.exe#

To do:
todo

A tool converting a distortion XML to SRC.

Distortion covert tool for Sonic2010 Version 0.1.1 (Jun 25 2010-20:32:27))
Copyright (C) 2009, SEGA Corp.
DistortionConv [options] 

    -o output                Specify output file or folder.
    -f file                  Specify input file list.
    -n, --nologo             Don't display logo message.
    -h, --help               Display this help and exit.
    -v, --version            Display version information and exit.

Report bugs to <kamai_masayoshi@sega.co.jp>

EventConv.exe#

Converts ev_seq xml files to source event sequence files (.src).

EventConv Ver.1.1 t.sekiguchi
Usage: EventConv.exe
     : -i=入力ファイル名
     : -o=出力フォルダ名

FogConv.exe#

To do:
todo

A tool to convert the Fog XML to SRC.

Fog covert tool for Sonic2010 Version 0.1.3 (Feb  1 2010-11:35:59))
Copyright (C) 2009, SEGA Corp.
FogConv [options] 

    -o output                Specify output file or folder.
    -f file                  Specify input file list.
    -n, --nologo             Don't display logo message.
    -h, --help               Display this help and exit.
    -v, --version            Display version information and exit.

Report bugs to <kamai_masayoshi@sega.co.jp>

FlowExListCnv/FlowExListCnv.exe#

To do:
todo

Converts the FlowExList XML?

FlowListCnv.exe <入力ファイル><出力ファイル>
入力ファイル:XML
出力ファイル:binarc形式

FlowListCnv/FlowListCnv.exe#

To do:
todo

Converts the FlowList XML?

FlowListCnv.exe <入力ファイル><出力ファイル>
入力ファイル:XML
出力ファイル:binarc形式

fontcvtr/#

Has most of the Wii's development tools for converting fonts.

GetRevision/GetRevision.bat#

@echo off

echo リビジョン情報を取得しています...

setlocal
set SRC=%SONIC2010_ROOT%\Sonic2010\tools\GetRevision\Revision.h.template
set DST=%SONIC2010_ROOT%\Sonic2010\build\main\src\Revision.h

SubWCRev %SONIC2010_ROOT% %SRC% %DST%

endlocal

GetRevision/Revision.h.template#

#ifndef 
#define 

// 現在のシステム日時
#define     "$WCNOW$"

// 作業コピーのもっとも大きいリビジョン番号
#define     "$WCREV$"

// もっとも大きいリビジョンのコミット日時
#define     "$WCDATE$"

// ローカルで変更があれば 1 、そうでなければ 0
#define     $WCMODS?1:0$

#endif  // 

GismoConverter/GismoConveter.exe#

To do:
todo

GismoConverter for SONIC2010

Usage:GismoConverter.exe  [options]

  -?              Display this help.

  -o=filename     Specify output filename.

GismoBinaryMaker.exe#

To do:
todo

GismoBinaryMaker for SONIC2010
Usage:GismoBinaryMaker.exe  [options]
  -?              Display this help.
  -o=filename     Specify output filename.
  -f=gismo_folder       Specify search gismo folder(full path)

glarecnv.exe#

To do:
todo

Converts a glare XML file to SRC.

GrassConv.exe#

Converts a grass XML file to SRC.

HintConv.exe#

To do:
todo

hnd2collision.exe#

A tool that converts HND/HNA to Havok/PhysX Collision.

LightFieldConv.exe#

To do:
todo

LocalLightConv.exe#

To do:
todo

MakeStageToken.exe#

To do:
todo

MiiDataImport/#

Has files for importing Mii data and testing on a development console.

nw4r_matimport/nw4r_matimport.exe#

A material importer. Despite what this sounds like, it's not from the Wii SDK, but Colors.

nw4r_matimport/readme.txt#

==========================================================================
 マテリアルインポートツール Ver. 0.2.2
      07/07/2009
===========================================================================

*目次
- イントロダクション
- 使用方法
- 注意事項


==========================================================================
イントロダクション
==========================================================================
NintendoWare for Revolution(以下NW4R)エクスポートプラグインを使って出力した、
中間モデルデータファイル(rmdlファイル)をNW4R 3Deditorから出力する事ができる
マテリアル情報ファイル(r3mtファイル)から得られる情報を元に半自動的に書き換える
ツールです。
書き換える対象のrmdlファイル、またはrmdlファイルが格納されているフォルダを
必ず指定する必要が有ります。
フォルダを指定した場合には、そのフォルダ以下を再帰的に検索します
(拡張子が rmdl 以外のファイルは無視されます)。

本ツールはマテリアル名に埋め込まれたプリセットキー情報を元に、対応する
マテリアル情報ファイルをインポートします。


==========================================================================
使用方法
==========================================================================
処理したい rmdl ファイル または複数の rmdl ファイルを格納したフォルダを
同梱の run.bat バッチファイルにドラッグ&ドロップすると、処理後の 
rmdl ファイルが元のファイルと同じフォルダに生成されます。

バッチファイルを直接実行した場合には、in_rmdl フォルダ以下の rmdl ファイルを
一括変換し、out_rrmdl フォルダに生成します。


==========================================================================
注意事項
==========================================================================
本ツールはまだいくつかの不具合が残っている可能性があります。

nw4r_matimport/run.bat#

@echo off
rem **********************************************************
rem * マテリアルインポートツール
rem **********************************************************


rem **********************************************************
rem *
rem * 不具合があるならここのパス指定を変更してください
rem *
rem **********************************************************
set NW4R_MATIMPORT=
set INPUT_RMDL=in_rmdl
set OUTPUT_RMDL=out_rmdl
set R3MT_ROOT=..\..\artworks\material
set ERROR_TXT=error.txt


%~d0
cd %~dp0

if "%~1"=="" goto ALL

rem *****************************************
rem * 指定パス以下を全処理
rem *****************************************
:LOOP_TOP
if "%~1"=="" goto END
nw4r_matimport.exe --sonic2010-opts --volume-culling on --import-r3mt "%R3MT_ROOT%" -o "%~1" "%~1" 2> %ERROR_TXT%
if ERRORLEVEL 1 goto ERROR
shift
goto LOOP_TOP


rem *****************************************
rem * 入力されたパスを全処理
rem *****************************************
:ALL
nw4r_matimport.exe --sonic2010-opts --volume-culling on --import-r3mt "%R3MT_ROOT%" -o "%OUTPUT_RMDL%" "%INPUT_RMDL%" 2> %ERROR_TXT%
if ERRORLEVEL 1 goto ERROR
goto END


:ERROR
echo エラーが発生しました
echo カレントフォルダに作成された %ERROR_TXT% を釜井の方まで提出してください。
goto END

:END
type %ERROR_TXT%
pause

nw4r_texinfo.exe#

To do:
todo

A texture information tool. Despite what this sounds like, it's not from the Wii SDK, but Colors.

nw4r_texmipmap/nw4r_texmipmap.exe#

To do:
todo

A mipmap TGA converter of some sort. Despite what this sounds like, it's not from the Wii SDK, but Colors.

nw4r_texmipmap/readme.txt#

==========================================================================
 ミップマップ生成ツール Ver. 0.1.7
      06/22/2009
===========================================================================

*目次
- イントロダクション
- 使用方法
- 既知の問題点
- 注意事項


==========================================================================
イントロダクション
==========================================================================
TGA形式の画像ファイルに対して、TGA拡張領域にNintendoWare用ミップマップデータを
作成するツールです。


==========================================================================
使用方法
==========================================================================
ミップマップを生成したいTGAファイル、または複数のTGAファイルを格納した
フォルダを同梱のバッチファイルにドラッグ&ドロップすると、
ミップマップ情報が追加された中間TGAファイルが out_tga フォルダ以下に、
rtexファイルが out_rtex フォルダフォルダ以下に生成されます。

バッチファイルを直接実行した場合には、out_tga フォルダ以下のTGAファイルを
一括変換し、rtexファイルを out_rtex フォルダ以下に生成します。

バッチファイルを開いてオプション項目を変更することで、

1.出力フォルダ
2.ミップレベル

を変更することができます。

各バッチファイルと画像フォーマットの対応は以下のようになります。

・16段階インテンシティ (I4)  --> run_i4.bat
・256段階インテンシティ (I8) --> run_i8.bat
・16段階インテンシティアルファ (IA4)  --> run_ia4.bat
・256段階インテンシティアルファ (IA8) --> run_ia8.bat
・16ビットRGB (RGB565)  --> run_rgb565.bat
・16ビットRGBA (RGB5a5) --> run_rgb5a3.bat
・32ビットRGBA (RGBA8)  --> run_rgba8.bat
・圧縮テクスチャ (CMPR) --> run_cmpr.bat
・おまかせ --> run.bat

*注
run.bat を使用しておまかせ変換を実行した場合、以下の条件でミップマップを作成する際の
フォーマットが決定します。

1.既にTGAファイルにフォーマット情報が記録されている場合はそのフォーマットを使用する。
2.フォーマット情報がない場合は、αチャンネルの有無で rgb565 又は rgb5a3 のどちらかを選択する。

NintendoWare用Photoshopプラグインなどから出力したTGAファイルなどは、既に
フォーマット情報が埋め込まれているので、おまかせ変換の方が良いかもしれません。

==========================================================================
既知の問題点
==========================================================================
1.おまかせ変換以外でミップマップを生成した場合、既にプラグイン等でフォーマットや
ミップマップ情報が追加されているTGAファイルを入力した場合でも、強制的に上書きしてしまいます。

2.パレット形式フォーマット

c4
c8
c14

には対応していません。


==========================================================================
注意事項
==========================================================================
本ツールはまだいくつかの不具合が残っている可能性があります。

nw4r_texmipmap/run.bat#

@echo off
rem **********************************************************
rem * 自動ミップマップ生成ツール
rem **********************************************************


rem **********************************************************
rem *
rem * TGAファイル出力フォルダ
rem *
rem **********************************************************
set OUTPUT_TGA=out_tga

rem **********************************************************
rem *
rem * rtexファイル出力フォルダ
rem *
rem **********************************************************
set OUTPUT_RTEX=out_rtex

rem **********************************************************
rem *
rem * ミップレベル(0指定で生成可能最大レベルまで生成)
rem *
rem **********************************************************
set LEVEL=0



rem **********************************************************
rem * ここから処理
rem **********************************************************
%~d0
cd %~dp0

pushd "%OUTPUT_RTEX%"
del /f /q *.rtex
popd

del /f /q error.txt

if "%~1"=="" goto ALL

pushd "%OUTPUT_TGA%"
del /q *.tga
popd

:LOOP_TOP
if "%~1"=="" goto NEXT
nw4r_texmipmap.exe --verbose -l %LEVEL% --overwrite -o "%OUTPUT_TGA%" "%~1" 2>> error.txt
if ERRORLEVEL 1 goto ERROR_MIPMAP
shift
goto LOOP_TOP

:NEXT
%NW4R_ROOT%\CommandLineTools\bin\nw4r_texcvtr.exe -o "%OUTPUT_RTEX%" "%OUTPUT_TGA%"
if ERRORLEVEL 1 goto ERROR_TEXCONV
goto END

:ALL
nw4r_texmipmap.exe --verbose -l %LEVEL% --overwrite -o "%OUTPUT_TGA%" "%OUTPUT_TGA%" 2>> error.txt
if ERRORLEVEL 1 goto ERROR_MIPMAP
"%NW4R_ROOT%\CommandLineTools\bin\nw4r_texcvtr.exe" -o "%OUTPUT_RTEX%" "%OUTPUT_TGA%"
if ERRORLEVEL 1 goto ERROR_TEXCONV
goto END


:ERROR_MIPMAP
echo ミップマップ作成に失敗しました。
echo カレントフォルダにある error.txt を釜井の方まで提出してください。
goto END

:ERROR_TEXCONV
echo rtexファイル作成に失敗しました。
goto END

:END
pause

PathConverter.exe#

Converts Stage Guide Path XML files to SRC.

PathPhysXConverter.exe#

Converts PhysX Stage Guide Path XML files to SRC.

PlayerPosition/player_position_wii.exe#

To do:
todo

setcvtr.exe#

Converts SET XML files to SRC.

SetParticleListCnv.exe#

Converts SET Particle List XML files to SRC.

SetSoundListCnv.exe#

Converts SET Sound List XML files to SRC.

SoundCurveCnv.exe#

Converts curve_table to a SRC file.

StaffConv.exe#

Converts the staff script when using staffroll.xml and staffroll_scr.xml, outputting a source script file (.src).

StgMapConverter.exe#

Converts MAP files to SRC (and also archives?).

TexConv.exe#

Generic texture conversion tool from the Wii SDK.

xTextViewer/xTextViewer.exe#

A localization tool previously from Sega's GE1 department. It converts text from source files (XML) to compiled (XTB) text files for the game. The tool also has a GUI, providing support for viewing of both formats, as well as command-line arguments but it is recommended to create folders as the tool doesn't support creating them that way:

/finish - Closes the tool after the task is successful.
/output - Output folder, must be used with ":"
/input - Input XML file, must be used with ":"
/check - Immediately closes the program.