동방홍마향 v패치 - dongbanghongmahyang vpaechi

동방 패치 센터: 수동식 패치

From Touhou Patch Center

This page is a translated version of a page Touhou Patch Center:Standalone Patches and the translation is 100% complete.


편의상 이 위키에서는 thcrap을 기반으로 한 수동식 한국어 패치를 제공하고 있습니다.
아래 설명을 따르십시오.

주의: 이 방법은 '절대' thcrap을 사용하는데 권장되는 방법이 아닙니다. 둘 이상의 동방 프로젝트 게임이 있는 경우는 '특히' 그렇습니다.

다운로드 페이지의 설명, 또는 사용법에 따라 thcrap을 설치하는 것이 좋습니다. 패치의 중복을 방지하고 모든 동방 프로젝트 게임에 대한 패치를 관리할 수 있는 중앙 프로그램(thcrap)을 사용할 수 있습니다.

패치 파일 (lang_ko 기반)

Mediafire 폴더

(패치 파일 날짜: 2018. 05. 03)

설치법

각각의 압축 파일에는 "thcrap" 폴더와 "동방xxx.exe"라는 프로그램이 있습니다.

1. 압축 파일을 다운로드 하십시오.
2. 게임 파일이 있는 폴더에 압축을 푸십시오.
3. 동방xxx.exe를 눌러 게임을 시작하십시오.

참고 사항

이 수동식 패치는 전적으로 thcrap과 그것의 모든 기능을 기반으로 합니다.
이것은 자동 업데이트가 가능합니다. 즉, 게임을 시작할 때마다 인터넷에 연결하여 새로운 번역을 다운할 수 있는지 확인합니다.
thpatch에서 번역된 내용이 결코 최종버전이 아니며 항상 업데이트되기 때문에 이 자동 업데이트 기능은 유용합니다.

정보

우리가 주목하게 된 것은, thcrap의 자동 업데이트로 인해 기존의 정적 패치가 이제 구식 패치가 되었다는 것입니다.
thcrap은 제한없는 자동 업데이트와 패치 파일 등 위대한 기능들을 제공하지만 일부 사용자들은 thcrap에 몇 가지 문제를 제기합니다.

  1. 사용성: 슬프게도 thcrap_configure.exe는 직관적인 프로그램이 아닙니다. 이것은 우리가 GUI를 통해 해결하고자 하는 주요 사항 중 하나 입니다. 하지만 작동하는 프로토타입이 생길 때까지, 우리는 그 무서운 검은 콘솔 창과 함께 살아야합니다.
  2. 휴대성: 현재 thcrap의 패치 방식은 패치 후 하드 드라이브에서 각 게임의 경로를 포함한 바로가기를 만듭니다.
    이렇게하면 하드 드라이브내에서 어디든지 이동할 수 있는 바로가기가 제공되지만, 예를 들어 패치된 게임을 USB에 담아 친구에게 보여주려면 thcrap_configure.exe를 다시 실행하여 새로운 바로가기를 생성하거나, 최악의 경우 모든 패치 파일을 다시 다운로드해야 하는 문제가 발생합니다.

그러므로 우리는 현재 지원되는 모든 한국어 번역 게임들에 쉽게 사용할 수 있는, 미리 패치 파일을 포함한 수동식 패치를 제공하고 있습니다.
수동식 패치는 전체적으로 thcrap을 기반으로 하기 때문에, 이 번역 내용들은 정적이지 않음을 알아두십시오.

이것이 절대 thcrap을 사용하기 위한 권장 방법이 아님을 유의하십시오.
이러한 패치는 한국어로 게임을 하는 것 이외에 추가 기능을 원하지 않는 사람들에게만 필요한 것입니다.

에… 심유경입니다. 안녕하세요?

그때 패치를 만들었던 분이 최근에 동방 관련 패치를 새로 내놓으신 것 같더군요.
다름아니라 이런 내용이었습니다.

