thcrap_log.4
thcrap_log.4
System Information:
CPU: Intel(R) Pentium(R) CPU G4400 @ 3.30GHz
RAM: 2.84GiB free out of 7.9GiB, 63% used
OS/Runtime: Windows 11, Build 26100
Code pages: ANSI=1252, OEM=437
Screens:
Generic PnP Monitor on Intel(R) HD Graphics 510: 1680x1050@32 60Hz
――――――――――――――――――――――――――――――――――――――――――――――――――
Initializing plug-ins...
(JSON) Resolving th06/dictdefs.js... not found
(JSON) Resolving th06/dicttrans.js... not found
(JSON) Resolving stringdefs.js...
+ E:/arcade/thcrap/repos/nmlgc/base_tsa/stringdefs.js
+ E:/arcade/thcrap/repos/nmlgc/script_latin/stringdefs.js
+ E:/arcade/thcrap/repos/thpatch/lang_vi/stringdefs.js
(JSON) Resolving th06/stringlocs.js... not found
(Font) Loading Aroania.ttf (426296 bytes)...
(Font) Loading Cirno.ttf (28952 bytes)...
(Font) Loading THBiolinum.otf (557212 bytes)...
[Plugin] act_nut_lib.dll: not a plugin
[Plugin] bmpfont_create_gdi.dll: not a plugin
[Plugin] bmpfont_create_gdiplus.dll: not a plugin
[Plugin] fribidi.dll: not a plugin
[Plugin] libcrypto-1_1.dll: not a plugin
[Plugin] libcurl.dll: not a plugin
[Plugin] libpng16.dll: not a plugin
[Plugin] libssl-1_1.dll: not a plugin
[Plugin] Microsoft.Bcl.AsyncInterfaces.dll: not a plugin
[Plugin] Microsoft.WindowsAPICodePack.dll: not a plugin
[Plugin] Microsoft.WindowsAPICodePack.Shell.dll: not a plugin
[Plugin] Microsoft.WindowsAPICodePack.ShellExtensions.dll: not a plugin
[Plugin] Microsoft.Xaml.Behaviors.dll: not a plugin
[Plugin] steam_api.dll: not a plugin
[Plugin] System.Buffers.dll: not a plugin
[Plugin] System.Memory.dll: not a plugin
[Plugin] System.Numerics.Vectors.dll: not a plugin
[Plugin] System.Runtime.CompilerServices.Unsafe.dll: not a plugin
[Plugin] System.Text.Encodings.Web.dll: not a plugin
[Plugin] System.Text.Json.dll: not a plugin
[Plugin] System.Threading.Tasks.Extensions.dll: not a plugin
[Plugin] System.ValueTuple.dll: not a plugin
[Plugin] thcrap_i18n.dll: not a plugin
[Plugin] thcrap_tasofro.dll: not used for this game
(JSON) Resolving th06/stages.js... not found
(JSON) Resolving th06/missions.js... not found
(JSON) Resolving th06/loops.js... not found
(JSON) Resolving themes.js...
+ E:/arcade/thcrap/repos/nmlgc/base_tsa/themes.js
+ E:/arcade/thcrap/repos/thpatch/lang_vi/themes.js
(JSON) Resolving th06/musiccmt.js... not found
(JSON) Resolving th06/spells.js... not found
(JSON) Resolving th06/spellcomments.js... not found
[Plugin] thcrap_tsa.dll: initialized and active
[Plugin] thcrap_update_disabled.dll: not a plugin
[Plugin] Xceed.Wpf.AvalonDock.dll: not a plugin
[Plugin] Xceed.Wpf.AvalonDock.Themes.Aero.dll: not a plugin
[Plugin] Xceed.Wpf.AvalonDock.Themes.Metro.dll: not a plugin
[Plugin] Xceed.Wpf.AvalonDock.Themes.VS2010.dll: not a plugin
[Plugin] Xceed.Wpf.Toolkit.dll: not a plugin
Applying thcrap detours to E:\$RECYCLE.BIN\S-1-5-21-3252532104-690611358-757826401-
1002\$R2VT27F\東方紅魔郷.exe...
Detouring DLL functions (dinput8.dll)...
( 1/ 1) DirectInput8Create... OK
Detouring DLL functions (dsound.dll)...
( 1/ 3) DirectSoundEnumerateA... not found
( 2/ 3) DirectSoundCaptureEnumerateA... not found
( 3/ 3) DirectSoundCreate8... OK
Detouring DLL functions (d3d8.dll)...
( 1/ 1) Direct3DCreate8... OK
Detouring DLL functions (winmm.dll)...
( 1/10) mmioDescend... OK
( 2/10) mmioAdvance... OK
( 3/10) mmioSetInfo... OK
( 4/10) mmioClose... OK
( 5/10) mmioAscend... OK
( 6/10) mmioGetInfo... OK
( 7/10) mmioOpenA... OK
( 8/10) mmioSeek... OK
( 9/10) mmioRead... OK
(10/10) joyGetPosEx... OK
Detouring DLL functions (kernel32.dll)...
( 1/42) CreateProcessA... not found
( 2/42) CopyFileA... not found
( 3/42) CreateFileMappingA... not found
( 4/42) MultiByteToWideChar... OK
( 5/42) CopyFileExA... not found
( 6/42) GetPrivateProfileIntA... not found
( 7/42) CreateDirectoryA... OK
( 8/42) CreateFileA... OK
( 9/42) DeleteFileA... OK
(10/42) FindFirstFileA... OK
(11/42) FindNextFileA... OK
(12/42) FormatMessageA... not found
(13/42) WideCharToMultiByte... OK
(14/42) GetCurrentDirectoryA... OK
(15/42) CreateRemoteThread... not found
(16/42) GetFileAttributesA... not found
(17/42) GetEnvironmentVariableA... not found
(18/42) GetFileAttributesExA... not found
(19/42) GetTempPathA... not found
(20/42) GetFullPathNameA... not found
(21/42) GetCommandLineA... OK
(22/42) GetModuleFileNameA... OK
(23/42) GetModuleHandleExA... not found
(24/42) GetPrivateProfileStringA... not found
(25/42) CreateProcessW... not found
(26/42) GetStartupInfoA... OK
(27/42) SetEnvironmentVariableA... OK
(28/42) GetTempFileNameA... not found
(29/42) MoveFileA... not found
(30/42) IsDBCSLeadByte... not found
(31/42) LoadLibraryA... OK
(32/42) MoveFileExA... not found
(33/42) MoveFileWithProgressA... not found
(34/42) OpenFileMappingA... not found
(35/42) ReadFile... OK
(36/42) RemoveDirectoryA... not found
(37/42) SetCurrentDirectoryA... OK
(38/42) WriteFile... OK
(39/42) WritePrivateProfileStringA... not found
(40/42) ExitProcess... OK
(41/42) LoadLibraryW... not found
(42/42) CloseHandle... OK
Detouring DLL functions (user32.dll)...
( 1/26) CallWindowProcA... not found
( 2/26) CharLowerA... not found
( 3/26) DefWindowProcA... OK
( 4/26) InsertMenuItemA... not found
( 5/26) CreateWindowExA... OK
( 6/26) CharNextA... not found
( 7/26) CreateDialogParamA... not found
( 8/26) DialogBoxParamA... not found
( 9/26) DrawTextA... OK
(10/26) GetClassInfoA... not found
(11/26) GetClassInfoExA... not found
(12/26) GetWindowLongA... OK
(13/26) SetWindowLongA... not found
(14/26) GetWindowLongPtrA... not found
(15/26) LoadStringA... not found
(16/26) RegisterClassExA... not found
(17/26) MessageBoxA... OK
(18/26) RegisterClassA... OK
(19/26) SetDlgItemTextA... not found
(20/26) SetMenuItemInfoA... not found
(21/26) SetWindowLongPtrA... not found
(22/26) SetWindowTextA... not found
(23/26) TabbedTextOutA... not found
(24/26) UnregisterClassA... not found
(25/26) GetWindowRect... not found
(26/26) RegisterClassW... not found
Detouring DLL functions (gdi32.dll)...
( 1/20) AddFontResourceExA... not found
( 2/20) EnumFontFamiliesExA... not found
( 3/20) CreateFontA... OK
( 4/20) CreateFontIndirectA... OK
( 5/20) GetGlyphOutlineA... not found
( 6/20) CreateFontIndirectExA... not found
( 7/20) EnumFontsA... not found
( 8/20) ExtTextOutA... not found
( 9/20) EnumFontFamiliesA... not found
(10/20) GetTextExtentPoint32A... not found
(11/20) RemoveFontResourceExA... not found
(12/20) TextOutA... OK
(13/20) CreateFontIndirectW... not found
(14/20) CreateFontW... not found
(15/20) CreateFontIndirectExW... not found
(16/20) CreateCompatibleDC... OK
(17/20) DeleteDC... OK
(18/20) DeleteObject... OK
(19/20) SelectObject... OK
(20/20) TextOutW... not found
------------------------
Setting up binary hacks...
------------------------
( 1/50) sprintf_call_ebp-50 (Safe sprintf (ebp-50))...
at 0x00434C8B... OK
( 2/50) sprintf_rep (Safe sprintf (replace))...
at 0x00434D8E... OK
at 0x0043830C... OK
( 3/50) ending_copy_rem (Remove the 32-byte split in ending messages, #1 (remember
line start and skip to the end of the string))...
at 0x004103F2... OK
( 4/50) ending_copy_rep (Remove the 32-byte split in ending messages, #2 (LEA →
MOV))...
at 0x004104D5... OK
( 5/50) hud_force_redraw (Redraw the HUD every frame, because we might be drawing
TL notes there)...
at 0x00419F81... OK
( 6/50) reacquire_input (Fix input glitching out in TH06/TH07)...
at 0x0041DC58... OK
( 7/50) sprintf_replay_1 (Replay name sprintf 1)...
at 0x0042C6DD... OK
( 8/50) sprintf_replay_2 (Replay name sprintf 2)...
at 0x0042CD4A... OK
( 9/50) sprintf_replay_3 (Replay name sprintf 3)...
at 0x004382BD... OK
(10/50) file_remove_size_assignment (Remove the assignment of the file size global,
which we did in th06_file_load before)...
at 0x0041E399... OK
(11/50) buffer_overflow_rem (Fix buffer overflows (remove copy))...
at 0x00434B85... OK
at 0x00434E63... OK
(12/50) buffer_overflow_rep_eax (Fix buffer overflows (replace EAX))...
at 0x00434BA0... OK
at 0x00434F74... OK
(13/50) buffer_overflow_rep_ecx (Fix buffer overflows (replace ECX))...
at 0x00434D17... OK
at 0x00434EF7... OK
(14/50) right_align (Correct right-alignment)...
at 0x00434D6C... OK
(15/50) spell_draw_leftaligned (Draw boss spell cards left-aligned rather than
right-aligned, since we right-align the position of the reduced sprite instead)...
at 0x00417CC1... OK
(16/50) spell_width (Calculate the correct width of the player and boss spell card
background boxes)...
at 0x00417B92... OK
at 0x00417CC8... OK
(17/50) center_align (Correct center-alignment)...
at 0x00434F3C... OK
(18/50) bomb_pos (Correctly align the position of the bomb name sprites)...
at 0x0041AFD8... OK
(19/50) spell_pos (Correctly align the position of the spell card name sprites)...
at 0x0041B08C... OK
(20/50) spell_pos_reset (Reset the bomb/spell card name sprite position after the
sprite rendering call to the unmanipulated one to avoid animation glitches)...
at 0x0041B056... OK
at 0x0041B104... OK
(21/50) spell_prepare (Prepare ECL instruction register for spell ID fetching)...
at 0x00407509... OK
(22/50) spell_fetch_id (Fetch spell ID)...
at 0x00409622... OK
(23/50) unpatch_result_spell (Remove English patch spell translation lookup in the
Result screen)...
at 0x0042E2A9... OK
(24/50) result_spell_cap_pos_1 ((Result screen) Move the capture rate to the right
to match the maximum on-screen spell card length (#1: Save original coordinate and
move))...
at 0x0042EB18... OK
(25/50) result_spell_cap_pos_2 ((Result screen) Move the capture rate to the right
to match the maximum on-screen spell card length (#2: Restore))...
at 0x0042EB67... OK
(26/50) set_png_buff_size (Remove a buffer overflow check in PNG reading (because
we usually provide a bigger buffer))...
at 0x004319DC... OK
at 0x00431AAC... OK
(27/50) music_room_cmt_print_empty_lines (In music comment, render text strings
even if they are empty in the source file)...
at 0x00425C3A... OK
at 0x004250C9... OK
(28/50) music_room_cmt_shift_2nd_part (In music comment, shift the 2nd half of the
text 247px to the left)...
at 0x00425B9B... OK
(29/50) text_1024 (Enlarge the width of the text surface to 1024 pixels)...
at 0x0041F014... OK
(30/50) text_prepare_surface_width (Use the surface width rather than the sprite
width when preparing the text rendering bitmap)...
at 0x0041F0DD... OK
at 0x0041F16A... OK
(31/50) text_sprite_height (Use sprite height for text sprites, not texture
height)...
at 0x00434CC6... OK
at 0x00434DB5... OK
at 0x00434EA6... OK
at 0x00434F9B... OK
(32/50) text_sprite_width (Calculate text alignment based on sprite width, not
texture width)...
at 0x00434CD8... OK
at 0x00434D55... OK
at 0x00434DC7... OK
at 0x00434EB8... OK
at 0x00434F32... OK
at 0x00434FAD... OK
(33/50) text_scale_x (Fix text scaling, #1: Correct width)...
at 0x0041F1C3... OK
(34/50) text_scale_y (Fix text scaling, #2: Hardcode the DIB copy region height to
32, matching the hardcoded sprite copy region of 16 above)...
at 0x0041F1CD... OK
(35/50) sprite3d_rotated_voodookill (Correctly scale rotated sprites in 3D space
from textures wider than 256 pixels)...
at 0x00433193... OK
(36/50) sprite3d_unrotated_voodookill (Correctly scale unrotated sprites in 3D
space from textures wider than 256 pixels)...
at 0x00433709... OK
(37/50) remove_score_cap (Don't cap the score at 999,999,990)...
at 0x0041B8B0... OK
at 0x0041B8BC... OK
(38/50) bosstitle_line_order#1 (Render the two boss title lines in the opposite
order, #1: Name)...
at 0x00419545... OK
(39/50) bosstitle_line_order#2 (Render the two boss title lines in the opposite
order, #2: Title)...
at 0x0041955C... OK
(40/50) ascii_patch_1 (Hook ZUN's variadic ASCII printing function to perform a
bunch of intricate hacks in C++ code (#1: Call, and write the inner function))...
at 0x00401667... OK
(41/50) ascii_patch_2 (Hook ZUN's variadic ASCII printing function to perform a
bunch of intricate hacks in C++ code (#2: Return from the inner function))...
at 0x00401694... OK
(42/50) result_rank_format (Run the Result rank string through the variadic ASCII
printing function)...
at 0x0042D4A4... OK
(43/50) result_shottype_leftalign_1 (Work around broken shot type centering in the
result screen by just rendering them left-aligned (for now) (#1))...
at 0x0042BD16... OK
(44/50) result_shottype_leftalign_2 (Work around broken shot type centering in the
result screen by just rendering them left-aligned (for now) (#2))...
at 0x0042BD5B... OK
(45/50) result_shottype_leftalign_3 (Work around broken shot type centering in the
result screen by just rendering them left-aligned (for now) (#3))...
at 0x0042E0CF... OK
(46/50) result_shottype_leftalign_4 (Work around broken shot type centering in the
result screen by just rendering them left-aligned (for now) (#4))...
at 0x0042E0FC... OK
(47/50) dialog_box_leftedge...
at 0x004191EE... OK
at 0x0041927C... OK
(48/50) dialog_box_rightedge_1...
at 0x00419232... OK
at 0x004192C3... OK
(49/50) dialog_box_rightedge_2...
at 0x00419244... OK
at 0x004192D5... OK
(50/50) unpatch_ending_halfskip (Unpatch the static English patch's rendering skip
of the second-half ending text sprite)...
at 0x00410521... OK
-------------------------
Rendering binary hacks... (source cave at 0x02870000)
-------------------------
at 0x00434C8B... OK
at 0x00434D8E... OK
at 0x0043830C... OK
at 0x004103F2... OK
at 0x004104D5... OK
at 0x00419F81... OK
at 0x0041DC58... OK
at 0x0042C6DD... OK
at 0x0042CD4A... OK
at 0x004382BD... OK
at 0x0041E399... OK
at 0x00434B85... OK
at 0x00434E63... OK
at 0x00434BA0... OK
at 0x00434F74... OK
at 0x00434D17... OK
at 0x00434EF7... OK
at 0x00434D6C... OK
at 0x00417CC1... OK
at 0x00417B92... OK
at 0x00417CC8... OK
at 0x00434F3C... OK
at 0x0041AFD8... OK
at 0x0041B08C... OK
at 0x0041B056... OK
at 0x0041B104... OK
at 0x00407509... OK
at 0x00409622... OK
at 0x0042E2A9... OK
at 0x0042EB18... OK
at 0x0042EB67... OK
at 0x004319DC... OK
at 0x00431AAC... OK
at 0x00425C3A... OK
at 0x004250C9... OK
at 0x00425B9B... OK
at 0x0041F014... OK
at 0x0041F0DD... OK
at 0x0041F16A... OK
at 0x00434CC6... OK
at 0x00434DB5... OK
at 0x00434EA6... OK
at 0x00434F9B... OK
at 0x00434CD8... OK
at 0x00434D55... OK
at 0x00434DC7... OK
at 0x00434EB8... OK
at 0x00434F32... OK
at 0x00434FAD... OK
at 0x0041F1C3... OK
at 0x0041F1CD... OK
at 0x00433193... OK
at 0x00433709... OK
at 0x0041B8B0... OK
at 0x0041B8BC... OK
at 0x00419545... OK
at 0x0041955C... OK
at 0x00401667... OK
at 0x00401694... OK
at 0x0042D4A4... OK
at 0x0042BD16... OK
at 0x0042BD5B... OK
at 0x0042E0CF... OK
at 0x0042E0FC... OK
at 0x004191EE... OK
at 0x0041927C... OK
at 0x00419232... OK
at 0x004192C3... OK
at 0x00419244... OK
at 0x004192D5... OK
at 0x00410521... OK
-------------------------
Setting up breakpoints...
-------------------------
( 1/27) ascii_params...
at 0x00423AA9... OK
( 2/27) strings_lookup#cavesize_6...
at 0x0041E623... OK
at 0x0041E4D3... OK
( 3/27) th06_file_name...
at 0x0041E370... OK
( 4/27) th06_file_size...
at 0x0043CB91... OK
( 5/27) th06_file_load...
at 0x0043CBAC... OK
( 6/27) th06_file_loaded...
at 0x0043CE19... OK
( 7/27) gentext#stage_title...
at 0x0041856A... OK
( 8/27) spell_name...
at 0x0040962B... OK
( 9/27) spell_name#result...
at 0x0042E2B4... OK
(10/27) th06_time_fix...ERROR: function 'BP_th06_time_fix' not found! (outdated or
corrupt thcrap installation, maybe?)
(11/27) music_title#track...
at 0x00425A19... OK
(12/27) music_title...
at 0x00425A66... OK
(13/27) th06_music_title_in_game#stage_num...
at 0x00404510... OK
(14/27) th06_music_title_in_game...
at 0x004185B0... OK
(15/27) th06_music_title_in_game#boss...
at 0x00418D4F... OK
(16/27) music_cmt#track0...
at 0x00425B87... OK
(17/27) music_cmt#track...
at 0x00425090... OK
(18/27) music_cmt#line_num...
at 0x00425C17... OK
at 0x004250A6... OK
(19/27) music_cmt...
at 0x00425C67... OK
at 0x004250F6... OK
(20/27) textimage_set#stage...
at 0x004184FD... OK
(21/27) textimage_set#bossbgm...
at 0x00418CF9... OK
(22/27) textimage_is_active#sttitle...
at 0x00418584... OK
(23/27) textimage_is_active#stlogo...
at 0x0041AE99... OK
at 0x0041AEC3... OK
at 0x0041AEE4... OK
(24/27) textimage_is_active#bgm...
at 0x004185CF... OK
at 0x00418D6B... OK
(25/27) textimage_is_active#boss...
at 0x00418E64... OK
(26/27) textimage_init...
at 0x0042047E... OK
(27/27) th06_screenshot...
at 0x0041CB67... OK
-------------------------
Rendering breakpoints... (source cave at 0x03910000, call cave at 0x03920000)
-------------------------
fixing rel offset 0xFFFDD812 to 0xFCAF12BB...
fixing rel offset 0x1C897 to 0xFCB24C9B...
fixing rel offset 0xFFFE67B2 to 0xFCAF14BB...
fixing rel offset 0xFFFE6788 to 0xFCAF14AB...
fixing rel offset 0xFFFE6767 to 0xFCAF149B...
fixing rel offset 0x1C66C to 0xFCB24A7B...
fixing rel offset 0x1BED0 to 0xFCB24A6B...
fixing rel offset 0x1BDD7 to 0xFCB24A5B...
fixing rel offset 0x33E8 to 0xFCB13676...
---------------------------
Complete run configuration:
---------------------------
runcfg fn: 'E:\arcade\thcrap\config\vi.js'
thcrap dir: 'E:\arcade\thcrap\'
game id: 'th06'
build id: 'v1.02h'
game title: '東方紅魔郷 ~ the Embodiment of Scarlet Devil'
command line: '(null)'
update URL: 'http://www16.big.or.jp/~zun/html/th06.html'
latest: 'v0.13' 'v1.02h'
dat_dump: '(null)'
patched_files_dump: '(null)'
---------------------------
Patch stack:
---------------------------
Patches in the stack: base_tsa, base_tasofro, script_latin, lang_vi
[1] base_tsa:
archive: E:/arcade/thcrap/repos/nmlgc/base_tsa/
title: Basic support for Team Shanghai Alice games
update: true
ignore: ''
servers: 'https://mirrors.thpatch.net/nmlgc/base_tsa/'
[2] base_tasofro:
archive: E:/arcade/thcrap/repos/nmlgc/base_tasofro/
title: Basic support for Tasogare Frontier games
update: true
ignore: ''
servers: 'https://mirrors.thpatch.net/nmlgc/base_tasofro/'
[3] script_latin:
archive: E:/arcade/thcrap/repos/nmlgc/script_latin/
title: Shared data for languages using Latin script
update: true
ignore: ''
servers: 'https://mirrors.thpatch.net/nmlgc/script_latin/'
[4] lang_vi:
archive: E:/arcade/thcrap/repos/thpatch/lang_vi/
title: Vietnamese community translations
update: true
ignore: ''
servers: 'https://srv.thpatch.net/lang_vi/'
---------------------------
Run configuration JSON:
---------------------------
{
"console": false,
"dat_dump": false,
"patched_files_dump": false,
"patches": [
{
"archive": "repos/nmlgc/base_tsa/"
},
{
"archive": "repos/nmlgc/base_tasofro/"
},
{
"archive": "repos/nmlgc/script_latin/"
},
{
"archive": "repos/thpatch/lang_vi/"
}
],
"runcfg_fn": [
"E:\\arcade\\thcrap\\config\\vi.js"
],
"thcrap_version_min": "0x20170905",
"thcrap_url": "http://thpatch.net/wiki/Project:Download",
"options": {
"gdi32_dll_name_w": {
"type": "w",
"val": "gdi32.dll"
},
"CreateFontW_name": {
"type": "s",
"val": "CreateFontW"
},
"MS_Gothic_name_w": {
"type": "w",
"val": "MS ゴシック"
}
},
"binhacks": {
"log_restore": {
"code": "e9[log_printf]",
"title": "Restore the game's built-in logging"
},
"menu_desc_align": {
"code": "52 ff75ac ff75b0 e8[GetTextExtentForFontID] 8d440010 50 db0424 58 59
89ca 90909090",
"title": "Menu description alignment"
},
"result_spell_align": {
"code": "31c0",
"title": "Remove spell \"alignment\" in the result screen"
},
"spell_name_fetch": {
"code": "8b4d0c5131c9515151",
"title": "Prepare deferred spell name fetching"
},
"sprintf_call_esp+14": {
"code": "50e8[strings_vsprintf]89442414",
"title": "Safe sprintf (esp+14)"
},
"sprintf_call_esp+18": {
"code": "50e8[strings_vsprintf]89442418",
"title": "Safe sprintf (esp+18)"
},
"sprintf_call_esp+1c": {
"code": "50e8[strings_vsprintf]8944241c",
"title": "Safe sprintf (esp+1c)"
},
"sprintf_call_esp+34": {
"code": "50e8[strings_vsprintf]89442434",
"title": "Safe sprintf (esp+34)"
},
"sprintf_call_esp+38": {
"code": "e8[strings_vsprintf]89442434",
"title": "Safe sprintf (esp+34)"
},
"sprintf_call_esp+3c": {
"code": "50e8[strings_vsprintf]8944243c",
"title": "Safe sprintf (esp+3c)"
},
"sprintf_call_ebp-50": {
"code": "50e8[strings_vsprintf]8945b0",
"title": "Safe sprintf (ebp-50)",
"addr": "Rx34c8b"
},
"sprintf_call_ebp-88": {
"code": "50e8[strings_vsprintf]898578ffffff",
"title": "Safe sprintf (ebp-88)"
},
"sprintf_call_ebp-8c": {
"code": "50e8[strings_vsprintf]898574ffffff",
"title": "Safe sprintf (ebp-8c)"
},
"sprintf_call_ebp-208": {
"code": "5190909090909090909090e8[strings_vsprintf]83c40c509090",
"title": "Safe sprintf (ebp-208)"
},
"sprintf_call_ebp-200": {
"code": "5090909090909090909090e8[strings_vsprintf]8b4d0c83c40c509090",
"title": "Safe sprintf (ebp-200)"
},
"sprintf_msvcrt14_esp+34": {
"title": "Safe Visual Studio 2015-style sprintf (esp+34)",
"code": "e8[strings_vsprintf_msvcrt14]89442434"
},
"sprintf_msvcrt14_esp+3c": {
"title": "Safe Visual Studio 2015-style sprintf (esp+3c)",
"code": "e8[strings_vsprintf_msvcrt14]8944243c"
},
"sprintf_msvcrt14_ebp-10c": {
"title": "Safe Visual Studio 2015-style sprintf (ebp-10c)",
"code": "e8[strings_vsprintf_msvcrt14]8985f4feffff"
},
"sprintf_replay_use_ecx_2": {
"code": "e8[strings_sprintf] 83c4 0c 89c1 9090"
},
"sprintf_replay_use_ecx_5": {
"code": "e8[strings_sprintf] 83c4 0c 89c1 9090909090"
},
"sprintf_rep": {
"code": "8b",
"title": "Safe sprintf (replace)",
"addr": [
"Rx34d8e",
"Rx3830c"
]
},
"meiryo_strcmp_remove": {
"code": "9090",
"title": "Don't restrict use of the Meiryo font to Japanese locale"
},
"ending_copy_rem": {
"title": "Remove the 32-byte split in ending messages, #1 (remember line
start and skip to the end of the string)",
"code": "8B8548FFFFFF8B886C110000 894dd0 803900 7406 41 ff45cc ebf5
89886c110000
90909090909090909090909090909090909090909090909090909090909090909090909090909090909
0909090909090909090909090909090",
"addr": "Rx103f2"
},
"ending_copy_rep": {
"code": "8b55d0 5268D0D0C0008B8548FFFFFF",
"title": "Remove the 32-byte split in ending messages, #2 (LEA → MOV)",
"addr": "Rx104d5"
},
"spell_align": {
"title": "Correctly align right-aligned text (TH16+)",
"code": "ff7518 56 e8[GetTextExtentForFontID] 83c008 d1e0 89c6 8b442410
8b4c240c 8b542414 8b4c8808 8bc1 c1f808 8b9482f0f48401 0fb6c1 8d0c40 8b8224010000
8b0cc8 8b451c 8d1400 89f0 8b742410 909090"
},
"antitamper_remove_check": {
"title": "Don't quit the game on an invalid anti-tampering checksum",
"code": "33c0 c3"
},
"hud_force_redraw": {
"title": "Redraw the HUD every frame, because we might be drawing TL notes
there",
"code": "909090909090",
"addr": "Rx19f81"
},
"reacquire_input": {
"title": "Fix input glitching out in TH06/TH07",
"code": "00000000 74",
"addr": "Rx1dc58"
},
"sprintf_replay_1": {
"code": "e8[strings_sprintf] 83c4 0c 909090 6a 01",
"title": "Replay name sprintf 1",
"addr": "Rx2c6dd"
},
"sprintf_replay_2": {
"code": "e8[strings_sprintf] 83c4 0c ffb5 58ffffff 830424 34 909090909090",
"title": "Replay name sprintf 2",
"addr": "Rx2cd4a"
},
"sprintf_replay_3": {
"code": "e8[strings_sprintf] 83c4 0c 6a 01 8945 a8",
"title": "Replay name sprintf 3",
"addr": "Rx382bd"
},
"file_remove_size_assignment": {
"code": "83c404 90909090909090",
"title": "Remove the assignment of the file size global, which we did in
th06_file_load before",
"addr": "Rx1e399"
},
"buffer_overflow_rem": {
"code": "eb1990",
"title": "Fix buffer overflows (remove copy)",
"addr": [
"0x434b85",
"0x434e63"
]
},
"buffer_overflow_rep_eax": {
"code": "8b4518",
"title": "Fix buffer overflows (replace EAX)",
"addr": [
"0x434ba0",
"0x434f74"
]
},
"buffer_overflow_rep_ecx": {
"code": "8b4d18",
"title": "Fix buffer overflows (replace ECX)",
"addr": [
"0x434d17",
"0x434ef7"
]
},
"right_align": {
"code": "52 ff75b0 e8[GetTextExtentForFontID] 83c002 50 db0424 58
90909090909090",
"title": "Correct right-alignment",
"addr": "0x434d6c"
},
"spell_draw_leftaligned": {
"title": "Draw boss spell cards left-aligned rather than right-aligned, since
we right-align the position of the reduced sprite instead",
"addr": "0x417cc1",
"code": "9bce0100"
},
"spell_width": {
"code": "8b450c 6a0f 50 e8[GetTextExtentForFontID] 83c004 50 3edb0424 58
8b4df4 8b89c0000000 d94118 d8d1 dfe0 f6c401 7402 d9c9 ddd8 d9510c d95130 d9c0
d94118 def9 d95924 909090909090",
"title": "Calculate the correct width of the player and boss spell card
background boxes",
"addr": [
"0x417b92",
"0x417cc8"
]
},
"center_align": {
"code": "ff75ac ff7518 e8[GetTextExtentForFontID] 83c002 d1f8 50 db0424 58
eb17 9090",
"title": "Correct center-alignment",
"addr": "0x434f3c"
},
"bomb_pos": {
"code": "68 +0.5f d90424 59 8b5804 8db374200000 8dbb94220000 8b4e30 53 ff36
d94130 d94118 d9c1 d8cb dee9 d82e d91e a5 a5 a5 8d76f4 d94008 dee9 dec9 d806 89d8
909090909090909090",
"title": "Correctly align the position of the bomb name sprites",
"addr": "0x41afd8"
},
"spell_pos": {
"code": "68 +0.5f d90424 59 8b5804 8db384210000 8dbba4230000 8b4e30 53 ff36
d94130 d94118 d9c1 d8cb dee9 d806 d91e a5 a5 a5 8d76f4 d9400c dee9 dec9 d806 89d8
909090909090909090",
"title": "Correctly align the position of the spell card name sprites",
"addr": "0x41b08c"
},
"spell_pos_reset": {
"title": "Reset the bomb/spell card name sprite position after the sprite
rendering call to the unmanipulated one to avoid animation glitches",
"addr": [
"0x41b056",
"0x41b104"
],
"code": "bbd02a4300 ffd3 8d8670ffffff 50 8b0d 88456d00 ffd3 8f06 5b 909090"
},
"spell_prepare": {
"code": "8b75e489f183c10c894de80fbf460490",
"title": "Prepare ECL instruction register for spell ID fetching",
"addr": "0x407509"
},
"spell_fetch_id": {
"code": "0fbf4e0e89f083c010500fbf560c",
"title": "Fetch spell ID",
"addr": "0x409622"
},
"unpatch_result_spell": {
"code": "89c1c1e10681c1e8bc6900516a0068ffffff00",
"title": "Remove English patch spell translation lookup in the Result
screen",
"addr": "0x42e2a9"
},
"result_spell_cap_pos_1": {
"code": "ff30 68 +472.0f d80424 59 90",
"title": "(Result screen) Move the capture rate to the right to match the
maximum on-screen spell card length (#1: Save original coordinate and move)",
"addr": "0x42eb18"
},
"result_spell_cap_pos_2": {
"code": "8f00 9090909090909090909090909090",
"title": "(Result screen) Move the capture rate to the right to match the
maximum on-screen spell card length (#2: Restore)",
"addr": "0x42eb67"
},
"set_png_buff_size": {
"code": "baffffff7f90",
"title": "Remove a buffer overflow check in PNG reading (because we usually
provide a bigger buffer)",
"addr": [
"0x4319dc",
"0x431aac"
]
},
"music_room_cmt_print_empty_lines": {
"code": "9090",
"title": "In music comment, render text strings even if they are empty in the
source file",
"addr": [
"0x00425c3a",
"0x004250c9"
]
},
"music_room_cmt_shift_2nd_part": {
"code":
"8B45FC8B1588456D0081C2348A01006BC03801C2C702000077C383EA70C702000077C3909090909090
90909090909090909090909090909090909090909090909090909090909090909090909090909090909
0909090909090909090909090909090909090909090909090909090",
"title": "In music comment, shift the 2nd half of the text 247px to the
left",
"addr": "0x425b9b"
},
"text_1024": {
"code": "68 00040000",
"title": "Enlarge the width of the text surface to 1024 pixels",
"addr": "Rx1f014"
},
"text_prepare_surface_width": {
"code": "8b45a8 9090",
"title": "Use the surface width rather than the sprite width when preparing
the text rendering bitmap",
"addr": [
"Rx1f0dd",
"Rx1f16a"
]
},
"text_prepare_surface_width_trial_1": {
"code": "50 ff7588 56 56",
"title": "Use the surface width rather than the sprite width when preparing
the text rendering bitmap (Trial, #1)"
},
"text_prepare_surface_width_trial_2": {
"code": "8d4d84 ff7588 90",
"title": "Use the surface width rather than the sprite width when preparing
the text rendering bitmap (Trial, #2)"
},
"text_sprite_height": {
"expected": "14",
"code": "2c",
"title": "Use sprite height for text sprites, not texture height",
"addr": [
"Rx34cc6",
"Rx34db5",
"Rx34ea6",
"Rx34f9b"
]
},
"text_sprite_width": {
"expected": "18",
"code": "30",
"title": "Calculate text alignment based on sprite width, not texture width",
"addr": [
"Rx34cd8",
"Rx34d55",
"Rx34dc7",
"Rx34eb8",
"Rx34f32",
"Rx34fad"
]
},
"text_scale_x": {
"title": "Fix text scaling, #1: Correct width",
"code": "8d0400 90",
"addr": "Rx1f1c3"
},
"text_scale_y": {
"title": "Fix text scaling, #2: Hardcode the DIB copy region height to 32,
matching the hardcoded sprite copy region of 16 above",
"code": "c745a020000000",
"addr": "Rx1f1cd"
},
"sprite3d_rotated_voodookill": {
"code": "837a7c00 7502 ebd6 8bf2 83c63c b910000000 8dbd40ffffff f3a5 8b5508
83ef40 d907 d84a1c 8b8ac0000000 6800008043 d94118 d90424 def9 dec9 d91f d94218 d9e0
d84f14 d94114 d90424 def9 dec9 59 d95f14 d902 d9ee ded9 dfe0 f6c444 7b23",
"title": "Correctly scale rotated sprites in 3D space from textures wider
than 256 pixels",
"addr": "Rx33193"
},
"sprite3d_unrotated_voodookill": {
"code": "8b5508 8b8ac0000000 8dbd40ffffff 7414 d9412c d84a18 d9e8 d9e8 dec1
def9 d86f34 d95f34 8b8298000000 894738 d907 d84a1c 6800008043 d94118 d90424 def9
dec9 d91f d94218 d9e0 d84f14 d94114 d90424 def9 dec9 58 d95f14 90",
"title": "Correctly scale unrotated sprites in 3D space from textures wider
than 256 pixels",
"addr": "Rx33709"
},
"remove_score_cap": {
"title": "Don't cap the score at 999,999,990",
"code": "ffffff7f",
"addr": [
"0x41b8b0",
"0x41b8bc"
]
},
"bosstitle_line_order#1": {
"title": "Render the two boss title lines in the opposite order, #1: Name",
"code": "a02a0000",
"addr": "Rx19545"
},
"bosstitle_line_order#2": {
"title": "Render the two boss title lines in the opposite order, #2: Title",
"code": "90290000",
"addr": "Rx1955c"
},
"ascii_patch_1": {
"title": "Hook ZUN's variadic ASCII printing function to perform a bunch of
intricate hacks in C++ code (#1: Call, and write the inner function)",
"code": "50 ff7510 ff750c e80b000000 83c00f 50 e8[ascii_vpatchf] eb1d |
8b0424 c3 | ff74240c ff74240c 8b4c240c 90",
"addr": "Rx1667"
},
"ascii_patch_2": {
"title": "Hook ZUN's variadic ASCII printing function to perform a bunch of
intricate hacks in C++ code (#2: Return from the inner function)",
"code": "c3 909090909090",
"addr": "Rx1694"
},
"result_rank_format": {
"title": "Run the Result rank string through the variadic ASCII printing
function",
"addr": "Rx2d4a4",
"code": "6800b94700 e8a241"
},
"result_shottype_leftalign_1": {
"title": "Work around broken shot type centering in the result screen by just
rendering them left-aligned (for now) (#1)",
"addr": "Rx2bd16",
"code": "468e"
},
"result_shottype_leftalign_2": {
"title": "Work around broken shot type centering in the result screen by just
rendering them left-aligned (for now) (#2)",
"addr": "Rx2bd5b",
"code": "018e"
},
"result_shottype_leftalign_3": {
"title": "Work around broken shot type centering in the result screen by just
rendering them left-aligned (for now) (#3)",
"addr": "Rx2e0cf",
"code": "8d6a"
},
"result_shottype_leftalign_4": {
"title": "Work around broken shot type centering in the result screen by just
rendering them left-aligned (for now) (#4)",
"addr": "Rx2e0fc",
"code": "606a"
},
"dialog_box_leftedge": {
"addr": [
"Rx191ee",
"Rx1927c"
],
"code": "a1 88456d00 8d807c880100 d820 d8354ca44600 d805dcd66900 d825b4a24600
9090909090"
},
"dialog_box_rightedge_1": {
"addr": [
"Rx19232",
"Rx192c3"
],
"code": "d820 90909090"
},
"dialog_box_rightedge_2": {
"addr": [
"Rx19244",
"Rx192d5"
],
"code": "d800 90909090"
},
"unpatch_ending_halfskip": {
"addr": "Rx10521",
"title": "Unpatch the static English patch's rendering skip of the second-
half ending text sprite",
"code": "7402EB21C745FC01000000C745CC00000000B90900000033C08D7DD0"
},
"ret": {
"code": "c3",
"title": "Returns from a function"
},
"meiryo_disable": {
"code": "83c414 909090",
"title": "Disable the enumeration of Meiryo for compatibility to existing
font settings"
},
"font_dialog_params": {
"code": "6a036a006a0068000000006a006a006a006890010000",
"title": "Set parameters for alternate dialog font"
},
"font_dialog_set": {
"code": "6a019090",
"title": "Use alternate dialog font"
},
"trophy_ingame_lineflip_1": {
"ignore": false
},
"trophy_ingame_lineflip_2": {
"ignore": false
},
"ability_ingame_lineflip_1": {
"ignore": false
},
"ability_ingame_lineflip_2": {
"ignore": false
}
},
"breakpoints": {
"ruby_offset": {
"font_dialog": 0,
"font_ruby": 2
},
"ascii_params": {
"cavesize": 5,
".Scale": "0x6228",
"CharWidth": 14,
"addr": "Rx23aa9",
"ClassPtr": "0x47b900"
},
"strings_lookup#cavesize_5": {
"str": "[ebp+0x0c]",
"cavesize": 5
},
"strings_lookup#cavesize_6": {
"str": "[ebp+0x0c]",
"cavesize": 6,
"addr": [
"Rx1e623",
"Rx1e4d3"
]
},
"th06_file_name": {
"cavesize": "5",
"addr": "0x41e370",
"file_name": "ecx"
},
"th06_file_size": {
"file_size": "eax",
"cavesize": "5",
"addr": "0x43cb91"
},
"th06_file_load": {
"file_buffer": "eax",
"eip_jump_dist": "0x277",
"cavesize": "5",
"addr": "0x43cbac",
"file_size": "[0x69d914]"
},
"th06_file_loaded": {
"cavesize": "7",
"addr": "0x43ce19"
},
"gentext#stage_title": {
"file": "stages.js",
"line": 0,
"str": "eax",
"cavesize": 8,
"addr": "Rx1856a",
"ids": "[0x69d6d4]"
},
"spell_name": {
"spell_id": "ecx",
"spell_name": "eax",
"cavesize": "5",
"addr": "0x40962b"
},
"spell_name#result": {
"spell_id_real": "eax",
"spell_id": "eax",
"spell_name": "ecx",
"cavesize": "8",
"addr": "0x42e2b4"
},
"th06_time_fix": {
"time": "eax",
"cavesize": "10",
"addr": "0x4208fb"
},
"music_title#track": {
"track": "ecx",
"cavesize": "9",
"addr": "0x425a19"
},
"music_title": {
"str": "eax",
"cavesize": "6",
"addr": "0x425a66"
},
"th06_music_title_in_game#stage_num": {
"stage": "eax",
"cavesize": "13",
"addr": "0x404510"
},
"th06_music_title_in_game": {
"str": "eax",
"cavesize": "6",
"addr": "0x4185b0"
},
"th06_music_title_in_game#boss": {
"str": "eax",
"cavesize": "6",
"offset": 1,
"addr": "0x418d4f"
},
"music_cmt#track0": {
"track": "eax",
"cavesize": "5",
"addr": "0x425b87"
},
"music_cmt#track": {
"track": "eax",
"cavesize": "6",
"addr": "0x425090"
},
"music_cmt#line_num": {
"line_num": "eax",
"cavesize": "7",
"addr": [
"0x425c17",
"0x4250a6"
]
},
"music_cmt": {
"str": "eax",
"format_id": "Music Room Numbered Title",
"cavesize": "6",
"addr": [
"0x425c67",
"0x4250f6"
]
},
"textimage_set#stage": {
"cavesize": 9,
"addr": "Rx184fd",
"sprites": {
"0x700": "[Rx29d6d4] - 1",
"0x701": "([Rx29d6d4] - 1) * 2",
"0x704": "[Rx29d6d4] - 1",
"0x705": "[Rx29d6d4] - 1"
}
},
"textimage_set#bossbgm": {
"cavesize": 9,
"addr": "Rx18cf9",
"sprites": {
"0x701": "([Rx29d6d4] - 1) * 2 + 1"
}
},
"textimage_is_active#sttitle": {
"slots": "0x700",
"cavesize": 5,
"addr": "Rx18584"
},
"textimage_is_active#stlogo": {
"slots": "ti_stlogo.png",
"cavesize": 5,
"addr": [
"Rx1ae99",
"Rx1aec3",
"Rx1aee4"
]
},
"textimage_is_active#bgm": {
"slots": "0x701",
"cavesize": 5,
"addr": [
"Rx185cf",
"Rx18d6b"
]
},
"textimage_is_active#boss": {
"slots": [
"0x704",
"0x705"
],
"cavesize": 5,
"addr": "Rx18e64"
},
"textimage_init": {
"images": {
"0x700": [
{
"filename": "ti_sttitle.png",
"texture_slot": 47,
"sprite_w": 384,
"sprite_h": 16
},
{
"filename": "ti_stlogo.png",
"texture_slot": 47,
"sprite_w": 384,
"sprite_h": 48
}
],
"0x701": {
"filename": "ti_bgm.png",
"texture_slot": 48,
"sprite_w": 384,
"sprite_h": 32,
"script": "00000104 01000000 00001700 0000110c +384.0f +416.0f +0.0f
78001310 -0.5f +415.5f 00000000 2d000000 a4011310 +0.0f +464.0f 00000000 1e000000
c2010000"
},
"0x704": {
"filename": "ti_bosstitle.png",
"texture_slot": 49,
"sprite_w": 384,
"sprite_h": 64,
"script": "00000104 04000000 0000110c +224.0f +352.0f +0.0f 00000304
00000000 00000c08 f0000000 3c000000 68010c08 00000000 3c000000 a4010000"
},
"0x705": {
"filename": "ti_bossname.png",
"texture_slot": 50,
"sprite_w": 384,
"sprite_h": 64,
"script": "00000104 05000000 0000110c +224.0f +352.0f +0.0f 00000304
00000000 00000c08 f0000000 3c000000 68010c08 00000000 3c000000 a4010000"
}
},
"groups": [
[
"0x704",
"0x705"
]
],
"cavesize": 5,
"addr": "Rx2047e",
"D3DXCreateTextureFromFileInMemoryEx": "0x4401c6",
"pD3DDevice": "[0x6c6d20]",
"TextureSlots": "[0x6d4588]+0x1c110",
"SpriteSpecs": "[0x6d4588]",
"SpriteScripts": "[0x6d4588]+0x1c934"
},
"th06_screenshot": {
"pD3DDevice": "[0x6c6d20]",
"addr": "Rx1cb67",
"cavesize": 5
}
},
"tlnotes": {
"reference_resolution": [
1280,
960
],
"font": "'MS Gothic' 32 0 400 DEFAULT_QUALITY",
"valign": "bottom",
"region_size": [
384,
412
],
"region_topleft": [
864,
516
]
},
"title": "東方紅魔郷 ~ the Embodiment of Scarlet Devil",
"url_update": "http://www16.big.or.jp/~zun/html/th06.html",
"url_trial": "http://www16.big.or.jp/~zun/html/th06.html",
"latest": [
"v0.13",
"v1.02h"
],
"formats": {
"msg": "msg06"
},
"font": "Times New Roman",
"fontrules": {
"* 15 * 700": "* 21 * 100 NONANTIALIASED_QUALITY"
},
"game": "th06"
}
---------------------------
---------------------------
Initialization completed in 0.290631 seconds
---------------------------
===
Exception C0000005 at 0x735FC0D6 (RxC0D6) (\thcrap.dll)
Description:
The instruction at 0x735FC0D6 referenced memory at 0xDDDDDE69. The memory could not
be read.
Registers:
EIP: 0x735FC0D6 EFLAGS: 0x00010246
EAX: 0x00000023 ECX: 0x73642D7C EDX: 0x00000001 EBX: 0x00000001
ESP: 0x0019FD08 EBP: 0xDDDDDDDD ESI: 0x00A84830 EDI: 0x00000000
Stack trace:
===