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: |
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: |
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("&", "&")
staff_roll_text = staff_roll_text.replace(" & ", " & ")
staff_roll_text = staff_roll_text.replace(" AND ", " & ")
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: |
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: |
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: |
Common NW4R tool for archiving content, but modified by Sekiguchi.
Revolution Archiver(custom version) Ver.1.04 t.sekiguchi
DistortionConv.exe#
|
|
To do: |
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: |
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: |
Converts the FlowExList XML?
FlowListCnv.exe <入力ファイル><出力ファイル>
入力ファイル:XML
出力ファイル:binarc形式
FlowListCnv/FlowListCnv.exe#
|
|
To do: |
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: |
GismoConverter for SONIC2010
Usage:GismoConverter.exe [options]
-? Display this help.
-o=filename Specify output filename.
GismoBinaryMaker.exe#
|
|
To do: |
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: |
Converts a glare XML file to SRC.
GrassConv.exe#
Converts a grass XML file to SRC.
HintConv.exe#
|
|
To do: |
hnd2collision.exe#
A tool that converts HND/HNA to Havok/PhysX Collision.
LightFieldConv.exe#
|
|
To do: |
LocalLightConv.exe#
|
|
To do: |
MakeStageToken.exe#
|
|
To do: |
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: |
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: |
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: |
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.