하필 4월 1일에 글이 올라오는 바람에 조금 헷갈렸습니다만 (...)
다른 덧글들을 보니 여러 사람들이 시험해 보고 있는 중인 듯 하더군요.

저도 글쓴이의 아이디를 보고나서 잠깐 옛날글을 찾아보고 나서야
예전 화영총 패치의 그 사람이란 것을 알 수 있었습니다.

무한선율(http://infinite.xrea.jp/) 쪽에도 오늘일자로 관련 내용이 업데이트 되어 있더군요.

일단 파일을 받아 안을 살펴보니 설명 파일이 들어 있더군요.
자세한 설명도 그 안에 있었기에 간단히 인용해 봤습니다.

혹여 저 패치를 사용하시려는 분들께서는 참고해 주세요.
(더불어 재배포 가능이었기에 쿨리어 업로더 주소 외에 제 이글루에 올린 주소를 첨부해 놓습니다. 필요하신 분들께서는 부디..

(패치 설명을 위한 리드미 파일에서 인용)

VsyncPatch

대응 OS:Windows XP SP2 32 bit판 (Win2000도 아마 괜찮음)
미대응:XP나 2000이외는 미대응, dll 인젝션 방식 때문에 95/98 는 동작 불가능

■ 대응 게임
동방홍마향 ver1.02h
동방요요몽 ver1.00b
동방영야초 ver1.00d
동방화영총 ver1.50a
동방문화첩 ver1.02a
동방풍신록 ver1.00a
황혼주점 ver1.00a (web 배포판)

■ 경고
본 비공식 패치는 게임의 내부 동작을 큰 폭으로 변경합니다.
본 패치를 적용하면 불편이 생길지도 모릅니다
실행전에 score.dat 등을 백업하는 것을 추천 합니다
또한, 충분히 동작 확인을 한 다음 사용해 주십시오
특히 본패치를 사용한 상태로 리플레이를 보존, 공개하는 분은 주의해 주십시오

■ 효과
본 패치를 사용함으로써, CPU 사용율이 항상100%가 되는 현상을 피할 수 있습니다
홍마향의 경우, 환경에 의해서 58fps나 62fps 등으로 고정되어 버리는 현상을 회피할 수 있습니다
요요몽의 경우, 앵점이 100만점을 넘으면 표시가 이상해집니다만 이것을 수정할 수 있습니다
풍신록의 경우, window 모드로 50fps가 되거나 하는 현상을 피할 수 있습니다
풍신록의 경우, 확실히 수직 동기 때문에 지연을 느끼는 경우가 있습니다만 이것도 피할 수 있습니다
리플레이를 재생할 때, skip 버튼을 누르면 고속 재생을 할 수 있습니다
수직 동기를 취해도 입력 지연을 줄일 수 있습니다
저성능인 PC에서 수직 동기 OFF 상태로 플레이 하면
탄막이 많이 표시되는 고부하의 장면에서 표시가 이상해지는 경우가 있습니다만 이것도 완화할 수 있습니다
게임을 60fps 이외로, 예를 들면 120fps 으로 엽기플레이를 할 수 있습니다(고성능 PC 필요)

■ 재배포
자유롭게 재배포해 주셔도 괜찮습니다
다만, 압축 파일 내부를 변경, 추가하지 않고 그대로의 상태로 재배포를 부탁합니다

■ 파일
vpatch.exe
dll를 동방.exe에 인젝션하기 위한 실행 파일
동방을 플레이 하고 싶을 때는 이 실행 파일을 실행해 주세요
※vpatch.exe는, 동방.exe의 파일 내용을 고쳐 쓰는 것이 아닙니다
※본패치를 적용한 상태로 동방을 플레이 하고 싶을 때는 반드시 vpatch.exe를 실행할 필요가 있습니다

vpatch_th??.dll
각 동방 시리즈 용의 패치 본체
이 dll가 vpatch.exe에 의해서 게임상에 Load 되어 메모리상의 실행 코드를 고쳐 쓸 수 있게 됩니다

■ 인스톨
vpatch.exe, vpatch_th??.dll, vpatch.ini 파일을
각 동방시리즈를 인스톨한 폴더에 카피 해주세요
ini 파일은 없어도 일단 동작합니다

홍마향의 경우는 vpatch.exe와 vpatch_th06.dll와 vpatch.ini
요요몽의 경우는 vpatch.exe와 vpatch_th07.dll와 vpatch.ini
영야초의 경우는 vpatch.exe와 vpatch_th08.dll와 vpatch.ini
화영총의 경우는 vpatch.exe와 vpatch_th09.dll와 vpatch.ini
문화첩의 경우는 vpatch.exe와 vpatch_th095.dll와 vpatch.ini
풍신록의 경우는 vpatch.exe와 vpatch_th20.dll와 vpatch.ini
황혼주점의 경우는 vpatch.exe와 vpatch_alcostg.dll와 vpatch.ini

※패치의 동작 불량으로 score.dat등이 이상해질 가능성이 있을지도 모릅니다
※만약을 위해 백업을 해놓은 후에 패치를 실행하도록 해주세요
※또한 본 툴상에서는 게임의 버전이 몇인지를 체크하고 있지는 않기 때문에,
※대응되는 버전인지 확인해 주세요
※vpatch.exe는, vpatch 라는 이름이 붙는 dll를 같은 폴더내에서 검색하여
※최초로 발견된 dll를 로드합니다
※따라서, 같은 폴더내에 다른 vpatch dll가 있으면, 잘 기동되지 않습니다.
※동방시리즈를 인스톨한 폴더에는
※대응되는 dll만을 넣어 주세요

■ 언인스톨
인스톨시에 카피한 exe와 dll 및 ini 파일을 삭제해 주세요
또한, 게임상의 「수직 동기를 취하지 않는다」설정에 체크가 들어가게 하므로,
수직 동기를 ON 으로 해 플레이 하고 싶은 경우는 custom.exe를 기동해 「수직 동기를 취하지 않는다」설정의 체크를 지워 주세요

■ 기동 옵션
vpatch.exe를 기동할 때, 커맨드라인 인수로 로드하는 ini 파일을 지정할 수 있습니다
ini 파일의 Path는, 상대적 Path에서도 절대적 Path에서도 파일명만으로도 괜찮습니다
파일명만을 쓰면, vpatch.exe와 같은 폴더에 있는 ini 파일이 읽힙니다

예:
※ vpatch.exe의 존재하는 폴더가 C:\Program Files\TH\kouma\ 일 경우

vpatch.exe "C:\Program Files\TH\vpatch_120fps.ini"
→ C:\Program Files\TH\vpatch_120fps.ini 가 읽힙니다

vpatch.exe ini\vpatch_120fps.ini
→ C:\Program Files\TH\kouma\ini\vpatch_120fps.ini 가 읽힙니다

vpatch.exe vpatch_120fps.ini
→ C:\Program Files\TH\kouma\vpatch_120fps.ini 가 읽힙니다

■ 주의 사항
custom.exe상에서
"Window 모드, 묘화간격=매회"
이런 설정으로 동작 확인을 했었습니다
이 설정 이외에서 잘 동작할지 어떨지는 잘 모릅니다
※본패치를 기동하면 게임상의 「수직 동기를 취하지 않는다」설정이 자동적으로 ON로 됩니다

■ ini 파일
[Window]
enabled = 0 이외라면 아래와 같은 Window 설정을 유효하게 합니다
(Window 모드시에 Window 사이즈나 위치를 변경할 수 있습니다)
X = 화면의 X좌표를 지정
Y = 화면의 Y좌표를 지정
Width = 게임 화면의 폭을 설정(default:640)
Height = 높이를 설정(default:480)
TitleBar = 0 을 지정하면 타이틀 바를 지워 게임 화면으로만 실행 합니다
AlwaysOnTop = 0 이외를 지정하면 (실행 창을)항상 위에 표시합니다

[Option]
Vsync (추천=0)
1 로 지정하면 독자적인 방법으로 수직 동기를 잡아, 묘화를 실시합니다
동방 본가의 수직 동기와는 다르게 입력 지연은 거의 없습니다
뒷 화면에 다음의 프레임을 표시하고 있는 한중간에 수직 귀선 소거기간을 지났을 경우는 동기 하지 않고 곧바로 표시 합니다
즉, 이 경우는 티어링이 발생합니다만 지연 하지 않고 표시가 가능합니다
Vsync=1 로 하는 경우에는 모니터의 refresh rate를 60Hz 로 할 필요가 있습니다
PC환경에 의해 딱 60.00 FPS로 표시 할 수 없을 가능성이 있습니다
(59.75이거나 60.10이기도 합니다)
PC환경에 따라서는 refresh rate를 60으로 설정해도,
실제로는 75fps 가 되기도.. 수수께끼입니다
※액정 모니터로 접속하면 75fps가 될지도 모릅니다
※이 쪽의 환경에서는 CRT 모니터로 접속하면 60fps가 되었습니다
※(Dualview의 경우는, CRT 를 프라이머리로 하지 않으면 안되는 것 같습니다)
※액정 모니터의 경우는 Vsync=0으로 사용해 주십시오
※VGA 디바이스가 '주사선의 확인'를 지원하지 않는 경우에는
※Vsync 기능이 자동적으로 OFF 됩니다

BltPrepareTime (추천=4)
실제로 화면에 표시되기 몇 밀리 세컨드전에 뒷화면에 다음의 프레임을 표시하기 시작하는 지를 지정합니다
0~16의 숫자를 지정해주세요
숫자가 큰 만큼 입력 지연을 느낍니다만,
대량의 탄막이 있는 고부하 상태에서도 매끄럽게 표시할 수 있습니다
고속의 PC라면 4~6 정도를, 저속인 PC라면 10 정도를 지정해 주세요
프레임 표시가 매끄럽게 안 되는 경우는 1씩 늘려가며 테스트해봐 주세요
입력 지연을 느끼는 경우는, 1씩 줄여가며 테스트 해봐 주세요
Vsync=1 로 하는 경우는, BltPrepareTime 를 0보다 큰 수치로 설정해 주세요
0으로 하면 반드시 티아링이 발생합니다
BltPrepareTime=0으로 하면 뒷화면에 표시 후 즉시 겉화면에 전송 합니다만,
뒷화면에 표시할 시간이 탄막의 양에 따라 각양각색 이기에
항상 일정한 표시 간격으로 표시하지 못하고 결국 이상해짐을 느끼게 됩니다.
(특히 저성능인 PC에서 큰 위화감을 느끼게 됩니다.)

BltFineTuneTime (추천=2)
FPS 표시 컨트롤을 완벽하게 하는 경우는 1 이상의 값을 설정해 주세요
0의 경우는 Sleep 복귀 후 곧바로 표시되게 합니다
0 을 지정하면 PC환경에 따라서는 FPS 표시가 꽤 왔다갔다하지만, CPU 부하는 낮습니다
1 이상으로 하면 Sleep 하는 시각을 BltFineTuneTime 밀리세컨드 줄여서
Sleep 복귀 후, 표시 시각을 조사하고 표시 시각에 딱 맞게 표시 하게끔 합니다
1 이상을 지정하면 FPS 표시가 별로 왔다갔다하지 않게 되지만 CPU 부하가 커집니다
Vsync=1 로 하는 경우, BltFineTuneTime=0 으로 하면
티아링 발생율이 증가할지도 모릅니다
※Sleep 은 환경에 의해서 1ms 를 지정해도 1ms 이상 Sleep 해버리는 경우도 있는 것 같습니다
※BltFineTuneTime 에는 1 이나 2 를 설정하는 것이 좋을지도 모릅니다

GameFPS (추천=60)
게임의 FPS를 지정합니다
통상의 경우는 60을 지정해 주세요
60 미만의 수치는 지정할 수 없습니다
※Vsync=1 의 경우엔 모니터의 refresh rate와 같은 FPS가 되어
※GameFPS는 무시됩니다

ReplaySkipFPS (추천=240)
리플레이를 재생하고 있을 때 skip 버튼을 누르면
ReplaySkipFPS 의 비율로 재생할 수 있습니다
이 옵션은 표시하는 속도를 변경할 뿐입니다
Direct3D 명령의 호출을 생략해 내부 변수만 변경하고 프레임을 날려버리는 것은 아닙니다
높은 FPS를 설정해도 저성능인 PC환경에서는 그 비율까지 낼 수 없을 가능성이 있습니다
대응 게임:홍마향, 요요몽, 영야초, 화영총

ReplaySlowFPS (추천=30)
리플레이를 재생하고 있을 때 slow 버튼을 누르면
ReplaySlowFPS의 레이트로 재생할 수 있습니다
괴수 유저의 리플레이를 볼 때 도움이 될지도 모릅니다
대응 게임:홍마향, 요요몽, 영야초, 화영총

CalcFPS (추천=1)
0 이외를 지정하면, 게임상에서 표시되는 FPS 표시를 독자적인 방법으로 산출하도록 합니다
요요몽의 FPS 표시가 이상한 경우에는 1을 지정하면 개선됩니다
GameFPS를 60 이외로 하고 있는 경우는 1을 지정하지 않으면 FPS 표시가 이상하게 될지도 모릅니다
꽤 정확한 FPS를 표시할 수 있다고 생각되기 때문에 CalcFPS=1 을 추천 합니다
Vsync=1 로 하고 있는 경우는 딱 60.00 FPS는 되지 않을거라 생각됩니다

AlwaysBlt (추천=0)
게임 Window가 비활성화 상태라도 항상 표시를 실시하게끔 합니다
이것을 1 로 하면, 키보드 입력을 할 수 없게 됩니다
또,「패드 입력에 DirectInput를 사용하지 않는다」를 ON 으로 할 필요가 있습니다
ON으로 하고 있지 않으면 입력이 이상해져 큰일날지도 모릅니다
대응 게임:홍마향, 요요몽

NoKeyboard (추천=0)
이것을 1로 하면 키보드 입력을 할 수 없게 됩니다만
조금 CPU 부하가 가벼워질지도 모릅니다
또, window 포커스를 떼면 키 입력이 계속 들어가는 현상을 회피할 수 있을지도 모릅니다
「패드의 입력에 DirectInput를 사용하지 않는다」를 ON 로 하고 있는 경우에만
이 설정은 유효합니다
대응 게임:홍마향, 요요몽

BugFixCherry (추천=1)
이것을 0 이외로 하면, 앵점표시 버그를 수정합니다
앵점Now가 100만을 넘었을 때에 표시가 이상해지는 것이 마음이 걸리는 경우엔 1을 지정해 주세요
대응 게임:요요몽

BugFixTh20Power3 (추천=0)
이것을 0 이외로 하면, 풍신록의 관통 장비 마리사의 파워 3상태로 고속 이동시의 샷이 비정상적인 공격력이 되는 버그를 수정합니다
버그 수정이라고는해도 샷의 위력이 122일 경우, 12 로 보정한다는 처리를 실시할 뿐입니다
마리사B, P3, 고속상태, 우측의 메인샷의 위력을 12로 보정하는 처리는 아니기 때문에,
어쩌면, 이외의 영향이 있을지도 모릅니다
충분히 주의하여 사용해 주십시오
BugFixTh20Power3=1 설정으로 해서 보존한 리플레이는 리플레이를 재생하는 측에서도 BugFixTh20Power3=1 으로 하여 재생할 필요가 있습니다
pingval님의 협력에 의해 power3 버그 수정을 실시할 수 있었습니다 감사합니다

ProcessPriority (디폴트=0)
※이 항목은 초기 ini 에는 존재하지 않습니다 수동으로 추가해 주세요
게임의 프로세스의 우선도를 지정합니다
-2:낮음 -1:통상이하 0:통상 1:통상이상 2:높음

ProcessAffinityMask (디폴트=0)
※이 항목은 초기 ini에는 존재하지 않습니다 수동으로 추가해 주세요
어느 CPU로 프로세스를 실행하는지를 제어할 수 있습니다
1:CPU0 에서만 실행
2:CPU1 에서만 실행
3:CPU0 와 CPU1로 실행
각 비트는 프로세스의 쓰레드를 실행할 수 있는 프로세서를 나타냅니다
ProcessAffinityMask 는 10진수로 지정해 주세요

★이 아래에 써 있는 내용은 일반적인 분에겐 필요 없는 정보입니다
★패치가 어떻게 동작하고 있는지,
★또, WindowsAPI의 사양, 동작에 대해 적혀 있습니다
★흥미가 없으신 분은 날려 주셔도 괜찮습니다

■ 기술 정보
본패치가 내부에서 어떠한 동작을 하는지를 써 둡니다
모든 패치는 아래와 같은 모양새로 작동합니다

・동방 본가의 timeBeginPeriod()와 timeEndPeriod()의 호출을 모두 무효화합니다

・어플리 기동시에 timeBeginPeriod(1)를 실행하고 어플리 종료시에 timeEndPeriod(1)를 실행하도록 합니다

・IDirect3D::CreateDevice()를 호출할 때의 인수,
D3DPRESENT_PARAMETERS 내부의 D3DSWAPEFFECT 를, D3DSWAPEFFECT_DISCARD 로 강제 설정합니다
또, DirectX9의 경우, PresentationInterval 멤버 변수에 D3DPRESENT_INTERVAL_IMMEDIATE 를 강제 설정합니다

・본가의 처리에서는, 묘화 개시 시각 미만의 경우에 Sleep(0)가 불려져 WindowMsg 처리에 몇번이나 날려갑니다만,
본패치에서는, 묘화 개시시각판정 처리를 Hook 하여, 묘화 개시 시각까지는 SetWaitableTimer()를 사용해, 대기하게 합니다
WindowMsg 처리는 1 프레임에 1회 밖에 실시하지 않게 합니다

・뒷화면에서 겉화면에의 전송 처리(IDirect3DDevice::Present())를 Hook 해서, vsync 대기 등의 처리를 실시하도록 합니다

・처리의 흐름은 아래와 같습니다
WindowMsg 처리 → 묘화 개시시각까지 Wait → 뒷화면에 묘화 → 겉화면에 전송(Present 처리) → WindowMsg 처리

・FPS 표시를 위한 fps 계산은, Present 처리를 한 시각을 바탕으로 계산합니다(본가에서는 뒷화면 묘화 중의 시각이 원래임)

・요요몽에서 FPS 표시가 흐트러지는 것은,
QueryPerformanceCounter()로 얻은 값의 하위 32bit의 값만을 사용해 연산하기 때문에 일어납니다
특히 QueryPerformanceCounter() 등으로 돌려주어지는 값이 비정상으로 큰 환경에서 FPS 표시가 흐트러진다고 생각됩니다
듀얼 코어 환경의 경우, QueryPerformanceCounter()로 돌려주어지는 값이 RDTSC(Time Stamp Counter)의 값이 되기 위해,
이상해질 것이라고 생각됩니다
듀얼 코어 패치를 적용하면 요요몽으로의 FPS 표시는 고쳐집니다만, 이것은
QueryPerformanceFrequency()로 돌려주어지는 값이, Power Management Timer로 변경되기 때문인듯 합니다
이 TSC와 PM타이머의 정도의 차이는 큰 환경의 경우는 1000배 정도나 다릅니다
※상기 사항은, PC환경에 의하기 때문에 모든 환경에는 들어맞지 않습니다
※http://support.microsoft.com/default.aspx?scid=kb;ja;327809

・풍신록으로 Window 모드시에 왠지 50 fps 이하가 되는 것에 대하여…
PresentationInterval 멤버 변수에 D3DPRESENT_INTERVAL_DEFAULT 가 지정되어있기 때문에 수직 동기가 놓쳐지게 됩니다
이 수직 동기 처리는 Direct3D 내부에서 Sleep()를 사용해 실장되고 있습니다
풍신록에서는 timeBeginPeriod()가 불려 가지 않기 때문에 Sleep의 정도가 10 ms정도가 되어 버려
수직 동기 처리를 잘하지 못하고 날려가게되는 일이 되기 때문에 60 fps를 유지할 수 없게 되어 버리는 것이라고 생각됩니다

・본 패치상의 수직 동기 처리에는 IDirect3DDevice::GetRasterStatus()를 사용하고 있습니다만
InVBlank 멤버 변수를 보고 수직귀선소거 간격을 판단하고 있는 것이 아니라,
ScanLine 멤버 변수를 보고 다음의 수직귀선소거 간격의 시각을 계산하여
그 시각까지 기다리고 나서 Present()를 하게끔 하고 있습니다
환경에 따라서는 InVBlank는 잘 읽어 갈 것 같습니다

■ timeBeginPeriod
timeBeginPeriod()를 호출하면, Sleep()나 WaitForSingleObject() 등의 정도가 바뀝니다
timeGetTime()나 Sleep()의 정도 밖에 변하지 않는다고 생각했으나 큰실수 같습니다
SetWaitableTimer()&WaitForSingleObject()를 사용해, 100 나노초단위의 정도로 대기하고 싶은 경우에는 반드시 timeBeginPeriod(1)를 부를 필요가 있는 것 같습니다
※timeBeginPeriod(1)를 부르지 않는 상태로 WaitForSingleObject()의 정도가 1ms이하의 환경은
※아마 WMP 등의 어플리가 이미 timeBeginPeriod(1)를 부르고 있기 때문에
※정도가 높아지고 있다고 생각됩니다

MSDN 의 timeBeginPeriod()의 해설에
타이머 서비스의 사용 직전에 이 함수를 호출해 타이머 서비스의 사용 종료후 즉시 timeEndPeriod 함수를 호출해 주세요.
..라고 적혀 있습니다
이것을 문자 그대로 삼켜 이대로 적용해버리면,
timeGetTime()를 호출할 때마다 timeBeginPeriod(),timeEndPeriod() 등을 부를 필요가 있는 것 처럼 들립니다만…
완전 거짓말입니다 MSDN의 함정입니다 걸리면 안됩니다 >ZUN님
timeBeginPeriod()를 호출해도 빨라지는 정도가 변하지 않고 약간의 간격을 필요로 한다는 정보도 있습니다
timeBeginPeriod()는 어플리 기동시에,
timeEndPeriod()는 어플리 종료시에 호출하는 것이 좋을 것 같습니다

■ SetWaitableTimer&WaitForSingleObject의 정도에 대해
1.4GHz의 싱글 코어 CPU 탑재 PC환경의 경우에 대하여 1 밀리세컨드 미만 정도를 확인했습니다
아마 이러한 환경에서는 BltFineTuneTime=0으로도 문제가 전혀 없다고 생각됩니다
2.6GHz의 듀얼 코어 CPU 탑재 PC환경의 경우, 정도가 1 밀리세컨드 단위가 되었습니다
1.5 밀리세컨드를 지정해도 2 밀리세컨드 정도 Sleep 해 버립니다
무엇이 원인으로 이렇게 되는지는 모릅니다만,
SetWaitableTimer&WaitForSingleObject의 정도는 환경에 따라 마구 흩어져 신용할 수 없는 것 같습니다

■ 원시코드(소스) 공개에 대해
원시 코드를 공개할 준비는 돼있습니다만
묘화 frame rate 를 자유롭게 제어 가능, 표시되는 FPS의 수치도 자유롭게 설정 가능하게 되는 툴이기 때문에
공개해버리면 여러가지로 문제가 있을 듯 하다는 생각이 듭니다
문제가 없다면 공개하고 싶다고 생각합니다

■ version 이력
2008/04/01 rev1
정식 공개
2008/04/11 rev2
・GetRasterStatus 로 얻은 ScanLine 수치가 모니터 높이값을 넘어버린다는
사양 외 동작을 하는 환경에 대응, 툴 종합쓰레드2 의 >>208님 thx
→Vsync=1 로 하면 부정기적으로 행업 하는 현상이 고쳐질지도
・주사선 읽기를 서포트 하는지 어떤지 조사하는 방법을 변경
ScanLine 수치가 변동하는지를 검사 합니다
・주사선의 속도를 계측하는 방법을 변경
→Vsync=1 으로 하면 Game 기동시에 CPU100% 로 굳어지는 현상이 고쳐질지도
→라고 생각했습니다만, CPU100% 로 멈추는 현상은 사양외의 값을 뱉는 GetRasterStatus 에 얽힌 문제일지도
・ini 항목 추가:AskWindowMode(풍신록, 황혼주점은 원래 있는 기능이기에 비대응)
툴 종합 쓰레드2 >>208님 thx
・기술정보추가:double형 정수에 대해
・풍신록, 황혼주점의 ReplaySlowFPS 대응
문화첩은 리플레이 플래그가 발견되지 않았기에 비대응
・홍마향의 FPS 제어를 조금 변경
・묘화간격을 매회 이외로하면 배속이 되버리는 것에 대해서 입니다만, Game에 따라서
vsync=1 으로 하면 배속화 되는 것 같습니다.(vsync=0 으로도 배속화하는 Game도 있음)
묘화간격:매회(描画間隔:毎回) 이외의 대응은 조금 어렵습니다.
죄송합니다만 사양같은 것으로 받아들여주셨으면합니다.
2008/04/12 rev3
・홍마향: 풀스크린시에 디바이스의 vsync가 on으로 되어있던 것을 off 로 수정
또한, 풀스크린 전용의 FPS제어처리(강제60프레임 등)를 스킵하도록 변경
→풀스크린시, 아마 입력지연이 발생하고 있었을 것이라 생각합니다. 이 수정으로 입력지연이 적어지게 됩니다.
→풀스크린시, 리플레이 고속재생을 할 수 없었던 것이 고쳐집니다.
→풀스크린시, 높은FPS로 Game을 할 수 없었던 것이 고쳐집니다.

■ 제작자
◆swmpLV/75E

..휴; 프로그램 원리 설명 부분은 번역이 약간 이상할런지도 모르겠습니다..;
원문은 압축파일 안에 있는 readme 파일 안에 들어 있으니 참고해봐 주세요.

... 정식 패치가 감감무소식 이다보니 이제는 아예 비공식 패치가 나오는군요. (...)
일로 바쁘신 듯하고.. 할 수 없는 부분도 있습니다만;

여튼 이걸로 풍신록 파워 3.x 의 초마리사 버그도 고칠 수 있다는 것 같습니다.

일단 지금은 풍신록이 언인스톨 상태인지라 당장 CD를 꺼내 다시 설치하려니 귀찮아서..;
마침 인스톨 되어 있는 문화첩으로 테스트를 해봤습니다.

오오, 확실히 빨라진 느낌이 듭니다.
하지만 갑자기 이렇게 빨라지니 오히려 적응이 안되는군요. (...)
이 상태로 풍신록을하면 무난한 노멀 클리어는 물건너갈 것 같습니다. 후후후;;

하지만 위에 설명되어 있는대로 이 비공식 패치를 적용하여
게임을 한 경우 리플레이 파일등을 기존의 것과 호환하여 쓰기가 곤란하고
더욱이 스코어보드 등지에 투고하시는 분이라면 비공식 패치인 만큼
이 패치를 적용한 게임은 무효가 되니 주의해 주세요.

그럼, 간만에 문화첩에 다시 도전해 봐야 겠습니다.
저는 이만.. 읽어주셔서 감사합니다.